rdiff-backup és un script escrit en Python que permet fer una copia de seguretat de un directori.
TODO:
The target directory ends up a copy (mirror) of the source directory, but extra reverse diffs are stored in a special subdirectory of that target directory, so you can still recover files lost some time ago. The idea is to combine the best features of a mirror and an incremental backup. rdiff-backup also preserves symlinks, special files, hardlinks, permissions, uid/gid ownership, and modifica‐
tion times.
rdiff-backup can also operate in a bandwidth efficient manner over a pipe, like rsync(1). Thus you can use ssh and rdiff-backup to securely back a hard drive up to a remote location, and only the differences will be transmitted. Using the default settings, rdiff-backup requires that the remote system accept ssh connections, and that rdiff-backup is installed in the user's PATH on the remote system. For information on other options, see the section on REMOTE OPERATION.
Note that you should not write to the mirror directory except with rdiff-backup. Many of the increments are stored as reverse diffs, so if you delete or modify a file, you may lose the ability to restore previous versions of that file.
Finally, this man page is intended more as a precise description of the behavior and syntax of rdiff-backup. New users may want to check out the examples.html file included in the rdiff-backup distribution.
Evidentment és pot instal·lar amb apt-get. El problema és que cada distribució Linux té una versió diferent i això pot ser un problema al fer les copies de seguretat entre dos màquines amb diferents versions.
$ sudo apt-get install rdiff-backup
La versió instal·lada a una Ubuntu Server 10.10 Maverick
$ dpkg -l | grep backup ii rdiff-backup 1.2.8-5ubuntu2 remote incremental backup
$ dpkg -L rdiff-backup /. /usr /usr/lib /usr/lib/pyshared /usr/lib/pyshared/python2.6 /usr/lib/pyshared/python2.6/rdiff_backup /usr/lib/pyshared/python2.6/rdiff_backup/C.so /usr/lib/pyshared/python2.6/rdiff_backup/_librsync.so /usr/bin /usr/bin/rdiff-backup /usr/bin/rdiff-backup-statistics /usr/share /usr/share/man /usr/share/man/man1 /usr/share/man/man1/rdiff-backup.1.gz /usr/share/man/man1/rdiff-backup-statistics.1.gz /usr/share/doc /usr/share/doc/rdiff-backup /usr/share/doc/rdiff-backup/FAQ.html /usr/share/doc/rdiff-backup/README /usr/share/doc/rdiff-backup/examples.html /usr/share/doc/rdiff-backup/README.Debian /usr/share/doc/rdiff-backup/copyright /usr/share/doc/rdiff-backup/changelog.gz /usr/share/doc/rdiff-backup/changelog.Debian.gz /usr/share/pyshared /usr/share/pyshared/rdiff_backup /usr/share/pyshared/rdiff_backup/Hardlink.py /usr/share/pyshared/rdiff_backup/lazy.py /usr/share/pyshared/rdiff_backup/manage.py /usr/share/pyshared/rdiff_backup/hash.py /usr/share/pyshared/rdiff_backup/FilenameMapping.py /usr/share/pyshared/rdiff_backup/fs_abilities.py /usr/share/pyshared/rdiff_backup/rorpiter.py /usr/share/pyshared/rdiff_backup/eas_acls.py /usr/share/pyshared/rdiff_backup/win_acls.py /usr/share/pyshared/rdiff_backup/robust.py /usr/share/pyshared/rdiff_backup/TempFile.py /usr/share/pyshared/rdiff_backup/metadata.py /usr/share/pyshared/rdiff_backup/user_group.py /usr/share/pyshared/rdiff_backup/librsync.py /usr/share/pyshared/rdiff_backup/longname.py /usr/share/pyshared/rdiff_backup/Rdiff.py /usr/share/pyshared/rdiff_backup/iterfile.py /usr/share/pyshared/rdiff_backup/selection.py /usr/share/pyshared/rdiff_backup/connection.py /usr/share/pyshared/rdiff_backup/SetConnections.py /usr/share/pyshared/rdiff_backup/Main.py /usr/share/pyshared/rdiff_backup/regress.py /usr/share/pyshared/rdiff_backup/backup.py /usr/share/pyshared/rdiff_backup/Time.py /usr/share/pyshared/rdiff_backup/restore.py /usr/share/pyshared/rdiff_backup/increment.py /usr/share/pyshared/rdiff_backup/static.py /usr/share/pyshared/rdiff_backup/rpath.py /usr/share/pyshared/rdiff_backup/Security.py /usr/share/pyshared/rdiff_backup/Globals.py /usr/share/pyshared/rdiff_backup/compare.py /usr/share/pyshared/rdiff_backup/statistics.py /usr/share/pyshared/rdiff_backup/log.py /usr/share/pyshared/rdiff_backup-1.2.8.egg-info /usr/share/python-support /usr/share/python-support/rdiff-backup.public /etc /etc/bash_completion.d /etc/bash_completion.d/rdiff-backup
En el cas d'SkoleLinux rdiff-backup ja esta instal·lat i de fet és una dependència dels paquets slbackup i webmin-slbackup.
Els passos per instal·lar rdiff-backup a mà són (poso com exemples els passos seguits per instal·lar rdiff-backup a l'etic):
1) Descarregar la versió que desitgem de la web de rdiff-backup. Anem a la web i amb firefox copiem l'adreça del fitxer que ens volem descarregar. Executem:
$cd $mkdir rdiff-backup $cd rdiff-backup $wget http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-1.1.5.tar.gz --12:45:10-- http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-1.1.5.tar.gz => `rdiff-backup-1.1.5.tar.gz' Resolving savannah.nongnu.org... 199.232.41.4 Connecting to savannah.nongnu.org[199.232.41.4]:80... connected. HTTP request sent, awaiting response... 302 Found Location: http://download.savannah.gnu.org/releases/rdiff-backup/rdiff-backup-1.1.5.tar.gz [following] --12:45:11-- http://download.savannah.gnu.org/releases/rdiff-backup/rdiff-backup-1.1.5.tar.gz => `rdiff-backup-1.1.5.tar.gz' Resolving download.savannah.gnu.org... 199.232.41.75 Connecting to download.savannah.gnu.org[199.232.41.75]:80... connected. HTTP request sent, awaiting response... 200 OK Length: 170,477 [application/x-tar] 100%[=================================================================================================================>] 170,477 36.73K/s ETA 00:00 12:45:16 (36.66 KB/s) - `rdiff-backup-1.1.5.tar.gz' saved [170477/170477] $ tar xvzf rdiff-backup-1.1.5.tar.gz tar xvzf rdiff-backup-1.1.5.tar.gz rdiff-backup-1.1.5/ rdiff-backup-1.1.5/rdiff-backup-statistics rdiff-backup-1.1.5/examples.html ...... $ cd rdiff-backup-1.1.5 $ sudo cat README
al fitxer README ens explica que per instal·lar executem:
$python setup.py install
Si tenim totes les dependències s'instalara correctament. Sino segurament ens caldra instal·lar els fitxers de desenvolupament de python i librsync. A debian:
$sudo apt-get install python2.4-dev librsync-dev
Ja esta instal·lat. La carpeta que em descomprimit es pot esborrar.
$ rdiff-backup -V rdiff-backup 1.2.8
$ sudo rdiff-backup --print-statistics --no-compression [email protected]::/skole/tjener/home0/sergi.tur carpeta_on_allotjar_la_copia
Més exemples a http://www.nongnu.org/rdiff-backup/examples.html
Un exemple extret de ninjabackup
$ /usr/bin/rdiff-backup --print-statistics --exclude '/home/*/.gnupg' --exclude '/home/*/.local/share/Trash' --exclude '/home/*/.Trash' --exclude '/home/*/.thumbnails' --exclude '/home/*/.beagle' --exclude '/home/*/.aMule' --exclude '/home/*/gtk-gnutella-downloads' --include '/var/spool/cron/crontabs' --include '/var/backups' --include '/etc' --include '/root' --include '/home' --include '/usr/local/*bin' --include '/var/lib/dpkg/status*' --include '/samba' --include '/opt' --exclude '/*' / [email protected]::/backup1/caro/backup_caro/ Debug: --------------[ Session statistics ]-------------- StartTime 1291490258.00 (Sat Dec 4 20:17:38 2010) EndTime 1291490411.49 (Sat Dec 4 20:20:11 2010) ElapsedTime 153.49 (2 minutes 33.49 seconds) SourceFiles 201588 SourceFileSize 61240891073 (57.0 GB) MirrorFiles 201575 MirrorFileSize 61237730812 (57.0 GB) NewFiles 14 NewFileSize 3156800 (3.01 MB) DeletedFiles 1 DeletedFileSize 1590 (1.55 KB) ChangedFiles 14 ChangedSourceSize 2239509 (2.14 MB) ChangedMirrorSize 2234458 (2.13 MB) IncrementFiles 30 IncrementFileSize 11169 (10.9 KB) TotalDestinationSizeChange 3171430 (3.02 MB) Errors 0 --------------------------------------------------
Fixeu-vos en la connexió a la màquina remota:
[email protected]::/backup1/caro/backup_caro/
Semblant a la sintaxi de SSH (però amb una separació entre màquina i path de dos vegades dos punts). caro és l'usuari remot, 192.168.0.254 és la IP de la màquina remota i /backup1/caro/backup_caro/ és la carpeta on és fa la còpia remota.
Al final es mostren unes estadístiques gràcies al paràmetre --print-statistics.
La copia s'havia fet amb:
$ rdiff-backup foo bar
Suposem que hem esborrat foo/dir i ara el volem restaurar a bar/dir. Recuperem la última copia:
$ cp -a bar/dir foo/dir
Ara suposem que les còpies són remotes:
$ rdiff-backup local-dir host.net::/remote-dir
Per recuperar un fitxer:
$ rdiff-backup --restore-as-of now host.net::/remote-dir/file local-dir/file
o
$ rdiff-backup -r now host.net::/remote-dir/file local-dir/file
L'opció --restore-as-of o -r indica que volem fer una operació de restauració (en comptes de l'acció per defecte que es fer una còpia de seguretat) i amb now indiquem que volem l'última còpia.
Obtenir una copia de fa 10 dies:
$ rdiff-backup -r 10D host.net::/remote-dir/file /tmp/file
Altres exemples de dates:
5m4s 2002-03-05 (March 5th, 2002)
Per a més informació vegeu:
TIME FORMATS
Al manual:
$ man rdiff-backup
TODO:
Finally, we can use rdiff-backup to restore directory from an increment file. Increment files are stored in host.net::/remote-dir/rdiff-backup-data/increments and hold the previous versions of changed files. If you specify one directly:
rdiff-backup host.net::/remote-dir/rdiff-backup-data/increments/file.2003-03-05T12:21:41-07:00.diff.gz local-dir/file rdiff-backup will tell from the filename that it is an rdiff-backup increment file and thus enter restore mode. Above the restored version is written to local-dir/file.
$ date ds des 4 20:18:23 CET 2010 $ /usr/bin/rdiff-backup --force --remove-older-than 60D [email protected]::/backup1/caro/backup_caro/ Debug: No increments older than Tue Oct 5 21:17:38 2010 found, exiting. Info: Removing backups older than 60D days succeeded.
Exemple extret de ninjabackup
La gent d'skolelinux han creat els paquests slbackup i webmin-slbackup que configuren rdiff-backup per a fer copies de seguretat amb un entorn gràfic que utilitza webmin o es pot configurar sense webmin amb fitxers de text (només instal·lant slbackup)
Consulteu Ninjabackup
IMPORTANT: La carpeta no ha d'existir prèviament! serà creada per rdiff-backup
rdiff-backup expects to run the first time in a setup where the target directory doesn't even exist. Since it looks like you want to use a mount point (and thus the directory must exist), you can safely use the --force option.
rdiff-backup comprova que la versió instalada a el servidor de copia de seguretat i al client remot sigui la mateixa i si no ho és no deixa fer la copia de seguretat. El problema és que evidentment les versions de rdiff-backup són diferents a Ubuntu, a Debian depenent de si estable, unstable i a Skolelinux.
La millor opció és instal·lar rdiff-backup a mà. Vegeu la secció dedicada a la instal·lació.
rdiff-backup utilitza ssh per connectar-se a les màquines remotes. S'utilitzen claus públiques per automatitzar el procés (evitar l'ús de passwords). NOTA IMPORTANT: Mitjançant ssh s'executen comandes en remot i el resultat d'aquestes comandes (sortida estandard) es procesada per rdiff en diferents parts del programa... Em vaig trobar amb diferents errors al intentar utilitzar rdiff-backup en màquines on tenia un echo de benvinguda al fitxer .baschr... això era processat també per rdiff i donava problemes.
Els errors que ens podem trobar son:
OverflowError: long int too large to convert to int http://lists.gnu.org/archive/html/rdiff-backup-users/2003-08/msg00037.html Les versions de client i servidor no es corresponen etc...