Realizar backups con rsync controlados mediante nice e ionice | Algo de Linux

martes, 24 de abril de 2012

Realizar backups con rsync controlados mediante nice e ionice

Si queremos realizar backups de una máquina en la que el usuario se encuentra trabajando, pero no queremos que el proceso de backup interrumpa el trabajo del usuario ni ralentice el equipo, podemos utilizar herramientas como nice e ionice.

Por una parte, nice nos permite cambiar la prioridad de un proceso.
Por defecto, todos los procesos tienen una prioridad igual ante el CPU que es de 0.  Podemos usar nice para lanzar un proceso con una determinada prioridad más alta o más baja que la que se asigna por defecto, según se requiera. Las prioridades van de -20 (la más alta) a 19 la más baja. Sólo el usuario root puede asignar prioridades negativas.

Por otra parte, ionice nos va a permitir modificar la prioridad con la que un determinado proceso accede al disco. Esto es muy importante, por ejemplo, cuando queremos realizar un backup transparente, de tal forma que el usuario no note la sobrecarga de estar realizándolo mientras trabaja.

Mediante ionice podemos asignar un proceso a uno de los siguientes planificadores de entrada/salida:
  • Idle (3). El proceso sólo podra acceder a disco cuando el resto de programas se encuentren inactivos. Este planificador no se encuentra disponible para procesos  de usuario ordinarios (no-root).
  • Best effort (2). Nos permite definir una prioridad de 0 a 7, donde 0 es la mayor prioridad y 7 es la menor.  Y si varios programas tienen la misma prioridad, accederán al disco mediante el algoritmo round-robin.
  • Real time (1). Tan pronto como el proceso pida el acceso se le concederá. Al igual que en el caso de Best effort, se pueden establecer 8 niveles de prioridad (del 0 al 7) indicando como de grande el tiempo de acceso que se le concede. Este planificador no se encuentra disponible para procesos  de usuario ordinarios (no-root).
Combinando nice e ionice podemos ejecutar procesos que realicen un backup mediante rsync de forma transparente al usuario, si que se resienta el uso del sistema mientras el proceso esté en marcha. 

Veamos un ejemplo que he probado: Nuestros portátiles tienen una partición /dev/sda2 en la que se encuentra instalado el sistema y disponen de otra partición /dev/sda3, que podríamos usar como copia de seguridad. Podríamos hacer una copia del contenido de la partición /dev/sda2 en /dev/sda3 de la siguiente manera:


# mount  /dev/sda3 /mnt

# nice -n19 ionice -c3 rsync -aSv --exclude "mnt" / /mnt/

Como podemos ver, lo primero que hacemos es montar la partición de destino en /mnt. Una vez montada, lanzamos el proceso rsync con la menor prioridad de proceso (19) y la menor prioridad en la entrada/salida (3).