¿Por qué la rm es lenta en una unidad de almacenamiento externa (conectada por USB, escriba fuseblk) con 50 Gb de files?

He intentado usar rsnapshot para hacer copys de security, pero me parece inutilizable. Si bien es capaz de modificar un directory (50 gb) y duplicarlo (enlazar todos los files) en unos pocos minutos, y puedo copyr todo el directory en aproximadamente media hora, se tarda más de una hora en eliminarlo. Incluso utilizando directamente rm -rfv , creo que puede llevar hasta medio segundo registrar un solo file, mientras que los commands de cp y link completan al instante.

¿Por qué soy tan lento? ¿Hay alguna forma más rápida de eliminar recursivamente los enlaces duros? No tiene sentido para mí que copyr un file tome less time que eliminarlo.

El sistema de files en el que estoy trabajando es un disco de almacenamiento externo, conectado a través de usb y tipo fuseblk (que creo que significa que es ntfs). Mi computadora ejecuta ubuntu linux.

Salida desde arriba:

 Cpu(s): 3.0%us, 1.5%sy, 0.0%ni, 54.8%id, 40.6%wa, 0.0%hi, 0.1%si, 0.0%st Mem: 8063700k total, 3602416k used, 4461284k free, 557604k buffers 

Solutions Collecting From Web of "¿Por qué la rm es lenta en una unidad de almacenamiento externa (conectada por USB, escriba fuseblk) con 50 Gb de files?"

En última instancia, no importa lo que haga, rm debe ejecutar la unlink en cada file que quiera eliminar (incluso si llama a rm -r en el directory padre). Si hay muchos files para eliminar, esto puede llevar mucho time.

Hay dos processs que consumen mucho time cuando ejecuta rm -r :

  1. readdir , seguido de,
  2. una cantidad de llamadas para unlink .

Encontrar todos los files, y luego examinar cada file para eliminarlo, puede llevar mucho, mucho time.

Si encuentra que esto "no se puede usar" porque deja el directory inutilizable por algún time, considere mover el directory principal antes de eliminarlo. Esto liberará ese nombre para que el progtwig lo vuelva a utilizar, sin que el time sea demasiado inconveniente.

Suponiendo que el sistema de files realmente es NTFS (no está claro a partir de su pregunta), NTFS generalmente es bastante lento en la eliminación de grandes cantidades de files. Puede considerar utilizar un sistema de files más adecuado para sus propósitos (los filesystems ext más recientes tienen un performance de eliminación bastante bueno, si no tiene otras necesidades particulares). FUSE en sí mismo tampoco es particularmente rápido, en general. Puede considerar ver si puede hacer esto de alguna manera que no use FUSE.

¿Por qué soy tan lento? No tengo idea. Pero sí sé de una manera más rápida:

 mkdir blank rsync -a --delete blank/ test/ 

Actualización: esta respuesta en Serverfault tiene algunas explicaciones. Parece que rsync está eliminando los files en un order particular que hace que el tree del sistema de files permanezca equilibrado, y nunca necesite reequilibrio. rm simplemente eliminará los files y provocará un gran reequilibrio a medida que se eliminen. Hay información sobre el reequilibrio aquí .

Bueno, una vez tuve un problema similar con el tuyo. Descubrí que tu "wa" es alto, podrías usar

 iostat -x 1 

para comprobar si la utilidad de disco es alta, si es así, significa que su disco está bastante ocupado. Verifique si algunos otros processs están escribiendo en el disco continuamente.

Para simplificar, usa

 vmstat 1 

para verificar si b es alto o r < b . Eso indica algo mal. En su situación, creo que el disco es motivo original.