Dieser Artikel wurde archiviert, da er - oder Teile daraus - nur noch unter einer älteren Ubuntu-Version nutzbar ist. Diese Anleitung wird vom Wiki-Team weder auf Richtigkeit überprüft noch anderweitig gepflegt. Zusätzlich wurde der Artikel für weitere Änderungen gesperrt.
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
In Gutsy gibt es einige Probleme mit EVMS
Dies ist eine Ideensammlung, die nicht für Anfänger gedacht ist. In ihr ist dokumentiert, wie es möglich ist, mit Hilfe von EVMS-Snapshots komplette Sicherungen des laufenden Systems anzufertigen, das zudem in allen wesentlichen Teilen verschlüsselt ist.
Der Aufwand für Systembackups ist auf einem Standardsystem höher als nötig: man muss in ein zweites System booten und von dort aus mehr oder weniger langwierig Partitionsimages anfertigen. Das braucht zumindest etwas Zeit. Zeit, die man oft nicht erübrigen will, wenn man gerade interessante, aber systemgefährliche Experimente vorhat.
Das in Ubuntu enthaltene Volume-Management-System EVMS beherrscht eine Schnappschuss-Funktion. Unter Verwendung einer weiteren Partition werden alle Änderungen abgefangen und können bei Bedarf leicht und schnell rückgängig gemacht werden. Die Schnappschuss-Partition kann dabei kleiner sein als das Original.
Das Speichern eines Schnappschusses benötigt nur wenige Sekunden, lediglich fürs vollständige Zurückspielen sind reboots in ein Rettungssystem nötig.
EVMS verwendet den device-mapper des Linux Kernels. Dieser beherrscht auch Verschlüsselung, was aber in EVMS noch nicht integriert ist. Dennoch lassen sich Verschlüsselung und evms kombinieren.
Für EVMS werden benötigt:
Ein Kernel mit evms-Unterstützung (alle Ubuntu-Kernel sind geeignet)
EVMS-Software (ist in main): evms, evms-gui (unter X) oder evms-ncurses (Konsole), eventuell evms-cli, womit Scriptsteuerung möglich wird.
Zur Nutzung der Schnappschuss-Funktion muss die betreffende Partition ein EVMS-Volume sein. Bei der Root-Partition erfordert das einen gewissen Aufwand.
Freier Plattenplatz wird im Reiter Disks gelistet. Dort kann nach Rechtsklick auf ein Objekt eine Partition angelegt werden. Unbenutzte Partitionen stehen unter Available Objects. Hier muss nun ein EVMS-Volume erzeugt und passend benannt werden (z.B. "ubuntu-root"). Dieses wird dann unter Volumes angezeigt und kann mit make Filesystem (Kontextmenü) formatiert werden.
Das formatierte EVMS-Volume erscheint in /dev/evms, z.B. als /dev/evms/ubuntu-root. Dieses Volume kann von der Ubuntu Live-CD aus gemountet werden, worauf sich das bestehende System mit cp -a übertragen lässt. Einträge für die Root-Partition in der fstab und /boot/grub/menu.lst anpassen.
Das System könnte nun gestartet werden, wenn der Kernel mit den neuen root=/dev/evms/ubuntu-root schon etwas anfangen könnte. Zur Nutzung der EVMS-Volumes muss aber erst die EVMS-Software gestartet werden, die sich auf ersterem befindet. Klassisches Problem, klassische Lösung: eine initrd. Es gibt fertige evms-initrds hier. Es kann wichtig sein, die zur evms-Engine passende Version zu verwenden. Leider wird bei Ubuntu schon eine initrd für die vielen Kernelmodule verwendet.
Ausweg 1: Die initrds kombinieren. ??
Ausweg 2: einen Kernel bauen, der für die Module keine initrd braucht. Dazu müssen Treiber für Festplatten (z.B. ide-disk), Dateisystem (ext3) und Chipsatz (via82xx) fest eingebaut werden. Ein passender Namenszusatz im Makefile des Kernels ist nützlich:
EXTRAVERSION = -evms
Wird auf die evms-initrd nun ein passender Link wie /boot/initrd.img-2.6.10-evms gesetzt, so wird bei der Installation des mit make-kpkg binary
gebauten Kernels auch gleich ein passender Eintrag in der /boot/grub/menu.lst erzeugt.
Das System auf dem evms-Volume mit dem neuen Kernel sollte sich jetzt von der Grub-Konsole starten lassen:
root <Partition des evms-Volumes> kernel /boot/vmlinuz-2.6.10-evms root=/dev/evms/root initrd /boot/initrd.img-2.6.10-evms boot
Sobald das funktioniert, kann in der evmsgui eine weitere Partition für die Schnappschussfunktion vorbereitet werden.
Wenn eine leere Partition zur Verfügung steht, kann in evmsgui unter Available Objects ein Feature Objekt daraus erzeugt werden. Für das Snapshot-Feature müssen Name und Originalvolume angegeben werden.
Auf Basis des neuen Feature Objekts kann jetzt ein identisch benanntes EVMS-Volume erzeugt werden, das man dann mounten, fscken, oder mit dd sichern kann. So kann man im Prinzip die dauerhafte Sicherung eines funktionierenden Systems durchführen, während man es bereits zerschießt... Und wenn es einem gelingt, noch während der Sicherung einen Absturz zu provozieren, hat man immer noch den Schnappschuss, den man zurückspielen kann.
Der Schnappschuss lässt sich auf den aktuellen Stand setzen, wenn man im Kontextmenü des entsprechenden Feature Object die Option Reset wählt.
Aus einem Rettungssystem (z.B. Ubuntu-Live, oder ein Minimalsystem ohne X mit der ncurses-Oberfläche zu evms) kann der Schnappschuss mit der Option Roll back zurückgespielt werden. Das Zielvolume darf dabei nicht gemountet sein - deshalb das externe System. Dauert schlimmstenfalls ein paar Minuten...
Mit einem Schnappschuss ist auch ein dauerhaftes Backup des laufenden Systems mit dd möglich.
Sicherung:
dd if=/dev/evms/snapshot-ubuntu-root | gzip -c > /mnt/backup/<Dateiname>
Zurückspielen, aus dem Rettungssystem:
gunzip -c /mnt/backup/<Dateiname> | dd of=/dev/evms/ubuntu-root
(Stimmt der Befehl so? Hab's schon eine Weile nicht mehr gebraucht - aber natürlich irgendwann mal erprobt.)
Mit Cryptsetup ist es möglich, Partitionen auf einfache Weise zu verschlüsseln. Dabei wird wie bei evms der device-mapper des Linux-Kernels verwendet. Dennoch kennt evms derzeit keine Verschlüsselung. Die geeignete Vorgehensweise ist daher: Unten steht das evms-Volume, darauf aufbauend kommt dann die Verschlüsselung. Gemountet wird dann das Gerät unter /dev/mapper. Zum Beispiel: /var soll auf dem zu verschlüsselnden Volume /dev/evms/ubuntu-var-encrypted liegen. Dann wird ein entsprechendes Volume wie gehabt angelegt. Danach wird ein passendes Crypto-Device mit
cryptsetup -y create ubuntu-var /dev/evms/ubuntu-var-encrypted
erzeugt. Das Device /dev/mapper/ubuntu-var wird nun formatiert und gemountet. Auch ein Schnappschuss lässt sich so von var machen - aber nur auf verschlüsselter Ebene. Das bedeutet, dass die Sicherung mit dd sehr große Dateien erzeugt - gzip kann mit den verschlüsselten Daten nun mal nicht so viel anfangen. Man könnte aber zur Sicherung ein weiteres Cryptodevice anlegen:
cryptsetup create snapshot-ubuntu-var /dev/evms/snapshot-ubuntu-var
. Das entschlüsselte Device /dev/mapper/snapshot-var lässt sich nun platzsparend sichern - wobei man natürlich die Sicherungsdatei oder den Sicherungsdatenträger verschlüsseln sollte. Nach dem Rücksetzen des Snapshots muss dieses Cryptodevice neu erzeugt werden.
/ liegt auf einem EVMS-Volume, es existiert ein Snapshot.
der swap wird mit einem zufälligen Schlüssel verschlüsselt. Das erfordert Änderungen in /etc/init.d/mountall:
if [ $doswap = yes ] then cryptsetup -c blowfish -s 128 -d /dev/urandom create swap0 /dev/hda5 mkswap /dev/mapper/swap0 swapon -a 2> /dev/null fi
/tmp, /home und /var sind mit einem zufällig erzeugten 256-bit aes Schlüssel verschlüsselt. Dieser befindet sich auf einer Diskette, die selbst mit cryptsetup und einem sicheren Passwort verschlüsselt ist. Das /etc/init.d/cryptdisks ist so angepasst, dass vor dem Einrichten der "normalen" Crypto-Devices cryptsetup für /dev/fd0 ausgeführt und die verschlüsselte Diskette gemountet wird; nach der Einrichtung wird die Diskette ungemountet und das Cryptodevice entfernt.
modprobe floppy cryptsetup create cryptofloppy /dev/fd0 mount /dev/mapper/cryptofloppy /mnt/cryptofloppy
und
umount /dev/mapper/cryptofloppy cryptsetup remove cryptofloppy
Die /etc/crypttab sieht so aus:
# <target device> <source device> <key file> <options> tmp /dev/evms/tmp-encrypted /mnt/cryptofloppy/key var /dev/evms/var-encrypted /mnt/cryptofloppy/key home /dev/evms/home-encrypted /mnt/cryptofloppy/key
In der fstab sieht das dann so aus:
/dev/evms/root / ext3 defaults,errors=remount-ro 0 1 /dev/mapper/tmp /tmp ext2 defaults 0 2 /dev/mapper/var /var ext3 defaults 0 2 /dev/mapper/home /home ext3 defaults 0 2 /dev/mapper/swap0 none swap sw 0 0
So muss beim Start des Systems nur ein Passwort angegeben werden - das für die Diskette. Mit drei verschlüsselten Partitionen ist das sonst immer etwas umständlich.
Von /var existiert natürlich auch ein Snapshot wie oben angegeben.
Zur Sicherung des Systems müssen / und /var berücksichtigt werden. Manuell ist das alles noch etwas umständlich. Vor Updates führe ich daher ein Script aus, das die Snapshots zurücksetzt und vom derzeitigen Stand eine Sicherung auf DVD-RAM schreibt. Verzeihung - dank des Snapshots während der Updates - DVD-RAM ist derzeit leider Sch...lahm. Das Script sieht etwa so aus (derzeit noch ohne jede Fehlerbehandlung):
#!/bin/bash DATUM=$(date --iso-8601) PLATZBEDARF=3575492 #ja, das ist ziemlich willkürlich echo "mounte Backupdateisystem" cryptsetup create dvd-ram-encrypted /dev/scd0 mount -t udf -o rw /dev/mapper/dvd-ram-encrypted /mnt/backup FREIERPLATZ=$(df | grep /mnt/backup | awk '{print $4}') if [ $FREIERPLATZ -lt $PLATZBEDARF ]; then echo "Zu wenig Plattenplatz auf /mnt/backup" exit 1 fi echo "setze Snapshots zurück..." sync evms -f reset-root-snapshot.task sync evms -f reset-var-snapshot.task echo "richte Cryptodevice fr den Zugriff auf snapshot-var-encrypted ein" cryptsetup remove snapshot-var-decrypted #aufraeumen cryptsetup remove cryptofloppy cryptsetup create cryptofloppy /dev/fd0 mount /dev/mapper/cryptofloppy /mnt/cryptofloppy cryptsetup -d /mnt/cryptofloppy/key create snapshot-var-decrypted /dev/evms/snapshot-var-encrypted umount /mnt/cryptofloppy cryptsetup remove cryptofloppy echo "pruefe Dateisysteme auf den Snapshots" fsck.ext3 /dev/evms/snapshot-root fsck.ext3 /dev/mapper/snapshot-var-decrypted echo "Beginne Kopieren... root-Snapshot" dd if=/dev/evms/snapshot-root | gzip -c > /mnt/backup/snapshot-root-$DATUM.img.gz echo "fertig (root-Snapshot)" echo "Beginne Kopieren... var-Snapshot" dd if=/dev/mapper/snapshot-var-decrypted | gzip -c > /mnt/backup/snapshot-var-decrypted-$DATUM.img.gz echo "fertig (var-Snapshot)" cryptsetup remove snapshot-var-decrypted umount /mnt/backup cryptsetup remove dvd-ram-encrypted echo "Das wars."
Die *.task Dateien sehen etwa so aus:
Task : reset, snapshot-root
Anregungen hierzu bitte an droebbel.
Diese Revision wurde am 22. Juli 2009 11:40 von oliverhorn erstellt.