Hace un par de meses me encontré en la situación de tener que migrar de un servidor físico a uno virtual, ademas de una actualización del sistema operativo, ya que pasaba de un «Debian Squeeze» a un «Debian wheezy».
El problema viene cuando quiero mantener todo el sistema de usuarios y archivos, a si como pasar también las bases de datos, usuarios de las bases de datos…etc.
Básicamente hacer un backup completo del sistema, y pasarlo a otro sistema. Y en esta entrada explicare como realice todo el proceso. Hay que tener cuidado y hacerlo en orden, ya que si no se realiza en orden, habrá errores y no funcionara, como me paso a mi…
Backup del sistema antiguo
Lo primero que tenemos que hacer es un Backup del sistema antiguo. Para mi caso particular, necesito llevarme:
- Usuarios
- Configuración de apache
- Configuración de fail2ban
- Configuración de proftpd
- Todo «www»
- El home de root
- Todas las bases de datos
Con esto, yo me he creado un pequeño script que podéis modificar tanto como necesitéis para vuestro sistema.
#!/bin/bash #En este script intentaremos hacer un backup del sistema completo, de manera que lo podamos usar para futuros backup del sistema #Asignamos valores de color para el stdin YELLOW="\033[1;33m" RED="\033[0;31m" ENDCOLOR="\033[0m" echo -e $YELLOW"Iniciando las variables del script"$ENDCOLOR #directorio donde se realizaran los backups directorioBackup="/usr/src" #creamos un array con las carpetas principales del backup declare -a listatoCarptetas carpetaBackup="carpetaBackupSistema" rutaFinal="$directorioBackup/$carpetaBackup" listatoCarptetas[1]="apacheConf" listatoCarptetas[2]="fail2BanConf" listatoCarptetas[3]="proftpdConf" listatoCarptetas[4]="www" listatoCarptetas[5]="usuarios" listatoCarptetas[6]="root" #limite para los usuarios UGIDLIMIT="500" echo -e $YELLOW"Comenzando con el script"$ENDCOLOR echo -e $YELLOW"Creando el Directorio de Carpetas"$ENDCOLOR cd $directorioBackup mkdir $carpetaBackup cd $carpetaBackup for i in "${listatoCarptetas[@]}"; do mkdir $i; done echo -e $YELLOW"Directorio de Carpetas Creado"$ENDCOLOR cd /etc/ echo -e $YELLOW"Haciendo backup de APACHE"$ENDCOLOR tar -zcf apache.tar.gz apache2 mv apache.tar.gz $rutaFinal/${listatoCarptetas[1]}/ echo -e $YELLOW"Terminado backup de APACHE"$ENDCOLOR echo -e $YELLOW"Haciendo backup de FAIL2BAN"$ENDCOLOR tar -zcf fail2ban.tar.gz fail2ban mv fail2ban.tar.gz $rutaFinal/${listatoCarptetas[2]}/ echo -e $YELLOW"Terminado backup de FAIL2BAN"$ENDCOLOR echo -e $YELLOW"Haciendo backup de PROFTPD"$ENDCOLOR tar -zcf proftpd.tar.gz proftpd mv fail2ban.tar.gz $rutaFinal/${listatoCarptetas[3]}/ echo -e $YELLOW"Terminado backup de PROFTPD"$ENDCOLOR echo -e $YELLOW"Haciendo backup de Datos"$ENDCOLOR cd /var/ tar -zcf www.tar.gz www mv fail2ban.tar.gz $rutaFinal/${listatoCarptetas[4]}/ echo -e $YELLOW"Terminado backup de Datos"$ENDCOLOR echo -e $YELLOW"Haciendo backup de Usuarios"$ENDCOLOR awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/passwd > $rutaFinal/${listatoCarptetas[5]}/passwd.mig awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/group > $rutaFinal/${listatoCarptetas[5]}/group.mig awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534) {print $1}' /etc/passwd | tee - |egrep -f - /etc/shadow > $rutaFinal/${listatoCarptetas[5]}/shadow.mig cp /etc/gshadow $rutaFinal/${listatoCarptetas[5]}/gshadow.mig echo -e $YELLOW"Terminado backup de Usuarios"$ENDCOLOR echo -e $YELLOW"Haciendo backup de Root"$ENDCOLOR cd /root/ tar -zcf root.tar.gz .??* mv root.tar.gz $rutaFinal/${listatoCarptetas[6]} echo -e $YELLOW"Terminado backup de Root"$ENDCOLOR echo -e $RED"TERMINADO EL BACKUP"$ENDCOLOR
Como podéis ver, os genera el mismo el directorio de carpetas, para poder importarlo al nuevo sistema. Lo único que aquí no se recoge son las bases de datos, que yo las exporte con phpmyadmin, el cual te soluciona mucho el trabajo.
Tened en cuenta que tenéis que exportar las bases de datos, y las tablas de «db» y «user» de phpmyadmin para los usuarios del las tablas (si usais phpmyadmin).
Aun así, podríais usar este comando para exportar en un solo archivo «sql» todas las bases de datos excepto «information_schema»; mysql; phpmyadmin:
echo 'show databases;' | mysql -uroot | grep -v ^Database$ | grep -v ^information_schema$ | grep -v ^mysql$ | grep -v -F phpmyadmin | xargs mysqldump -uroot --databases > all.sql
Con este script, unicamente te faltan las tablas de phpmyadmin.
Bien, ¡el backup ya esta echo!
Acciones en el nuevo sistema
Ahora ya tenemos todo lo necesario para crear el nuevo sistema, en mi caso una nueva maquina virtual con XEN, por lo que en mi caso ya tiene el «ssh» instalado, pero si no, es una de las primeras cosas que deberias de hacer.
Bien, lo siguiente es instalar el proftpd, para poder copiar vía FTP (y así no tirar de SSH) todos los archivos que tenemos.
Hora de importar, tenemos que hacerlo por partes, en este caso no he realizado ningún script porque la importación prefería hacerla a mano, por si acaso.
En orden, estos serian los pasos a realizar:
- Importar los usuarios del sistema, con los siguientes comandos
cd /url/del/backup/ cat passwd.mig >> /etc/passwd cat group.mig >> /etc/group cat shadow.mig >> /etc/shadow
De esta forma ya tenemos todos los usuarios en el nuevo sistema.
- Ahora tenemos que importar el home y mail de todos los usuarios
cd / tar -zxvf /url/de/backup/home.tar.gz tar -zxvf /url/de/backup/mail.tar.gz
Con esto ya tenemos el mail y home de los usuarios.
Ahora deberíamos de hacer un «reboot» para que el sistema gestione los cambios y podamos hacer uso de esos usuarios en el sistema.
Seguimos con las importaciones:
- Ahora toca instalar todos los programas que teníamos en el sistema anterior, podemos tener una lista o sacarla con el comando
dpkg --get-selections > misprogramas.txt
- Ya es hora de importar todos los datos (www) y configuraciones del sistema, nos basta con descomprimir los «tar.gz» que hemos creado con el script en las rutas de casa programa.
- Ahora es momento de importar las bases de datos, podemos usar ese «all.sql» que hemos creado anteriormente y realizar un
mysql -uroot -p < all.sql
Y con esto solo nos quedaría importar las tablas de phpmyadmin «db» y «user» para tener todo el sistema MySQL montado.
- Recordad que si teníais algún modulo de Apache funcionando, tendréis que volver a activarlo.
Y en principio con esto, ya tenéis el nuevo sistema en la maquina virtual.
Espero que sirva para aprender una cosa nueva y sobre todo para que tengáis un Backup de vuestro sistema al completo.