Scriptino standard di backup con tar su hard disk esterno
Questo va bene per me, probabilmente non per voi. Modificatelo a piacere. O meglio, non usatelo, che e` un cesso inverecondo.
# #!/bin/bash # logger -t backup_usb Inizio backup # check se /mnt e gia in uso if ! [ -f /mnt/not_mounted ]; then echo "Backup fallito: /mnt e' gia' montata!"; logger -t backup_usb "Backup fallito: /mnt e' gia' montata!"; exit 1 fi; # se non e` in uso, la monto mount -t ext3 -L $1 /mnt if [ -f /mnt/not_mounted ]; then echo Backup fallito: non riesco ad accedere al disco removibile ; logger -t backup_usb Backup fallito: non riesco ad accedere al disco removibile ; else echo `date` Ruoto i vecchi files logger -t backup_usb Ruoto i vecchi files savelog -l -c 2 /mnt/*.tgz savelog -l -c 2 /mnt/*.log echo `date` Inizio il backup del sistema logger -t backup_usb Inizio il backup del sistema tar cvzf /mnt/sistema.tgz / --one-file-system --totals --exclude /home --exclude /var/vmail --exclude /ud0 > /mnt/sistema.log echo . echo `date` Inizio il backup di ud0 logger -t backup_usb Inizio il backup di ud0 tar cvzf /mnt/ud0.tgz /ud0 --one-file-system --totals > /mnt/ud0.log echo . echo `date` Inizio il backup delle home logger -t backup_usb Inizio il backup delle home tar cvzf /mnt/home.tgz /home --one-file-system --totals > /mnt/home.log echo . echo `date` Inizio il backup della mail logger -t backup_usb Inizio il backup della mail tar cvzf /mnt/mail.tgz /var/vmail --one-file-system --totals > /mnt/mail.log echo . echo `date` Smonto il disco logger -t backup_usb Smonto il disco sync sleep 1m fi; umount /mnt logger -t backup_usb Disco smontato - fine backup date
Tar da un disco all'altro in locale
Monti i due dischi, poi:
(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpf -)
Tar in salsa ssh
Per fare un tar via ssh da una macchina all'altra, scrivendo un file tgz sulla macchina remota:
tar czf - <path di partenza> | ssh <user>@<host> dd if=- of=<file.tgz>
oppure
tar czf - <path di partenza> | ssh <user>@<host> dd of=<file.tgz>
a seconda della versione di "dd" della macchina remota.
Se si vuole fare il contrario, cioe` aprire un archivio remoto e scompattarlo in locale:
ssh <user>@<host> dd if=<file.tgz> of=- | tar xpf -
Per fare un tar del file system della macchina remota e scriverlo in un file tgz locale:
ssh <user>@<host> tar czf - --one-file-system / | dd of=<file.tgz>
Oppure:
ssh <user>@<host> dd if=<file.tgz> | tar xpf -
Esempio: tar di /ud0 (con tutto) in ssh sul file /backup.tgz della macchina remota.
tar czf - /ud0 | ssh root@pippo.pluto.it dd if=- of=/backup.tgz
Per fare una copia di un file system via ssh (non producendo un file tar, ma una copia delle directory di partenza) mantenendo tutti i permessi:
tar cf - <path di partenza> <secondo path di partenza> <...> | ssh <user>@<host> tar xpf - -C <path di arrivo>
Esempio: tar di /ud1/programmi e /ud1/rapporti verso la stessa posizione su un disco di una macchina remota: (in questo esempio, sulla macchina locale mi trovo gia` dentro a "/ud1"
tar cf - programmi/ rapporti/ | ssh root@10.20.0.201 tar xpf - -C /ud1/
Copiare solo i files piu` nuovi di una data
Puo` venire utile creare un archivio solo con i files piu` nuovi di una certa data. Si puo` fare con il seguente parametro:
tar czf [altri parametri] --newer="2014-11-30 02:00:00"
Il formato della data e` YYYY-MM-DD HH:MM:SS
Estrazione di alcuni files soltanto
Estrarre un file indipendentemente dal path (usando eventualmente anche wildcards):
tar xvf /mnt/ud0.tgz --wildcards --no-anchored nomefile tar xvf /mnt/ud0.tgz --wildcards --no-anchored '*nomefile*'