miércoles, 18 de enero de 2012

Unidades externas NTFS. Lentitud y consumo de recursos

Hoy he intentado terminar con mis problemas de copias a unidades externas NTFS y he visto el verdadero problema - la lentitud (ver también aquí). He dado la orden de copia de 386 GB de material multimedia de una unidad conectada en un S-ATA interno formateado en NTFS a un disco externo también formateado en NTFS y conectado por un USB externo. El sistema no se bloquea completamente, simplemente copia muy lentamente y consume la mayor parte del sistema. El resultado han sido 9 horas de copia, a una velocidad de 12MB/s y con un sistema en el que no se podía hacer nada. No se podía llamar a ninguna aplicación gráfica y en terminal tardaban 10 minutos en ejecutarse ordenes tan simples como cd .. o ls. Lo mejor de todo es que he realizado la misma orden en un ordenador con Windows 7 y copia a la misma velocidad (12MB/s); eso si, el sistema está disponible para hacer otras cosas.
Soluciones:
- No usar discos NTFS, lo que es difícil si queremos mantener compatibilidad con otros ordenadores no Windows y con aparatos multimedia que solo entienden FAT y NTFS.
- Si hay que usarlos, copiar en un ordenador libre y con mucha paciencia. Además, si se dispone de él, usar un ordenador con Windows.
- Si se dispone de un solo ordenador, evitar el bloqueo de pantalla, ya que de lo contrario tendremos un ordenador con una pantalla en negro un tiempo muy largo y que no se sabe cuanto va a durar. Evitar mal carácter y nunca reiniciar por las malas, ya que no se desmontan bien las unidades y nos montamos un lío, perdemos ficheros y acabaremos reparando el ordenador en las fstab.

3 comentarios:

  1. Limitación de uso de la CPU por parte de un proceso:

    apt-get install cpulimit

    Ejemplo:

    cpulimit --pid=N1 --limit=N2

    N1 -> PID del proceso
    N2 -> Porcentaje (de 0 a 100) de CPU del que dispondrá el proceso

    Saludos.

    ResponderEliminar
  2. Veo varios problemas:
    - Para saber la PID, necesitas haber iniciado el proceso. Luego, una vez iniciado, descartamos las búsquedas de PID gráficas (Monitores de sistema).
    - Localización de PID terminal:
    ps -ef | grep proceso
    pgrep proceso
    pidof proceso
    - ¿Como se llama este proceso? Tengo que fijarme
    Leyendo sobre cpulimit, recomiendan ejecutarlo como root. Tal como se bloquea el sistema al copiar entre dos unidades NTFS para dar estas ordenes
    $ top # saber el nombre con que llamar al proceso (ha, ha, ha!)
    $ pidof proceso
    numerito
    $ su -
    palabrita
    # cpulimit --pid=numerito --limit=30
    Hasta que todo eso se ejecute ya pasaron 40 minutos
    $ cpulimit

    ResponderEliminar
  3. Pues en lugar de usar el argumento

    --pid=nº de proceso

    utiliza la ruta completa del ejecutable, así podrás limitarlo antes de lanzarlo:

    cpulimit --path=/ruta/ejecutable --limit=N

    Ej:
    En una terminal, como root, establecí este límite para 'dd':

    root@pc1:~# cpulimit --path=/bin/dd --limit=50
    Warning: no target process found. Waiting for it...
    Process 2227 detected
    Process 2227 dead!
    Warning: no target process found. Waiting for it...

    Y en otra terminal, como usuario normal, comencé la ejecución de 'dd' para crear un fichero aleatorio de 10 MB:

    lince@pc1:~$ dd if=/dev/urandom of=aleatorio.txt bs=10M count=1

    Como puedes ver, cpulimit se mantiene a la espera hasta que lanzo el proceso, y luego detecta tanto su inicio como su finalización, quedando de nuevo a la espera.

    ResponderEliminar