Páginas

martes, 8 de octubre de 2013

Copia de seguridad local remota rsync

rsync es una poderosa utilidad que facilita la transferencia y sincronización de datos entre sistemas locales y remotos. En primer lugar desde la red local a un servidor FreeBSD y en segundo lugar de manera local y remota hacia un servidor Synology.

Conguración de rsync en el servidor FreeBSD:

Entramos al servidor desde la LAN via SSH:
$ ssh -l carlos -p 20243 192.168.3.1
password:
$ su
password:
# ee /usr/local/etc/rsyncd.conf

# Edit this file before running rsync daemon!!


Crear el usuario que será utlizado para realizar las copias de seguridad, y que sólo tendrá permisos de lectura sobre los datos a copiar:

# chmod 640 /usr/local/etc/rsyncd.conf
# pw useradd -n backup -G operator -m -h 0
# mkdir /backup
# chown backup:backup /backup

Falta crear el archivo rsyncd.secrets
# ee /usr/local/etc/rsyncd.secrets
backup:km+RBqGwpT2IMnF1

Guardar y salir

# rsync --daemon
# ps auwx |grep rsync
root   9087   0.0  0.1  12056  1984 ??  Is    8:05PM    0:00.00 /usr/local/bin/rsync --daemon

Solo root podrá leerlo:
# chmod 600 /usr/local/etc/rsyncd.secrets

Comprobar que puedo conectarme al demonio:


El cliente debe tener instalado rsync

--dry-run para visualizar qué se va a copiar antes crear la copia.
--dry-run realizar una prueba sin hacer cambios
--stats dar algunas estadísticas de transferencia de archivos
-z comprimir los datos del archivo durante la transferencia

La opción -a, ejecuta "-rlptgoD":

-r: recursivo
-l: copia los links simbólicos, como eso, links simbólicos
-p: conserva los permisos
-t: conserva los tiempos de modificación
-g: conserva el grupo
-o: conserva el propietario
-D: conserva los ficheros de dispositivo (–devices) así como los ficheros especiales (–specials)

$ rsync -avz --dry-run --stats -e 'ssh -p 20243' /home/carles backup@192.168.3.1:backup

$ rsync -avz --stats -e 'ssh -p 20243' /home/carles backup@192.168.3.1:backup

$ rsync -avz --stats -e 'ssh -p 20243' /mnt/freebdades backup@192.168.3.1:backup

Vamos a crear dos directorios llamados /tmp/source /tmp/destiny, generar archivos ficticios dentro del primero y crear un enlace directo.

mkdir /tmp/source /tmp/destiny
for i in `seq 1 50`; do touch /tmp/foo/file$i; done
ln -s /home/carles/rules_pfsense /tmp/source



El siguiente comando trasfiere archivos en modo "archive", lo que garantiza que los enlaces simbólicos, dispositivos, atributos, permisos, propiedad, etc. son conservados en la transferencia. Debido a que estos indicadores se utilizan con tanta frecuencia, la opción -a eqivalente a -rltpgoD actúa como un alias que los incluye a todos:

# rsync -av --stats /tmp/source/ /tmp/destiny

Hay una diferencia entre incluir una barra inclinada (/) al final de la ruta de origen, y su omisión, el primero trasladará todos los archivos dentro del directorio especificado, mientras que el segundo transferirá el propio directorio con todos los archivos dentro. El flag -v (feedback, verbose) para ver el estado de la transferencia incluido un resumen al final. --stats nos dará más datos estadísticos y -q (silencioso, quiet) suprime toda la salida; útil para los scripts cuando no se requiere retroalimentación.


Transferencia remota rscync

La sintaxis de rsync es similar a la de scp en transferencias remotas donde h = human-readable.

Otras opciones interesantes:

--exclude-from

Excluye archivos de la lista de un archivo, en líneas separadas

--exclude=".*/"

Excluye los archivos ocultos

--update

Actualiza los archivos en el destino sólo si la copia origen ha sido modificada.

Synology debe tener activado rsync, copia de seguridad remota y los puertos abiertos tanto en el router VDSL o ADSL como en el firewall que está antes de la red interna (LAN), así como un dominio DDNS configurado (si carece de una ip estática). Esto ya lo he explicado en entradas anteriores. Synology ofrece 1 dominio DDNS por equipo y para el servidor FreeBSD utilizo dnsdynamic.org:

No conectamos desde otra red para realizar la prueba. El puerto por defecto de SSH (22) no hace falta indicarlo, si es diferente sí.:

Transferir clave SSH

susi@linux-a95o:~> ssh -p 22 admin@naslinuxesgenial.synology.me

The authenticity of host 'naslinuxesgenial.synoogy.me (95.23.148.14)' can't be established.

