# Servidor de respaldo, ¿como?

## nandelbosc

Buenas tardes,

Por un lado tengo un servidor (de nombre 'vito') en producción que tiene varios servicios: apache, bind, postfix, NFS, IPTables, ...

Y por otro un PC acabado de estrenar (escribo desde éste) con dos discos: 1x100GB con el gentoo como escritoria y otro de 160GB vacio.

Mi intención seria replicar el servidor (vito) al disco de 160GB y en caso de emergencia reiniciar el PC nuevo y arrancar desde este disco y tener todos los servicios corriendo igual que lo tenia en 'vito' 10 minutos antes, casi nada!  :Wink: 

Cual creeis que es la mejor manera de hacer este trabajo? Este fin de semana me gustaria hacer-lo.

Aquí os dejo información sobre 'vito'...

```
vito / # cat /etc/fstab

# <fs>                  <mountpoint>    <type>          <opts>          <dump/pass>

# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.

/dev/sda1               /boot           ext2            noauto,noatime                          1 2

/dev/sda3               /               ext3            noatime                                 0 1

/dev/sda2               none            swap            sw                                      0 0

/dev/sda5               /tmp            ext3            noatime                                 0 1

/dev/sda6               /var            ext3            noatime                                 0 1

# sda3 notail

# sda5 noexec,notail,nodev,nosuid

# sda6 notail,nodev

proc                    /proc           proc            defaults                                0 0

shm                     /dev/shm        tmpfs           nodev,nosuid,noexec                     0 0

/dev/hda1               /mnt/disk2      reiserfs        noatime                                 0 0

/dev/hdc1               /mnt/disk1      reiserfs        noatime                                 0 0

```

```
vito / # mount

/dev/sda3 on / type ext3 (rw,noatime)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

udev on /dev type tmpfs (rw,nosuid)

devpts on /dev/pts type devpts (rw)

/dev/sda5 on /tmp type ext3 (rw,noatime)

/dev/sda6 on /var type ext3 (rw,noatime)

shm on /dev/shm type tmpfs (rw,noexec,nosuid,nodev)

/dev/hda1 on /mnt/disk2 type reiserfs (rw,noatime)

/dev/hdc1 on /mnt/disk1 type reiserfs (rw,noatime)

usbfs on /proc/bus/usb type usbfs (rw,devmode=0664,devgid=85)

nfsd on /proc/fs/nfsd type nfsd (rw)

rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
```

```
vito / # df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3              14G  4.6G  8.5G  35% /

udev                 1008M  192K 1008M   1% /dev

/dev/sda5             1.9G   33M  1.8G   2% /tmp

/dev/sda6             168G   87G   73G  55% /var

shm                  1008M     0 1008M   0% /dev/shm

/dev/hda1             187G  180G  7.2G  97% /mnt/disk2

/dev/hdc1             187G   69G  118G  37% /mnt/disk1
```

como veis hay varios discos, el disco hda1 y hdc1 no es necessario respaldar-los.

```
vito / # free -m

             total       used       free     shared    buffers     cached

Mem:          2015       1821        193          0        352        117

-/+ buffers/cache:       1351        663

Swap:          494          0        493
```

```
vito / # ifconfig

eth0      Link encap:Ethernet  HWaddr 00:15:F2:3C:89:9D

          inet addr:192.168.x+1.x  Bcast:192.168.x+1.255  Mask:255.255.255.0

          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:182516740 errors:0 dropped:0 overruns:0 frame:0

          TX packets:484396848 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:101948221430 (97225.4 Mb)  TX bytes:562289694900 (536241.2 Mb)

          Interrupt:23

eth1      Link encap:Ethernet  HWaddr 00:15:F2:3C:96:5B

          inet addr:192.168.x.x  Bcast:192.168.x.255  Mask:255.255.255.0

          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:20464139 errors:0 dropped:0 overruns:0 frame:0

          TX packets:26626014 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:3294688388 (3142.0 Mb)  TX bytes:36676530307 (34977.4 Mb)

          Interrupt:17

lo        Link encap:Local Loopback

          inet addr:127.0.0.1  Mask:255.0.0.0

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:2821114 errors:0 dropped:0 overruns:0 frame:0

          TX packets:2821114 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:448082673 (427.3 Mb)  TX bytes:448082673 (427.3 Mb)
```

