Skip to content

Rsync Logical Volumes / LVM

Wenn man regelmäßig Daten transferieren oder abgleichen möchte, dann ist Rsync in der Regel das beste Mittel der Wahl. Rsync überträgt nur geänderte Dateien, tut dies sehr effizient, komprimiert dabei noch und verschlüsselt die Daten während des Transfers. Rsync funktioniert für regelmäßige Dateitransfers also extrem gut.

Schön wäre es nun, wenn man so etwas wie Rsync auch für sehr große Dateien oder Logical Volumes eines LVM verwenden könnte. Ein typischer Anwendungsfall ist die Sicherung von virtuellen Maschinen, bei denen diese Images auch schon mal mehrere hundert GB groß sind.

Continue reading "Rsync Logical Volumes / LVM"

Automatische btrfs Snapshots vor Installation

Btrfs, so könnte man meinen, ist der kommende Star unter den Linux Filesystemen. Bis dahin ist es zwar noch ein weiter weg, denn auch btrfs hat noch einige Baustellen, aber es werden permanent weniger und die Entwicklung schreitet mit großen Schritten voran. Noch 2012 wird Oracle, als Arbeitgeber des Hauptentwicklers Chris Mason, das Filesystem als stabil kennzeichnen und es in der kommenden Version ihres Oracle Linux ganz offiziell supporten. Das alles lässt hoffen. 

Btrfs  hat einige wirklich überzeugende Features und ich möchte einige dieser Features und konkrete Anwendungen dafür in der nächsten Zeit näher vorstellen. Den Anfang mache ich mit den btrfs Snapshots.

Ich habe kürzlich gesehen, wie jemand mit yum unter Oracle Linux vor jeder Installation einen automatischen Snapshot anlegte, um jederzeit wieder darauf zurücksetzen zu können. Das wollte ich für meine Ubuntu Installation ebenfalls. Die Umsetzung war dabei sehr leicht:

/etc/apt/apt.conf.d/70debconf

Dpkg::Pre-Invoke {"mkdir -p /snapshots; ROOTFS=`mount | grep ' on / ' | \
cut -f1 -d' '`; mount $ROOTFS /snapshots; \
/sbin/btrfs subvolume snapshot /snapshots/@ /snapshots/@_snapshot_apt_`date +%Y-%m-%d_%H-%M-%S`; \
umount /snapshots";};

Apt (oder Aptitude) stellt eine Schnittstelle zur Verfügung um Befehle vor einer Paketinstallation auszuführen. Das können auch mehrere Befehle sein, so wie oben angegeben. 

Die Vorgehensweise ist wie folgt:

  1. Es wird ein Ordner /snapshots angelegt, sofern dieser noch nicht existiert.
  2. Wir finden heraus, welches Device als root gemounted ist
  3. Wir schneiden uns den Device Teil heraus und hängen diesen unter /snapshots noch mal ein (btrfs kann das)
  4. Ein Snapshot von / wird in /snapshot/@_snapshot_apt_(datum) erzeugt
  5. Der Mountpoint /snapshots wird wieder ausgehängt um eine unbeabsichtigte Änderung zu vermeiden.

Da ein solcher btrfs Snapshop nur Sekundenbruchteile dauert, merkt man es bei einer Installation gar nicht, aber der Systemzustand wird festgehalten. Sollte man nach der Installation nun feststellen, dass etwas nicht läuft oder es sich nur um einen Test gehandelt hat, den man nun wieder rückgängig machen möchte, geht man wie folgt vor:

  1. Das Root Device hängen wir noch mal unter /snapshots ein: mount <root device> /snapshots
  2. Ein btrfs subvolumes list /snapshots zeigt uns alle angelegten Snapshots
  3. Mittels mv @ @_oldroot und einem anschließenden mv @_snapshot_apt_(datum) @ aktivieren wir den früheren Snapshot wieder als root
  4. reboot

Nach einem Reboot des Systems sind nun alle nach dem Snapshot installierten Pakete und alle Veränderungen am Filesystem wieder zurückgesetzt worden, so als wäre es nie geschehen.

So kann man beliebig mit den Snapshots hin- und herwandern. Alle Snapshots sind übrigens auch regulär beschreibbar. Nicht mehr benötigte Snapshots kann man einfach mit einem btrfs subvolume delete /snapshots/<snapshot-name> entfernen.

Zum Ende noch eine Warnung: Da Ubuntu btrfs als root Filesystem zwar unterstützt, aber von der Standardimplementierung abweicht, funktioniert die oben angegebene Vorgehensweise nur auf Ubuntu, nicht aber auf Debian Systemen. Bei Debian Systemen ab Squeeze funktioniert dies zwar grundsätzlich schon, man muss jedoch mit den Subvolumes etwas anders umgehen. Debian hält sich an den Weg, wie ihn btrfs eigentlich vorgibt, Ubuntu weicht dagegen ab.

tweetbackcheck cronjob