Skip to content

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.

Linux Backup mit Duply, Duplicity und Rdiff-Backup auf (potentiell unsichere) Online Speicher (Teil 2)

Teil 2: Duply und Duplicity

Im ersten Teil habe ich ja bereits die Unterschiede zwischen Duply / Duplicity und Rdiff-Backup geschildert. In diesem Teil gehe ich also davon aus, dass man Duplicity verwendet, weil man vom Provider einen FTP Backup Space zur Verfügung gestellt bekommen hat oder Amazons S3 nutzt.

Installation

Unter Ubuntu 10.04 LTS / Lucid Lynx könnte es kaum einfacher sein. Die Pakete sind bereits im Repository vorhanden und können direkt mittels aptitude installiert werden.

aptitude install duply duplicity

Wer ältere Ubuntu Versionen oder andere Distributionen nutzt, kann Duply auch direkt von der Downloadsite nehmen und das Python Script unter /usr/bin legen und als ausführbar markieren (chmod +x /usr/bin/duply). Duplicity sollte in jedem halbwegs aktuellen Repository jedoch vorhanden sein.


"Linux Backup mit Duply, Duplicity und Rdiff-Backup auf (potentiell unsichere) Online Speicher (Teil 2)" vollständig lesen

Python Scripte mit PyInstaller als .exe verteilen

Python

Wozu der Aufwand?

Es kommt der Tag, an dem man seine Python Scripte ausserhalb seiner Entwicklungsumgebung einsetzen möchte. Von anderen Programmiersprachen kennt man die Möglichkeit, die Programme zu compilieren und diese unter Windows als ausführbare .exe oder .dll Dateien zu verteilen.

Compilieren im eigentlichen Sinn lässt sich ein Python Script nicht. Man kann jedoch Python Scripte auch in .exe verwandeln und diese verteilen. Der Grund dafür kann sein, daß man nicht überall eine installierte Python-Umgebung voraussetzen möchte oder auch um seinen Quellcode gegen neugierige Blicke oder Änderungen zu schützen. In diesen .exe-Dateien wird dann neben dem Script noch eine Python-Laufzeitumgebung und benötigte Bibliotheken mit eingepackt, so daß alle benötigten Bestandteile dabei sind und das Programm sofort auf dem Zielrechner ausführbar ist.

"Python Scripte mit PyInstaller als .exe verteilen" vollständig lesen

Browser-Tabs vom 8. August 2006

CSS und HTMLDjangoPHPPython

HTML Layout mit CSS statt Tabellen

Ich hatte gestern noch jemandem versprochen, ein paar Links zum Thema Layout per CSS zu posten. Bitteschön:

tweetbackcheck cronjob