Se necesita *muy* mucho tiempo para expulsar mis unidades flash

Se necesita *muy* mucho tiempo para expulsar mis unidades flash

Estoy ejecutando una instalación nueva en Debian 8 y, a menudo, tengo que esperar un tiempo ridículo antes de que mis unidades flash sean expulsadas (entre 1 y 10... 15 minutos). Durante este tiempo, no puedo acceder a nada relacionado con la unidad porque aparece el errorAn operation is already pending.

Parece que no tiene nada que ver con el formato de la unidad flash (he probado FAT, ext4, NTFS), pero también parece iniciarse cuando empiezo a colocar archivos en ellos. (Aunque nada pesado, ~500Mb).

¿Qué podría estar causando este problema? ¿Hay algo que pueda hacer para acelerar la expulsión?

Respuesta1

Aunque no sé si esta es la explicación/solución real a su pregunta, creo que es un problema con el USB en general.

Si copia archivos grandes o muchos archivos, el dispositivo USB enviará un mensaje al host que dice "Estoy a punto de enviarle estos archivos". Luego, el dispositivo enviará todos los archivos de forma asincrónica y se tomará el tiempo necesario para hacerlo. Esto significa que cuando haga una copia, cp /my/flash/drive/foo.txt /home/bar/foo.txtel dispositivo le indicará al sistema operativo que los archivos se están copiando y luego los enviará.

La única forma que conozco de comprobar si todos los datos realmente se han transferido es ingresar syncdespués de ejecutar un comando que copie/mueva o elimine archivos en una unidad flash. El comando de sincronización simplemente se bloqueará hasta que la unidad termine de transferir datos. Después de eso, debería ser seguro desmontar/expulsar una unidad flash USB.


[EDITAR]: comprobaresta publicaciónpara ver el progreso de la syncoperación: el número impreso cuando se ejecuta

watch grep -e Dirty: -e Writeback: /proc/meminfo

debería disminuir hasta cero a medida que se producen transferencias de datos en segundo plano. Cuando termine, syncse completará y se expulsará la unidad flash.


Otro problema común con la expulsión de dispositivos de almacenamiento USB es que al menos Debian no lo permitirá si hay un programa, terminal o similar actualmente trabajando en archivos/carpetas en esa unidad flash. Entonces, si cambió el directorio a una carpeta en esa unidad flash en una terminal y luego intenta expulsar la unidad flash usando otra terminal, no lo permitirá hasta que haya cambiado el directorio a otro lugar que no esté en la unidad flash en la primera terminal.

Respuesta2

Es probable que esto se deba a la acumulación de escrituras en caché que aún no se han escrito en el dispositivo, como se describe en"El pernicioso problema del bloqueo de la memoria USB".

Como solución alternativa, puedeslimitar la cantidad de memoria suciadebido a IO sobresaliente:

echo $((16*1024*1024)) | sudo tee /proc/sys/vm/dirty_background_bytes
echo $((48*1024*1024)) | sudo tee /proc/sys/vm/dirty_bytes

información relacionada