Zálohy na vzdálenej čípotač jednoduše (cron,rsync,bash)
July 5th, 2010
Nejsem moc velkej fanda zálohování, ale už se mi to párkrát vymstilo, takže jsem byl donucenej s tím něco dělat. Potřeboval jsem nějakej batch, kterej odzálohuje, co potřebuju a nebude nutit připojovat fyzicky nějaký zařízení. Logicky tedy k zálohování dat na notebooku používám druhý PC, který je dafakto jen držák na HDD s hudbou a filmama. Menší problém je ten, že to PC je vetšinu času vypnutý (prostě nesnáším, když cokoliv běží 90% naprosto zbytečne pro případ, že bych to náhodou mohl potřebovat). Jediná rozumná volba tedy byla “zbudit” PC a po odzálohování se zeptat, jestli ho chci vypnout nebo ne (Ten dotaz je asi nejmenší zlo, na který jsem přišel. Chvíli jsem koketoval s myšlenkou, zda zjišťovat, jestli je zapnutý monitor/pc bylo zapnuty s vypnutým monitorem = nekoukám se na film etc., nicméně jsem nenašel žadnou stoprocetně spolehlivou cestu, jak zjistit, proč je počítač zrovna spuštěnej).
Jak na to? Na cílový mašině:
Zjistíme, jestli karta podporuje WoL (d - magic packet, p - physical activity)
root@bedna:/home/starenka# ethtool eth0 | grep Wake-on
Supports Wake-on: g
Wake-on: d
Povolíme WoL:
root@bedna:/home/starenka# ethtool eth0 | grep Wake-on
Supports Wake-on: g
Wake-on: g
Ten flag je bohužel třeba nastavit při každým spuštění, takže:
### BEGIN INIT INFO
# Provides: wol
# Required-Start: $syslog $networking
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: sets wol on eth0
### END INIT INFO
ethtool -s eth0 wol g
a spustímě skript při každým runlevelu (ehm)
zjistíme MAC cílový mašiny:
Na mašině odkud zálohujeme nainstalujeme rsync a wakeonlan
# aptitude install rsync wakeonlan
backup skript upravíme dle potřeb a šoupneme do cronu
TAR_MAC="00:1f:d0:63:27:80"
TAR_HOST="bedna"
TAR_USER="starenka"
MAX_BW=400 #KB/s
MAX_TRIES=5
INTERVAL_TRIES=30
DIALOG_TITLE="–title Backup"
DIRS=(‘/photo’ ‘/www’ ‘/prac’ ‘/mail’
)
EXCLUDE=(‘.opera/cache/’ ‘.bzr’ ‘.svn’ ‘.git’
)
kdialog –passivepopup ‘Starting regular backup batch’ 5
if [ `ping -s 1 -c 1 $TAR_HOST > /dev/null; echo $?` -eq 1 ]; then
kdialog $DIALOG_TITLE –passivepopup "$TAR_HOST is down, sending magic packet" 5
wakeonlan $TAR_MAC
TRIES=0
until [ `ping -s 1 -c 1 $TAR_HOST > /dev/null; echo $?` -eq 0 ]; do
let TRIES=TRIES+1
if [ $TRIES -eq $MAX_TRIES ]; then
kdialog $DIALOG_TITLE –sorry "$TAR_HOST not responding, giving up…" 5
exit 1
fi
kdialog $DIALOG_TITLE –passivepopup "$TAR_HOST not responding, waiting for ping ($TRIES)…" 5
sleep $INTERVAL_TRIES
done
fi
for db in ${DIRS[@]}
do
kdialog $DIALOG_TITLE –passivepopup "Starting $db" 5
rsync -Prazvh –delete "${EXCLUDE[@]/#/–exclude=}" –copy-links –bwlimit=$MAX_BW -e ssh "$db" ${TAR_USER}@${TAR_HOST}:/backups
kdialog $DIALOG_TITLE –passivepopup "Backup of $db has finished" 5
done
kdialog $DIALOG_TITLE –passivepopup ‘Backup finished’ 5
kdialog $DIALOG_TITLE –yesno "Backup has finished. Shoudl I halt the remote machine ($TAR_HOST)?"
if [ $? -eq 0 ]; then
kdialog $DIALOG_TITLE –passivepopup "Halting $TAR_HOST" 5
echo ’sudo halt’ | ssh ${TAR_USER}@${TAR_HOST}
fi
Popularity: 11% [?]

