16.06.2011 17:50

Schattenkopien

In einem Beitrag vom 15.06.2011 wurde gezeigt, wie sich mit Hilfe von changetrack und RCS frühere Fassungen von Konfigurationsdateien wieder herstellen lassen. Es wäre sicherlich nicht nur für Administratoren, sondern auch für reguläre Benutzer des LHS angenehm, eine beispielsweise vor zwei Stunden versehentlich gelöschte Datei zurück zu holen.

Im folgenden soll solch eine Funktion mit Hilfe des Logical Volume Managements (LVM) realisiert werden. Es handelts sich dabei gewissermaßen um die vereinfachte Version dessen, was auf Windows-PCs als Volume Shadow Copy Service bekannt ist. Versuchen wir uns zunächst an der Partion mit den /home-Dateien.


root@bluestar:~# mount -l | grep 'home'
/dev/mapper/vg1-home on /home type ext3 (rw,nosuid,nodev,noatime,usrquota,grpquota,user_xattr,acl) [home]



root@bluestar:~# df -h | egrep 'Size|home'
Dateisystem           Size  Used Avail Use% Eingehängt auf
/dev/mapper/vg1-home   15G  185M   14G   2% /home



root@bluestar:~# lvs | egrep 'LV|home'
  LV    VG   Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  home  vg1  -wi-ao  14,90g                                      


Als nächstes soll vom logischen Volume home in der Volumengruppe vg1 ein Schnappschuus mit dem Namen home.snap erzeugt werden.


root@bluestar:~# lvcreate --snapshot --name home.snap --extents 10%ORIGIN /dev/vg1/home
  Logical volume "home.snap" created



root@bluestar:~# lvs | egrep 'LV|home'
  LV        VG   Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  home      vg1  owi-ao  14,90g                                      
  home.snap vg1  swi-a-   1,49g home     0,00                        



root@bluestar:~# mkdir -p /snap/home /snap/var

Jetzt existiert ein Verzeichnis mit dem Namen /snap/home, in dem der erzeugte Schnappschuss zur Benutzung bereitgestellt werden kann. Vorsorglich wird auch gleich das Verzeichnis /snap/var angelegt, um auf weitere Schnappschüsse vorbereitet zu sein.


root@bluestar:~# editor /etc/fstab

#
# LVM-Snapshots
#
/dev/mapper/vg1-home.snap  /snap/home  ext3  noauto,ro  0  0
/dev/mapper/vg1-home.snap  /snap/home  ext3  noauto,ro  0  0


Die Datei wurde hier nur auszugsweise dargestellt.


root@bluestar:~# mount /snap/home

root@bluestar:~# mount -l | grep 'home'
/dev/mapper/vg1-home on /home type ext3 (rw,nosuid,nodev,noatime,usrquota,grpquota,user_xattr,acl) [home]
/dev/mapper/vg1-home.snap on /snap/home type ext3 (ro) [home]


Ein Shellskript soll die künftige Benutzung vereinfachen.


root@bluestar:~# editor /root/bin/resnap
#!/bin/sh -e

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

case "$1" in
  home|var)
        mountpoint -q /snap/$1 && umount /snap/$1
        ( lvs | grep "$1.snap" >/dev/null 2>1 ) && lvremove -f /dev/vg1/$1.snap
        lvcreate --snapshot --name $1.snap --extents 10%ORIGIN /dev/vg1/$1 && mount /snap/$1
        ;;
  *)
        echo "Usage: /root/bin/resnap {home|var}"
        ;;
esac



root@bluestar:~# ./bin/resnap
Usage: /root/bin/resnap {home|var}



root@bluestar:~# ./bin/resnap home
  Logical volume "home.snap" successfully removed
  Logical volume "home.snap" created



root@bluestar:~# ./bin/resnap var
  Logical volume "var.snap" created



root@bluestar:~# mount -l | grep 'snap'
/dev/mapper/vg1-home.snap on /snap/home type ext3 (ro) [home]
/dev/mapper/vg1-var.snap on /snap/var type ext3 (ro) [var]



root@bluestar:~# df -h | egrep 'Size|snap'
Dateisystem               Size  Used Avail Use% Eingehängt auf
/dev/mapper/vg1-home.snap  15G  185M   14G   2% /snap/home
/dev/mapper/vg1-var.snap  7,4G  749M  6,3G  11% /snap/var



root@bluestar:~# lvs | egrep 'LV|snap'
  LV        VG   Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  home.snap vg1  swi-ao   1,49g home     0,00                        
  var.snap  vg1  swi-ao 760,00m var      0,28                        


Als vorläufig letzten Schritt soll des Erzeugen der Snapshots automatisiert werden und jede Nacht um kurz nach vier erfolgen.


root@bluestar:~# crontab -e
1 4 * * *  /root/bin/resnap home | /usr/bin/logger -i -t 'remount snapshot'
2 4 * * *  /root/bin/resnap var  | /usr/bin/logger -i -t 'remount snapshot'


Was jetzt noch fehlt, ist die Freigabe der Snapshots im lokalen Netzwerk, damit die Benutzer sie auch verwenden können. Außerdem wäre es schön, nicht ausschließlich auf den Stand der letzten Nach angewiesen zu sein, sondern beispielsweise mehrere Snapshots im Stundentakt zu haben. Dies soll zu einem späteren Zeitpunkt mit Hilfe des Softwarepakets rsnapshot realisiert werden. Immerhin eignen sich die bisher erzeugten LVM-Snapshots auch gut als Quelle für Datensicherungen und das soll uns als nächstes beschäftigen.


Geschrieben von root | Permanenter Link | Kategorien: Verwaltung