ECDSA key fingerprint is ea:10:a6:80:97:46:63:20:45:63:3a:28:77:90:cd:19.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'naslinuxesgenial.synology.me,95.23.148.14' (ECDSA) to the list of known hosts.

admin@naslinuxesgenial.synology.me's password:

BusyBox v1.16.1 (2013-04-16 20:15:54 CST) built-in shell (ash)

Enter 'help' for a list of built-in commands.


ds112plus> exit

susi@linux-a95o:~> mkdir /tmp/source /tmp/destiny susi@linux-a95o:~> for i in `seq 1 100`;do touch /tmp/source/file$i;done susi@linux-a95o:~> rsync -av /tmp/source/ /tmp/destiny susi@linux-a95o:~> ln -s /home/susi/Documentos/wlan_13
Enviar datos al servidor remoto synology

susi@linux-a95o:~> rsync -avz --stats /tmp/destiny/ \
admin@naslinuxesgenial.synology.me:/volume1/freebsd_all/source/

admin@naslinuxesgenial.synology.me's password:

sending incremental file list

.
source/

source/file1
source/file10
.
.
source/file95
source/file96
source/file97
source/file98
source/file99
source/wlan_13 -> /home/susi/Documentos/wlan_13

Number of files: 103
Number of files transferred: 100
Total file size: 29 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 837
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 4460
Total bytes received: 1922
sent 4460 bytes  received 1922 bytes  750.82 bytes/sec
total size is 29  speedup is 0.00

susi@linux-a95o:~> rsync -avhz -e 'ssh -p 22' --stats /tmp/destiny/ admin@naslinuxesgenial.synology.me:/volume1/freebsd_all/source/

admin@naslinuxesgenial.synology.me's password:

sending incremental file list
Number of files: 103
Number of files transferred: 0
Total file size: 29 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes

File list size: 837
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 851
Total bytes received: 13

sent 851 bytes  received 13 bytes  101.65 bytes/sec
total size is 29  speedup is 0.03

susi@linux-a95o:~>

Desde un servidor remoto a local

susi@linux-a95o:~> rsync -azv admin@naslinuxesgenial.synology.me:/volume1/freebsd_all/source/ /tmp/destiny/

Si el servidor es FreeBSD el archivo /etc/rc.d/sshd_config debe incluir implicitamente al usuario backup, de lo contrario no será posible proseguir con la copia:

AllowUsers carles@192.168.3.60 backup@192.168.3.60

Desde el cliente con IP 192.168.3.60 (freebsd) y usuario backup (creado con anterioridad) ejecutamos rsync:
$ rsync -avz --stats /home/carles/datancp/* backup@freebsdsvr.linux.bcn:/backup/



Automatizar proceso mediante un script:

#############################
#!/bin/sh

# Simple rsync "driver" script.  (Uses SSH as the transport layer.)
# http://www.scrounge.org/linux/rsync.html

# Modificado y traducido al español por Crowley (http://www.mexicoextremo.com.mx)
# Debe poder trabajar con Linux y otros Unix, incluyendo Mac OS

# Sincroniza dos carpetas con sólo ejecutarlo. Sólo necesita cambiar los
# parámetros para tenerlo funcionando

# Nombre o IP de la máquina de destino
DEST="respaldos.servidor.com"

# Usuario que se conectará al servidor
# Puede ser root, pero no se recomienda
USER="root"

# Directorio de origen
BACKDIR="/carpeta/del/usuario/"

# Directorio de destino (remoto)
DESTDIR="/carpeta/de/destino/"

# Archivo de exclusiones. Contiene comodines de los archivos a excluir
# por ejemplo, *~, *.bak, etc.  Una especificación por línea.
# Se debe crear este archivo y descomentar la línea. Opcional
# EXCLUDES=/root/bin/excludes

# Opciones de prueba.  Despliega las acciones, pero no las realiza.
# OPTS="-n -vv -u -a --rsh=ssh --exclude-from=$EXCLUDES --stats --progress"
# Realiza la copia, mostrando a detalle lo que hace.
OPTS="-v -u -a --rsh=ssh --exclude-from=$EXCLUDES --stats"
# Realiza la copia, pero no manda ningún mensaje.
#OPTS="--archive --update --rsh=ssh --exclude-from=$EXCLUDES --quiet"

# Variables de ambiente, en caso de necesitarlas cron
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

# Se ejecuta sólo si el $DEST responde.
VAR=`ping -s 1 -c 1 $DEST > /dev/null; echo $?`
if [ $VAR -eq 0 ]; then

    rsync $OPTS $BACKDIR $USER@$DEST:$DESTDIR
else
    echo "No puedo conectarme a $DEST."
fi
#############################
http://www.horus.es/ss/blog/copias-de-seguridad-con-rsync/
https://rsync.samba.org/ftp/rsync/rsyncd.conf.html
http://kb.liquidweb.com/
http://www.freebsddiary.org/rsync.


Unix es genial!.