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*'

LinuxDebian/Tar (last edited 2018-01-11 20:59:31 by Kurgan)