Hola
En las últimas versiones de Ubuntu 16.04, 16.10 y 17.04 siempre he tenido problemas para copiar ficheros grandes (desde varios cientos de MB en adelante) desde el disco duro a unidades NTFS externas vía USB.
Al copiar estos ficheros la velocidad de copiado se va degradando poco a poco, llegando a bajar a velocidades de unos pocos cientos de bytes/sec. Si dejas el proceso de copia lanzado horas y horas
finalmente la copia se efectúa correctamente y el sistema se recupera, pero mientras se ejecuta el proceso de copiado el rendimiento general del sistema se degrada, llegando incluso a dejar de responder el ratón y el teclado, con lo que he llegado a tirar del cable USB o incluso a reiniciar el PC, cosa que no he tenido que hacer en Linux nunca.
Después de mucho googlear he dado con una solución PARCIAL que me permite una velocidad de copiado normal, PERO QUE SOLO FUNCIONA MEDIANTE LINEA DE COMANDOS lanzando cosas como:
cp /path-origen/mi-fichero-grande /media/egdepedro/usbdisk
EL TEMA NO FUNCIONA SI COPIAMOS DESDE GNOME USANDO POR EJEMPLO NAUTILUS, POR ESE LADO HAY QUE SEGUIR INVESTIGANDO......
El problema viene por la extrema lentitud de los accesos USB, pero hay claramente algún bug que lleva ya años apareciendo y que no he notado en versiones anteriores de Ubuntu.
La solución es ajustar ciertos parámetros del kernel vía '/proc/sys/vm' y hacer luego esos ajustes permanentes en todos los arranques. Los pasos son:
1) Creamos el fichero de configuración del servicio /etc/systemd/system/rc.local.service con el siguiente comando:
sudo gedit /etc/systemd/system/rc.local.service
2) Copiamos en el fichero de configuración del servicio el siguiente contenido:
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
3) Creamos el script /etc/rc.local con el siguiente comando:
sudo gedit /etc/rc.local
4) Copiamos en el script el siguiente contenido:
#!/bin/sh
echo 'tupasswordroot' | sudo -S su
echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes
echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes
5) Cambiamos los permisos al script para que sea ejecutable
sudo chmod 755 /etc/rc.local
6) Por último activamos el servicio y lo iniciamos con los comandos:
sudo systemctl enable rc.local.service
sudo systemctl start rc.local.service
7) Podemos verificar que el servicio está bien generado con el comando:
sudo systemctl status rc.local.service
Que debería devolver algo de tipo:
systemctl status rc.local.service
rc.local.service - /etc/rc.local Compatibility
Loaded: loaded (/etc/systemd/system/rc.local.service; enabled; vendor preset: enabled)
Active: active (exited) since Sat 2017-09-23 01:15:22 CEST; 1min 2s ago
14) Reiniciamos el PC y ya podemos copiar a la unidad USB ficheros grandes de forma ágil y sin afectar al rendimiento del sistema. OJO COPIANDO SIEMPRE DESDE LINEA DE COMANDOS.
Eso sería todo.
Nota. Para restaurar los valores de los parámetros del kernel 'dirty_background_bytes' y 'dirty_bytes' deberíamos hacer lo siguiente:
sudo systemctl stop rc.local.service
sudo systemctl disable rc.local.service
sudo rm /etc/systemd/system/rc.local.service
sudo rm /etc/rc.local
cd /proc/sys/vm
sudo su
echo 0 > /proc/sys/vm/dirty_background_bytes
echo 0 > /proc/sys/vm/dirty_bytes
Y tras reiniciar el PC todo volvería a estar como al comienzo.
Referencias:
https://lwn.net/Articles/572911/
https://unix.stackexchange.com/questions/107703/why-is-my-pc-freezing-while-im-copying-a-file-to-a-pendrive
https://www.netroby.com/view/3895
No hay comentarios:
Publicar un comentario