La razón por la que sucede de esa manera es que el programa dice "escribir estos datos" y el kernel de Linux los copia en un búfer de memoria que está en cola para ir al disco, y luego dice "ok, hecho". Entonces el programa piensa que ha copiado todo. Luego, el programa cierra el archivo, pero de repente el kernel lo hace esperar mientras ese búfer se extrae al disco.
Entonces, desafortunadamente, el programa no puede decirle cuánto tiempo llevará vaciar el búfer porque no lo sabe.
Si desea probar algunos trucos para usuarios avanzados, puede reducir el tamaño del búfer que utiliza Linux configurando el parámetro del núcleo vm.dirty_bytes
en algo como 15000000
(15 MB). Esto significa que la aplicación no puede obtener más de 15 MB antes de su progreso real. (Puede cambiar los parámetros del kernel sobre la marcha, sudo sysctl vm.dirty_bytes=15000000
pero hacer que se mantengan durante un reinicio requiere cambiar un archivo de configuración como el /etc/sysctl.conf
que podría ser específico para su distribución).
Un efecto secundario es que su computadora puede tener un rendimiento de escritura de datos más bajo con esta configuración, pero en general, me resulta útil ver que un programa se ejecuta durante mucho tiempo mientras escribe muchos datos frente a la confusión de tener un El programa parece estar hecho con su trabajo, pero el sistema está muy retrasado ya que el núcleo hace el trabajo real. Establecer dirty_bytes
un valor razonablemente pequeño también puede ayudar a evitar que su sistema deje de responder cuando tenga poca memoria libre y ejecute un programa que de repente escriba muchos datos.
¡Pero no lo configure demasiado pequeño! Utilizo 15 MB como una estimación aproximada de que el núcleo puede vaciar el búfer a un disco duro normal en 1/4 de segundo o menos. Evita que mi sistema se sienta "lento".