Clonar un sistema usando dpkg --get-selections y dpkg --set-selections | Algo de Linux

martes, 23 de febrero de 2010

Clonar un sistema usando dpkg --get-selections y dpkg --set-selections

Algunas veces me han preguntado cómo hacemos copia de seguridad de los servidores y  por qué no hacemos una imagen en cd o en disco duro de los mismos para poder recuperar un sistema ante un fallo.

La respuesta es sencilla: Los servidores no son estáticos y sus paquetes cambian y se actualizan frecuentemente. Además los datos que éstos almacenan también se modifican con cierta frecuencia.

Así que, si quisiéramos tener imágenes actualizadas, tendríamos que estar haciéndolas continuamente o con demasiada frecuencia.

Entonces, ¿de qué hacemos copia de seguridad? Pues básicamente de los archivos de configuración así como de los datos de nuestros usuarios, si el servidor trabaja con usuarios.  Por ejemplo, si mi servidor es un servidor de ldap, me interesará tener copia de seguridad de la base de datos de ldap. Si mi servidor es un servidor nfs que almacena el home de los usuarios, me interesará guardar copias de seguridad de los archivos de configuración del servidor nfs, así como los datos de los usuarios. Etc...

Para volver a montar mi sistema tras un desastre, puedo instalar un sistema mínimo usando netinst o, puede serme útil tener una iso con el sistema base, al que luego incorporaré los paquetes necesarios, así como los archivos de configuración y datos de los que guardo copia de seguridad. La secuencia sería más o menos así:
  1. Instalo un sistema mínimo.
  2. Actualizo dicho sistema con los paquetes que debería tener.
  3. Y restauro las copias de seguridad.
Lo que necesito, evidentemente, es que mi sistema de copias de seguridad guarde copia de la lista de paquetes que tiene mi sistema en el momento que se haga la copia de seguridad.  Bien, ¿y cómo puedo hacer ésto? Pues ayudándonos del comando dpkg:

Por ejemplo, si quiero obtener una lista de paquetes instalados y desinstalados en mi máquina, utilizo el siguiente comando:

# dpkg --get-selections

Ahora bien, si quiero obtener tan sólo la lista de paquetes instalados, aplicaré un filtro al comando:


# dpkg --get-selections | grep -v deinstall



Con ésto he obtenido la lista de paquetes en pantalla. Como lo que me interesa es tenerla en un archivo, redirijo la salida estándar:

# dpkg --get-selections | grep -v deinstall > listapaquetesinstalados.txt


Si ésto lo colocamos en un script que se ejecute periódicamente, podemos tener siempre a mano la lista de paquetes  que tiene nuestro sistema para poder recuperarlo en caso de fallo.

Si tuviera que recuperar mi sistema tras un fallo, como ya hemos dicho, primero instalaría una máquina con un sistema mínimo. Y después le añadiría los paquetes que debe tener.  ¿Cómo? Usando la lista de paquetes que tenía mi sistema antes del fallo: listapaquetesinstalados.txt

Incorporando la lista de paquetes al nuevo sistema:

# dpkg --set-selections < listapaquetesinstalados.txt

E instalando los paquetes de la lista:

# apt-get dselect-upgrade

3 comentarios:

JuanPsy dijo...

como lo hago desde un livecd? para extraer la lista de una particion de ubuntu, en ese caso la sda2.

Esteban M. Navas dijo...

Monta la partición en un directorio de tu livecd, por ejemplo /mnt, y haz un chroot.

Juan Jose Pablos dijo...

Para que te funcione en versiones mas actuales necesitas ejecutar "dselect update" antes del apt-get dselect upgrade