Tengo 5 millones de archivos que ocupan aproximadamente 1 TB de espacio de almacenamiento. Necesito transferir estos archivos a un tercero.
¿Cuál es la mejor manera de hacer esto? Intenté reducir el tamaño usando .tar.gz, pero a pesar de que mi computadora tiene 8 GB de RAM, aparece un error de "memoria del sistema".
¿Es la mejor solución para enviar por correo los archivos?
memory
tar
compression
out-of-memory
oshirowanen
fuente
fuente
.tar.gz
o COPIAR el archivo comprimido resultante? De cualquier manera, algo es extraño, porque ninguna de las operaciones debería consumir más memoria solo porque los archivos son grandes. Es decir, ambas operaciones deberían estar en streaming. Incluya más información sobre exactamente qué comandos están fallando.tar
que solo debería archivar los archivos de forma incremental a medida que los enumera, nunca construyendo una lista en la memoria. Pero nuevamente, muestre el comando exacto que está utilizando. Además, ¿están todos los archivos en el mismo directorio o la estructura del directorio es muy profunda?Respuestas:
La información adicional proporcionada en los comentarios revela que el OP está utilizando un método GUI para crear el
.tar.gz
archivo.El software GUI a menudo incluye mucha más hinchazón que el software equivalente de línea de comando equivalente, o realiza tareas innecesarias adicionales en aras de alguna característica "adicional" como una barra de progreso. No me sorprendería si el software GUI está tratando de recopilar una lista de todos los nombres de archivo en la memoria. No es necesario hacer eso para crear un archivo. Las herramientas dedicadas
tar
ygzip
están definitivamente diseñadas para trabajar con la entrada y salida de transmisión, lo que significa que pueden manejar entradas y salidas mucho más grandes que la memoria.Si evita el programa GUI, lo más probable es que pueda generar este archivo utilizando una
tar
invocación diaria completamente normal como esta:donde
foo
está el directorio que contiene todos tus 5 millones de archivos.Las otras respuestas a esta pregunta le dan un par de
tar
comandos alternativos adicionales para probar en caso de que desee dividir el resultado en varias partes, etc.fuente
¿"cinco millones" de archivos y 1TB en total? Sus archivos deben ser muy pequeños, entonces. Simplemente intentaría
rsync
:Si no tiene eso, o si su caso de uso no permite su uso
rsync
, al menos comprobaría si7z
funciona con sus datos. Puede que no, pero creo que todavía vale la pena intentarlo:O si no se siente cómodo con
7z
al menos intentar hacer un.tar.xz
archivo:(debe tenerse en cuenta que las versiones anteriores de
tar
no crean.tar.xz
archivos, sino.tar.lzma
archivos, cuando se usa elJ
interruptor. Incluso las versiones anteriores detar
, no admiten laJ
bandera por completo).Dado que está utilizando un programa GUI para crear esos archivos, supongo que se siente un poco incómodo con una interfaz de línea de comandos.
Para facilitar la creación, gestión y extracción de archivos desde la interfaz de línea de comandos, existe la pequeña utilidad llamada
atool
. Está disponible para prácticamente todas las distribuciones comunes que he visto, y funciona prácticamente en todos los archivos con los que me he topado, a menos que los oscuros sean irremediablemente oscuros.Compruebe si su distribución tiene
atool
en sus repositorios, o pídale a su administrador que la instale, cuando esté en un entorno de trabajo.atool
instala un montón de enlaces simbólicos en sí mismo, por lo que empacar y desempacar se convierte en una brisa:Crea un archivo.
Expande el archivo.
Enumera el contenido del archivo.
Qué tipo de archivo se crea, lo
atool
distingue por la extensión del nombre de archivo de su archivo en la línea de comando.fuente
rsync
es que si (cuando) la conexión se rompe,rsync
puede continuar donde se quedó.A menos que pueda hacer una compresión mejor que 25: 1, es poco probable que gane algo al comprimir esto antes de enviarlo por correo, a menos que tenga algún formato de cinta de hardware que pueda intercambiar con el tercero.
El almacenamiento común más grande es blue ray y eso te dará aproximadamente 40 Gb. Necesitaría una compresión de 25 a 1 en sus datos para que se ajuste a eso. Si su tercero solo tiene DVD, necesita 125: 1 (aproximadamente).
Si no puede hacer coincidir esos números de compresión, simplemente use un disco normal, copie y envíe por correo postal a un tercero. En ese caso, enviar algo más pequeño que una unidad de 1Tb que necesitaría compresión es una locura.
Solo tiene que comparar eso con el uso
ssh -C
(compresión estándar) o preferiblementersync
con la compresión para copiar los archivos a través de la red, sin necesidad de comprimir y tapar por adelantado. 1Tb no es imposible moverse por la red, pero llevará un tiempo.fuente
¿Consideraste torrent? Peer-to-Peer podría ser su mejor opción para una transferencia por Internet:
No dijiste qué sistema operativo estabas usando, pero como estás hablando de la compresión tar.gz, asumiré que estás usando un sistema operativo similar a GNU / Linux. Para eso sugeriré Transmisión . Es un software de torrent de código abierto que se ejecuta en Mac y Linux. Me gusta porque los desarrolladores se esforzaron por hacerlo nativo a todos los clientes de GUI que admiten: sin lenguaje multiplataforma.
Puede combinar este método con la compresión, sin embargo, perderá la capacidad de priorizar partes de la transferencia.
fuente
7z sería mi elección. Permite la división automática de archivos y admite compresión multiproceso. No,
xz
no, a pesar de lo que dice el mensaje de ayuda. Probar con:La salida se divide en bloques de 100 MB (cámbiela con el
-v
interruptor).El único inconveniente real es que 7z no retiene metadatos de Unix (por ejemplo, permisos y propietario). Si lo necesita, canalice la
tar
salida en su7za
lugar (consulteman 7za
algunos ejemplos).fuente
The only real downside
pero que inconveniente!split
un archivo .tar.gz y mantener los metadatos.tar
enfoque.Sí, buena suerte para que eso se empaquete. Y la herramienta GUI intentará hacerlo en el mismo volumen, lo que significa que a) necesita otro 1Tb de espacio libre yb) la agitación de leer un archivo y agregarlo al archivo no será demasiado saludable para la unidad.
Veo dos posibilidades:
1) rsync desde su computadora a la tercera parte. Uno u otro necesitará una dirección IP global que no cambie con frecuencia. La gran ventaja de rsync es que si te interrumpen por cualquier motivo, puede continuar donde lo dejó. Copiar un tarball de 1Tb tendrá éxito o fallará
2) compre una unidad externa de 1Tb, copie cosas y haga que se entregue la unidad. Alta latencia, pero muy buen ancho de banda cuando llega. Varios servicios de respaldo en línea para esto para el respaldo inicial.
fuente
Te sugiero que uses algo como:
que creará 10 archivos que tendrán un máximo de 100 GB. Pero eso no respondería a su problema de "OOM" ya que se supone que el tar transmite su lectura / escritura, por lo que el cuello de botella es obviamente gzip.
fuente
Qué hay sobre eso:
find
búsquedas enumera el árbol de directoriostar -T -
lee la lista de stdin-czf -
crea un archivo y escribe en stdout,z
comprime la secuenciassh remotehost
iniciar sesión en remotehost usandossh
cd /target/dir/
cambiar al directorio de destinotar xzf -
extraer el flujo entrante de stdinfuente
Con fexsend puede enviar archivos de cualquier número y tamaño a cualquier destinatario sobre la marcha, consulte:
http://fex.rus.uni-stuttgart.de:8080/usecases/downunder.html
Por supuesto, necesita un servidor F * EX, pero es gratis:
http://fex.rus.uni-stuttgart.de:8080/
fuente