14 votos

Transfiriendo una gran cantidad de archivos (~100,000)

Trabajo con carpetas que contienen una gran cantidad de archivos, como 100 000 o incluso 1 000 000 archivos por carpeta. Cuando intento mover el contenido de una carpeta a otra, mi computadora siempre se queda atascada. Incluso cuando el proceso parece haber terminado, no puedo ver el contenido de ninguna carpeta porque Nautilus parece estar completamente congelado y tengo que forzar el reinicio de mi computadora. Noté que esto también sucede cuando intento mover unos 10 000 archivos.

¿Es ese un problema de mi computadora o es normal cuando se trabaja con estos números?

¿Alguna manera inteligente de realizar esta transferencia de archivos?

20voto

Shaun Bohannon Puntos 271

Tal vez considere usar un método de línea de comandos puro para transferir cantidades muy grandes de archivos, sin duda encontrará que el proceso es considerablemente más rápido que usar una interfaz gráfica.

Hay muchas formas diferentes de lograr esto, pero lo siguiente funcionó rápidamente, de forma segura y eficiente en mi sistema:

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t 

Alguna explicación para este comando:

  1. Su directorio de entrada es el carácter '.' y para este comando en particular necesita estar en ese directorio
  2. Su directorio de salida es el en mi ejemplo. Obviamente modifíquelo según sus propias necesidades y omita los corchetes.
  3. ¡Esta sintaxis permite nombres de archivos con espacios como un bono adicional! :)

Hay infinitas permutaciones posibles pero esto debería funcionar bien y mucho más eficientemente que la interfaz gráfica. Una permutación, por ejemplo: si quisiera mover solo archivos pdf, podría ejecutar:

find . -iname "*.pdf" -maxdepth 1 -type f -print0 | xargs -0 mv -t 

El uso de xargs abre muchas posibilidades particularmente con el movimiento de una cantidad tan grande de archivos. Muchas, muchas posibilidades...

Problemas Potenciales:

Hay al menos 2 posibles problemas a considerar, gracias a los comentaristas a continuación por estos pensamientos:

  1. Su directorio de destino podría estar corrupto, en una ubicación posteriormente inalcanzable, mal escrita, etc. ¡mv moverá los archivos allí de todas formas! ¡Tenga cuidado aquí...
  2. Si falta la opción -t (--target-directory) y la carpeta de destino es en realidad un archivo, moverá un archivo y fallará en el resto. mv tiene 2 usos: renombrar origen como destino o mover origen a directorio. Nuevamente tenga cuidado...

4voto

Sneetsher Puntos 15107

Tuve una experiencia similar antes, es normal cuando se trata con una gran cantidad de archivos. Tenía una gran colección de fichas técnicas en PDF (piezas electrónicas).

Las herramientas GUI comprueban algunos detalles y metadatos de archivo (Icono/Miniatura, Tamaño, ...), será un gran problema en ese caso. Incluso en Vista de Iconos y sin miniaturas, se congelarán ya que la mayoría de ellas no están diseñadas para tal caso extremo. La herramienta GUI intenta cargar iconos de presentación para todos los archivos/carpetas en el directorio incluso si esos elementos no son visibles para el usuario en la porción de pantalla actual. La Ordenación también es parte del problema y no hay forma de evitarlo.

  • Terminé dividiendo los archivos en carpetas separadas basadas en marca/modelo de menos de 10000 cada una. Puede usar la fecha (como hacen la mayoría de personas con fotos/escaneos) o las primeras letras (como en repositorio de paquetes de Ubuntu)
  • Es más fácil usar herramientas de CLI en lugar de las de GUI ya que muestran solo lo que has solicitado. Puedes usar locate para una búsqueda rápida en lugar de find.
  • Para la operación de mover, usa mv en la terminal (las herramientas de GUI son lentos porque intentan actualizar la vista periódicamente).

    Si está en la misma partición, el comando solo cambiará los punteros en el índice del sistema de archivos. Si no, entonces será una operación dual (copiar y borrar). Eso será costoso.

Solo hay un caso en el que puedo ayudar, si estás copiando esos archivos múltiples veces y no están actualizados. Como hice cuando comparto mi colección con amigos, cada vez que intento copiar lleva una eternidad. (Esto es más útil solo con archivos de pequeño tamaño)

  • Crea un solo paquete o unos pocos paquetes, como zip sin compresión o con poca compresión. Cuando lo copies, será más rápido, así que deja que DMA haga su trabajo.

3voto

Suriya Puntos 74

Si buscas una solución que te brinde los beneficios de las operaciones de línea de comandos con la sensación y flexibilidad de una interfaz gráfica de usuario combinadas, te recomiendo mc (midnight commander).

mc commander 2-pane view

Es un administrador de archivos visual basado en ncurses: tienes una vista de dos paneles en tus archivos y un menú disponible. El uso del mouse es posible, incluso a través de ssh. Puedes navegar por tu sistema de archivos, inspeccionar archivos con el visor de archivos, filtrar según criterios sobre la marcha y realizar las operaciones de copia o movimiento en la línea de comandos.

Es un clon del programa DOS Norton commander que fue popular en la mitad de los años ochenta. Funciona bien cada vez que la interfaz gráfica de usuario comienza a volverse poco confiable para mí, y es ideal para tu propósito.

0voto

M Szil Puntos 21

Me he encontrado con problemas algo similares: estaba probando mi configuración de RAID y al hacer transferencias enormes (por ejemplo, 100,000+ archivos y 1-2 TB de datos de una sola vez) parece que las transferencias comienzan bastante rápidas - digamos ~200MB/seg, luego disminuyen rápidamente hasta un plateau razonable de ~90-120MB/seg (posiblemente después de consumir algo de almacenamiento de caché flash en las unidades). Luego, después de 20-30 minutos, la operación comienza gradualmente a caer a un plateau mucho más bajo de ~30-40MB/seg, siendo peor cuando se trata de archivos pequeños; lo que convierte una operación de 4-5 horas en unas 15 horas.

He pasado algo de tiempo tratando de diagnosticar posibles fallas en el disco. A pesar de probar diferentes herramientas - línea de comandos, nautilus, no pude mantener un rendimiento decente para operaciones de copia muy grandes.

Lo que mejor me funcionó fue usar el comando midnight commander, y siempre que la copia se volvía lenta, pausaba la operación hasta que la luz del disco duro se apagaba después de que se completaban todas las operaciones pendientes - lo que usualmente tomaba un minuto más o menos - luego volvía a reanudar el midnight commander y la velocidad volvía a subir a un ritmo decente por otros 20-30 minutos. Aunque bastante molesto.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X