perdonad, pero prefiero no mostrar las ips...  :Wink: 

tengo un script el cual hace un backup cada semana...

```
vito / # cat /etc/cron.weekly/backups

#!/bin/bash

#                        ------------------

#                       |       WEBS       |

#                        ------------------

/bin/mv /mnt/disk1/backups/vito/web.jordivayreda.com.tgz /mnt/disk1/backups/vito/web.jordivayreda.com.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/web.jordivayreda.com.tgz /var/www/jordivayreda.com/

/bin/mv /mnt/disk1/backups/vito/web.elsxukurs.org.tgz /mnt/disk1/backups/vito/web.elsxukurs.org.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/web.elsxukurs.org.tgz /var/www/elsxukurs.org/

/bin/mv /mnt/disk1/backups/vito/web.arcadiallibres.com.tgz /mnt/disk1/backups/vito/web.arcadiallibres.com.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/web.arcadiallibres.com.tgz /var/www/arcadiallibres.com/

/bin/mv /mnt/disk1/backups/vito/web.elsboixos.com.tgz /mnt/disk1/backups/vito/web.elsboixos.com.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/web.elsboixos.com.tgz /var/www/elsboixos.com/

/bin/mv /mnt/disk1/backups/vito/web.rosa.elsxukurs.org.tgz /mnt/disk1/backups/vito/web.rosa.elsxukurs.org.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/web.rosa.elsxukurs.org.tgz /var/www/rosa.elsxukurs.org/

/bin/mv /mnt/disk1/backups/vito/web.nandelbosc.elsxukurs.org.tgz /mnt/disk1/backups/vito/web.nandelbosc.elsxukurs.org.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/web.nandelbosc.elsxukurs.org.tgz /var/www/nandelbosc.elsxukurs.org/

/bin/mv /mnt/disk1/backups/vito/web.fmacias.com.tgz /mnt/disk1/backups/vito/web.fmacias.com.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/web.fmacias.com.tgz /var/www/fmacias.com/

/bin/mv /mnt/disk1/backups/vito/web.jvgrafictteam.com.tgz /mnt/disk1/backups/vito/web.jvgrafictteam.com.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/web.jvgrafictteam.com.tgz /var/www/jvgrafictteam.com/

/bin/mv /mnt/disk1/backups/vito/web.tallerverdolot.org.tgz /mnt/disk1/backups/vito/web.tallerverdolot.org.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/web.tallerverdolot.org.tgz /var/www/tallerverdolot.org/

/bin/tar cpsvzf /mnt/disk1/backups/vito/web.varis.tgz --exclude=/var/www/jordivayreda.com --exclude=/var/www/arcadiallibres.com --exclude=/var/www/elsboixos.com --exclude=/var/www/rosa.elsxukurs.org --exclude=/var/www/fmacias.com --exclude=/var/www/jvgrafictteam.com --exclude=/var/www/tallerverdolot.org --exclude=/var/www/elsxukurs.org --exclude=/var/www/nandelbosc.elsxukurs.org /var/www/

#                         ------------------

#                        |     CONFIGS      |

#                         ------------------

/bin/mv /mnt/disk1/backups/vito/etc.tgz /mnt/disk1/backups/vito/etc.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/etc.tgz /etc/

mount /boot

/bin/mv /mnt/disk1/backups/vito/boot.tgz /mnt/disk1/backups/vito/boot.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/boot.tgz /boot/

umount /boot

/bin/mv /mnt/disk1/backups/vito/usr-src-linux.tgz /mnt/disk1/backups/vito/usr-src-linux.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/usr-src-linux.tgz /usr/src/

#                         ------------------

#                        |       USERS      |

#                         ------------------

/bin/mv /mnt/disk1/backups/vito/root.tgz /mnt/disk1/backups/vito/root.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/root.tgz /root/

/bin/mv /mnt/disk1/backups/vito/homes.tgz /mnt/disk1/backups/vito/homes.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/homes.tgz /home/

#                         ------------------

#                        |       BBDD       |

#                         ------------------

/bin/mv /mnt/disk1/backups/vito/var-lib-mysql.tgz /mnt/disk1/backups/vito/var-lib-mysql.1.tgz

/bin/tar cpsvzf /mnt/disk1/backups/vito/var-lib-mysql.tgz /var/lib/mysql/

/usr/bin/mysqldump -uroot -password='0273' -hlocalhost -all-databases -opt -allow-keywords -flush-logs -hex-blob -master-data -max_allowed_packet=16M -quote-names -result-file=/mnt/disk1/backups/vito/dump_backup.sql

#                         ------------------

#                        |      SISTEMA     |

#                         ------------------

ROOT_FS="/"

ARXIU="/mnt/disk1/backups/vito/backup-FULL.tar.gz"

ARXIU2="/mnt/disk1/backups/vito/backup-FULL.1.tar.gz"

mv $ARXIU $ARXIU2

cd $ROOT_FS

tar cszpvf $ARXIU --exclude=sys --exclude=var/music --exclude=var/imatges --exclude=dev --exclude=boot --exclude=lost+found --exclude=mnt --exclude=proc --exclude=root --exclude=tmp --exclude=home --exclude=var/tmp --exclude=var/www --exclude=usr/portage/distfiles ./

#                         ------------------

#                        |       VARIS      |

#                         ------------------

mv /mnt/disk1/backups/vito/df.txt /mnt/disk1/backups/vito/df.1.txt

df>/mnt/disk1/backups/vito/df.txt -h

mv /mnt/disk1/backups/vito/free.txt /mnt/disk1/backups/vito/free.1.txt

free>/mnt/disk1/backups/vito/free.txt -m

mv /mnt/disk1/backups/vito/mount.txt /mnt/disk1/backups/vito/mount.1.txt

mount>/mnt/disk1/backups/vito/mount.txt

mv /mnt/disk1/backups/vito/backups /mnt/disk1/backups/vito/backups.1

cp /etc/cron.weekly/backups /mnt/disk1/backups/vito/backups

mv /mnt/disk1/backups/vito/fstab /mnt/disk1/backups/vito/fstab.1

cp /etc/fstab /mnt/disk1/backups/vito/fstab

mv /mnt/disk1/backups/vito/llistat.disc.txt /mnt/disk1/backups/vito/llistat.disc.txt.1

fdisk>/mnt/disk1/backups/vito/llistat.disc.txt -l

#                         ------------------

#                        |     PERMISOS     |

#                         ------------------

chmod -R 700 /mnt/disk1/backups/vito

```

