dump/restore

La herramienta clásica para realizar backups en entornos Unix es desde hace años dump, que vuelca sistemas de ficheros completos (una partición o una partición virtual en los sistemas que las soportan, como Solaris); restore se utiliza para recuperar archivos de esas copias. Se trata de una utilidad disponible en la mayoría de clones del sistema operativo8.1, potente (no diremos `sencilla') y lo más importante: las copias son completamente compatibles entre Unices, de forma que por ejemplo podemos restaurar un backup realizado en IRIX en un sistema HP-UX. Además, como veremos luego, la mayor parte de las versiones de dump permiten realizar copias de seguridad sobre máquinas remotas directamente desde línea de órdenes (en el caso que la variante de nuestro sistema no lo permita, podemos utilizar rdump/rrestore) sin más que indicar el nombre de máquina precediendo al dispositivo donde se ha de realizar la copia.

La sintaxis general de la orden dump es
dump opciones argumentos fs
donde `opciones' son las opciones de la copia de seguridad, `argumentos' son los argumentos de dichas opciones, y `fs' es el sistema de ficheros a salvaguardar. Se trata de una sintaxis algo peculiar: mientras que lo habitual en Unix es especificar cada argumento a continuación de la opción adecuada (por ejemplo, `find . -perm 700 -type f' indica un argumento `700' para la opción `perm' y uno `f' para `type'), en la orden dump primero especificamos toda la lista de opciones y a continuación todos sus argumentos; no todas las opciones necesitan un argumento, y además la lista de argumentos tiene que corresponderse exactamente, en orden y número, con las opciones que los necesitan (por ejemplo, si `find' tuviera una sintaxis similar, la orden anterior se habría tecleado como `find . -perm -type 700 f'). AIX y Linux son los únicos Unices donde la sintaxis de dump (recordemos que en el primero se denomina backup) es la habitual.

Las opciones de `dump' más utilizadas son las que se muestran en la tabla 7.2; en las páginas man de cada clon de Unix se suelen incluir recomendaciones sobre parámetros específicos para modelos de cintas determinados, por lo que como siempre es más que recomendable su consulta. Fijándonos en la tabla, podemos ver que la opción `u' actualiza el archivo /etc/dumpdates tras realizar una copia de seguridad con éxito; es conveniente que este archivo exista antes de utilizar dump por primera vez (podemos crearlo con la orden touch), ya que si no existe no se almacenará información sobre las copias de seguridad de cada sistema de ficheros (información necesaria, por ejemplo, para poder realizar backups progresivos). En este archivo dump - la propia orden lo hace, el administrador no necesita modificar el archivo a mano...y no debe hacerlo - registra información de las copias de cada sistema de archivos, su nivel, y la fecha de realización, de forma que su aspecto puede ser similar al siguiente:
anita:~# cat /etc/dumpdates
/dev/dsk/c0d0s6   0 Thu Jun 22 05:34:20 CEST 2000
/dev/dsk/c0d0s7   2 Wed Jun 21 02:53:03 CEST 2000
anita:~#

Tabla 7.2: Opciones de la orden dump
Opción Acción realizada Argumento
0-9 Nivel de la copia de seguridad NO
u Actualiza /etc/dumpdates al finalizar el backup NO
f Indica una cinta diferente de la usada por defecto
b Tamaño de bloque
c Indica que la cinta destino es un cartucho NO
W Ignora todas las opciones excepto el nivel del backup NO


El uso de dump puede ser excesivamente complejo, especialmente en sistemas antiguos donde es incluso necesario especificar la densidad de la cinta en bytes por pulgada o su longitud en pies; no obstante, hoy en día la forma más habitual de invocar a esta orden es `dump [1-9]ucf cinta fs', es decir, una copia de seguridad del sistema de ficheros recibido como argumento, de un determinado nivel y sobre la unidad de cinta especificada. Por ejemplo para realizar una copia de seguridad completa sobre la unidad de cinta /dev/rmt de la partición lógica /dev/dsk/c0d0s7, en Solaris podemos utilizar la orden siguiente (podemos ver que nos muestra mucha información sobre el progreso de nuestra copia de seguridad en cada momento):
anita:~# ufsdump 0cuf /dev/rmt /dev/dsk/c0d0s7
DUMP: Date of this level 0 dump: Thu Jun 22 10:03:28 2000
DUMP: Date of last level 0 dump: the epoch
DUMP: Dumping /dev/dsk/c0d0s7 (/export/home) to /dev/rmt
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 24523 blocks (118796KB)
DUMP: Writing 63 Kilobyte records
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: level 0 dump on Thu Jun 22 10:05:31 CEST 2000
DUMP: 24550 blocks (118927KB) on 1 volume
DUMP: DUMP IS DONE
anita:~#
Para realizar copias remotas, como hemos dicho antes, no tenemos más que anteponer el nombre del sistema donde deseemos realizar el volcado al nombre del dispositivo donde se va a almacenar, separado de éste por el carácter `:'; opcionalmente se puede indicar el nombre de usuario en el sistema remoto, separándolo del nombre de máquina por `@':
anita:~# ufsdump 0cuf toni@luisa:/dev/st0 /dev/dsk/c0d0s7
Si estamos utilizando rdump, hemos de tener definido un nombre de máquina denominado
`dumphost'
en nuestro archivo /etc/hosts, que será el sistema donde se almacene la copia remota. De cualquier forma (usemos dump, ufsdump o rdump), el host remoto ha de considerarnos como una máquina de confianza (a través de /etc/hosts.equiv o .rhosts), con las consideraciones de seguridad que esto implica.

>Cómo restaurar los backups realizados con dump? Para esta tarea se utiliza la utilidad restore (ufsrestore en Solaris), capaz de extraer ficheros individuales, directorios o sistemas de archivos completos. La sintaxis de esta orden es
restore opciones argumentos archivos
donde `opciones' y `argumentos' tienen una forma similar a `dump' (es decir, toda la lista de opciones seguida de toda la lista de argumentos de las mismas, excepto en AIX y Linux, donde la notación es la habitual), y `archivos' evidentemente representa una lista de directorios y ficheros para restaurar. En la tabla 7.3 se muestra un resumen de las opciones más utilizadas.

Tabla 7.3: Opciones de la orden restore
Opción Acción realizada Argumento
r Restaura la cinta completa NO
f Indica el dispositivo o archivo donde está el backup
i Modo interactivo NO
x Extrae los archivos y directorios desde el directorio actual NO
t Imprime los nombres de los archivos de la cinta NO


Por ejemplo, imaginemos que deseamos restaurar varios archivos de un backup guardado en el fichero `backup'; en primer lugar podemos consultar el contenido de la cinta con una orden como la siguiente (en Linux):
luisa:~# restore -t -f backup>contenido
Level 0 dump of /home on luisa:/dev/hda3
Label: none
luisa:~# cat contenido|more
Dump   date: Fri Jun 23 06:01:26 2000
Dumped from: the epoch
         2      .
        11      ./lost+found
     30761      ./lost+found/#30761
     30762      ./lost+found/#30762
     30763      ./lost+found/#30763
     30764      ./lost+found/#30764
     30765      ./lost+found/#30765
     30766      ./lost+found/#30766
     30767      ./lost+found/#30767
      4097      ./ftp
      8193      ./ftp/bin
      8194      ./ftp/bin/compress
      8195      ./ftp/bin/cpio
      8196      ./ftp/bin/gzip
      8197      ./ftp/bin/ls
      8198      ./ftp/bin/sh
      8199      ./ftp/bin/tar
      8200      ./ftp/bin/zcat
     12289      ./ftp/etc
     12290      ./ftp/etc/group
Broken pipe
luisa:~#
Una vez que conocemos el contenido de la copia de seguridad - y por tanto el nombre del archivo o archivos a restaurar - podemos extraer el fichero que nos interese con una orden como
luisa:~# restore -x -f backup ./ftp/bin/tar     
You have not read any tapes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume #: 1
set owner/mode for '.'? [yn] n
luisa:~# ls -l ftp/bin/tar 
---x--x--x   1 root     root       110668 Mar 21  1999 ftp/bin/tar
luisa:~#
Como podemos ver, la extracción se ha realizado a partir del directorio de trabajo actual; si quisiéramos extraer archivos en su ubicación original deberíamos hacerlo desde el directorio adecuado, o, en algunas versiones de restore, especificar dicho directorio en la línea de órdenes.

Una opción muy interesante ofrecida por restore es la posibilidad de trabajar en modo interactivo, mediante la opción `i'; en este modo, al usuario se le ofrece un prompt desde el cual puede, por ejemplo, listar el contenido de una cinta, cambiar de directorio de trabajo o extraer archivos. El siguiente ejemplo (también sobre Linux) ilustra esta opción:
luisa:~# restore -i -f backup
restore > help
Available commands are:
        ls [arg] - list directory
        cd arg - change directory
        pwd - print current directory
        add [arg] - add `arg' to list of files to be extracted
        delete [arg] - delete `arg' from list of files to be extracted
        extract - extract requested files
        setmodes - set modes of requested directories
        quit - immediately exit program
        what - list dump header information
        verbose - toggle verbose flag (useful with ``ls'')
        help or `?' - print this list
If no `arg' is supplied, the current directory is used
restore > ls
.:
ftp/        httpd/      httpsd/     lost+found/ samba/      toni/

restore > add httpd
restore > extract
You have not read any tapes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume #: 1
set owner/mode for '.'? [yn] n
restore > quit
luisa:~#
Como podemos ver, hemos consultado el contenido de la copia de seguridad, añadido el directorio httpd/ a la lista de ficheros a extraer (inicialmente vacia), y extraído dicho directorio a partir del actual. Este uso de restore proporciona una gran comodidad y facilidad de uso, ya que las órdenes en modo interactivo son muy sencillas.
© 2002 Antonio Villalón Huerta