Aktualizováno dne 11. března 2011 - Scribus – vložení tabulky z Writeru

Linux v praxi

Různé drobnosti


Inkrementální zálohování dat

…s možností obnovy starší verze, či smazaných souborů

Tak se mi v práci konečně poštěstilo koupit pořádný externí disk, takže mi spadnul obrovský kámen ze srdce, způsobený velkým problémem nějak zálohovat data. RAID sice dokáže pomoci, když se podělá HW, ale za ta léta jsou poznal, že SCSI disky jsou mnohem spolehlivější, než uživatelé, kteří k datům mají přístup. Ale zálohovací disk nás ochrání i před nimi ;-)

Zálohuji několik adresářů a používám k tomu program rdiff-backup. A zde uvedený skript, který spouštím 1× týdně pomocí cronu.

#!/bin/bash

zalohuj ()
{
echo "============ Zaloha adresare adresar1 ================="
echo "Pripojuji disk"
mount.cifs  //192.168.0.56/adresar1 /mnt/adresar1 -ouser=root,pass=xxxxxxxx,iocharset=utf8
echo "Zalohuji..."
find /mnt/adresar1 | grep -E -i -f /root/zalohovani/seznam.txt | rdiff-backup --include-filelist-stdin --exclude '**' /mnt/adresar1 /mnt/backupdisk/adresar1
echo "Zaloha adresare adresar1 dokoncena, odpojuji disk"
echo " "
umount.cifs /mnt/adresar1

for adresar in adresar2 adresar3 adresar4 adresar5
 do 
  echo "============ Zaloha adresare $adresar ================="
  echo "Pripojuji disk"
  mount.cifs //192.168.0.56/$adresar /mnt/$adresar -ouser=root,pass=xxxxxxxx,iocharset=utf8
  echo "Zalohuji..."
  rdiff-backup /mnt/$adresar /mnt/backupdisk/$adresar
  echo "Zaloha adresare $adresar dokoncena, odpojuji disk"
  echo " "
  umount.cifs /mnt/$adresar
 done

echo "Zaloha `date` probehla v poradku" >> /root/zalohovani/zaznam

for adresar in adresar1 adresar2 adresar5
 do 
  echo "================== $adresar =================" >> /root/zalohovani/zmeny
  rdiff-backup --list-changed-since 1W /mnt/backupdisk/$adresar >> /root/zalohovani/zmeny
 done
echo "================== místo na discích  =================" >> /root/zalohovani/zmeny
df -Th >> /root/zalohovani/zmeny
umount /mnt/backupdisk
}

echo "Změny k `date`:" > /root/zalohovani/zmeny
if mount -Lzaloha /mnt/backupdisk 2>/dev/null
then zalohuj
else echo "ERROR: Zaloha `date` se nezdarila" >> /root/zalohovani/zaznam
fi
mail -s "Probehlo zalohovani" ota@xxx.cz < /root/zalohovani/zaznam
mail -s "Probehlo zalohovani - seznam zmen" ota@xxx.cz < /root/zalohovani/zmeny
exit 0

Předpokladem úspěchu je, že na záložním disku i v adresáři /mnt na systémovém disku mám vytvořeny adresáře, které jsou pojmenovány stejně, jako se jmenují sdílení na serveru, odkud jsou zálohy prováděny. Pokud nechcete využívat cyklus for .. in, můžete si pojmenovat co chcete, jak chcete. Nejdůležitější je příkaz rdiff-backup /co/zálohuji /kam/zálohuji.
Můj skript funguje takhle:

  • Vyčistím si soubor zmeny tím, že ho přepíšu řádkem se dnem zálohy
  • Do adresáře /mnt/backupdisk se pokusím připojit externí disk. Pokud se to podaří, spustím zálohu, pokud ne, zapíšu do záznamu chybovou hlášku
  • Odešlu si soubor se záznamem (v němž mám seznam všech dní, kdy se skript spustil a jeho úspěšnost) a soubor se změnami, které byly během zálohy provedeny
Záloha je definována ve funkci zalohuj () a dělá tohle:
  • Připojí přes sambu síťový disk do určeného adresáře v /mnt/
  • Pomocí rdiff-backup udělá jeho zálohu
  • Odpojí ho. Uvedený cyklus provede se všemi zálohovanými adresáři
  • Do záznamu zapíše, že vše proběhlo v pořádku
  • Do souboru se změnami vygeneruje, co vše se změnilo v adresářích, u kterých mne to zajímá (šlo by to dělat v pohodě v rámci toho prvního cyklu, ale to je jedno). Takovýto soubor mi potom může pomoci mnohem snadněji najít, kdy byl některý soubor smazán a jak se jmenoval.
  • Na konec souboru se změnami připíše, kolik mám na discích místa
  • Odpojí externí disk
Ve skriptu je vidět, že adresář1 zálohuji jinak, než ostatní. Z něj totiž zálohuji jen vybané soubory, uvedené v souboru seznam.txt. Je to ochrana před tím, abych neměl zálohovací disk zaliskaný nějakými hloupými videi, či mp3. Ostatní adresáře zálohuji kompletně. Inspiraci jsem načerpal v tomto seriálu na linuxsoft.cz, kde najdete i to, jak má vypadat soubor seznam.txt

Používáte browser CCBot/2.0 (http://commoncrawl.org/faq/)
„Muži nedovedou ocenit vlastní ženy. To přenechávají druhým.“ Oscar Wilde