seguramente tanta información no es necessaria, pero...  :Wink: 

¿Me valen los backups que tengo?

¿Los hariais de otra manera?

¿Cuando lo tenga funcionando (si no muero este fin de semana en el intento), como podria replicar los canvios de 'vito'?

PD: se aceptan alternativas, tengo 2 dias para hacer cambios.

----------

## Inodoro_Pereyra

Algo como Heartbeat me parece que sería lo ideal: http://gentoo-wiki.com/HOWTO_Heartbeat_and_DRBD

Salud!

----------

## nandelbosc

Gracias!

Me lo he leido por encima, pero no lo acabo de ver claro, ¿lo probado has inodoro? Me puedes contar algo mas, a nivel personal de como entiendes su funcionamiento?

----------

## Inodoro_Pereyra

No, no lo he probado nunca pero había estado leyendo al respecto hace un tiempo por lo interesante del concepto, se trata de un servicio replicándose por la red sobre otro servidor de respaldo del mismo servicio, ambos se monitorean mutuamente y de ahí debe venir el nombre de heart-beat, si un servicio se cae por motivo X automáticamente el servidor de réplica se pone al pié del cañón reemplazando al original.

Lo automatizado del sistema, y lo inmediato e impercetptible al cliente me hizo pensar automáticamente en este sistema cuando vi tu mensaje.

Salud!

----------

## nandelbosc

La idea es realmente buena, pero mi capacidad no tanto...  :Wink: 

Al final lo he hecho "a mi manera", y ha funcionado!

Hice un backup del servidor entero...

```
# tar cpsvzf /mnt/disk1/backups/vito_all/tot_petit.tgz / --exclude=/dev --exclude=/mnt --exclude=/proc --exclude=/sys --exclude=/tmp --exclude=/root
```

(Unos 17GB comprimido)

Lo restauré al disco nuevo...

```
# tar xpsvzf vito/disk1/backups/vito_all/tot_petit.tgz /mnt/sdb3 
```

Ahora desde un live cd

creo el directorio /sys

monto proc y dev...

```
# mount -t proc none /mnt/sdb3/proc

# mount -o bind /dev /mnt/sdb3/dev

```

chroot...

```
# chroot /mnt/gentoo /bin/bash

# env-update

# source /etc/profile
```

recompilo kernel para el nuevo hard, configuro grub, reinicio y a andar!

Para que los cambios se repliquen del servidor a mi workstation (con el disco montado per sin usar nada mas que para lo que sigue) uso la herramienta rddtool, con la que excluyo algunos directorios (relacionados con el kernel y los modulos principalmente).

Ahora, si peta el servidor principal, reinicio mi estación de trabajo, arranco desde el el segundo disco y todos contentos...

Como lo veis? Estoy loco?   :Shocked: 

----------

## Inodoro_Pereyra

Bueno, si el resultado final es el mismo y no necesitabas tanta redundancia, por que habrías de estar loco? jeje.

Una lástima, me hubiese gustado saber como te iba con heart beat...

Salud!

----------

## jgascon

Hombre, si lo vas a hacer a lo "bruto" (me refiero a que seguro que hay por ahí algún software que haga lo mismo de forma mas "limpia") te dejo un script que llevo usando ya un tiempecillo para hacer backup de mi sistema de escritorio a un disco USB. En vez de hacer la copia local como yo puedes hacer la copia remota compartiendo las claves ssh para automatizar el proceso como dice aquí -> http://troy.jdmz.net/rsync/index.html

```

BACKUPDIR=/mnt/backup/backup

DIRS="/bin /boot /dev /emul /etc /home /lib32 /lib64 /opt /root /sbin /usr /var"

function rotate_backups() {

  mv $BACKUPDIR.2 $BACKUPDIR.3

  mv $BACKUPDIR.1 $BACKUPDIR.2

  mv $BACKUPDIR.0 $BACKUPDIR.1

  rm -fr $BACKUPDIR.3

}

# Montar el disco de backup

mount /mnt/backup

# Desmontar particiones no necesarias

#umount /usr/portage/distfiles

#umount /usr/portage

#umount /usr/src

# Montar boot

mount /boot

cd /

rotate_backups

time rsync -az --link-dest=$BACKUPDIR.1 $DIRS $BACKUPDIR.0

umount /boot

umount /mnt/backup

# Montar el resto

#mount /usr/portage

#mount /usr/portage/distfiles

#mount /usr/src

# Die Gracefully

exit 0

```

La gracia de este script es que es "incremental-total". Es incremental por que al usar rsync con --link-dest sólo copia los cambios desde el último backup y es total por que al ser enlaces simbólicos la última copia siempre es un backup total.

Yo he restaurado varias veces desde un backup hecho con este script y funciona. Lo único es que al restaurar tienes que crear los directorios /sys /tmp /mnt y /media además de hacerle un chmod 1777 a /tmp y /var/tmp y crear el link de lib a lib64. Y creo que nada más... Bueno, por supuesto, lo que comentas de compilar kernel y módulos pero si ya te lo dejas preparado sólo lo tendrás que hacer una vez.

Tendrás que retocar un pelo el script para adaptarlo a tus necesidades, por ejemplo si no es una máquina de 64 bits no tendrás lib64  :Wink: 

Esto lo metes para ejecutarlo por la noche en un cron y asunto zanjado...

----------

