Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
lpi1:systemsicherung [2014/06/05 15:29] 127.0.0.1 Externe Bearbeitung |
lpi1:systemsicherung [2024/02/23 17:11] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Komplettsicherung des Systems ====== | ||
- | Zuverlässiger ( z.B. offene Dateien ) und möglicherweise einfacher ( z.B. udev ) ist es aus einem Rettungssystem heraus zu sichern. Die folgende Anleitung zeigt dagegen wie man aus einem laufenden System heraus sichert. Hürden wie eine nach ''/dev'' gemountete Ramdisk für ''udev'' werden dabei gemeistert. Dienste wie Mailserver oder Datenbanken ( offene Dateien ) sollten vorher angehalten werden. | ||
- | |||
- | Abschätzen, wie viel Platz benötigt wird: | ||
- | df -h | ||
- | |||
- | ===== Vorbereitung Zielsystem ===== | ||
- | |||
- | evtl. Platz schaffen wie in [[Plattenplatz]], [[Partitionierung]] und [[lvm]] beschrieben | ||
- | mkdir -p /mnt/backup/dateien | ||
- | |||
- | === Ubuntu === | ||
- | Zielverzeichnis ''/mnt/backup'' muss dem Ubuntu-Nutzer gehören: | ||
- | chown nutzerXX /mnt/backup | ||
- | |||
- | ===== Sicherung ===== | ||
- | Diese Schritte werden auf dem zu sichernden System ausgeführt. | ||
- | |||
- | ==== Sicherung der Partitionierung ==== | ||
- | Mehr zur Vorgehensweise siehe [[partitionierung]]. Wenn die Wiederherstellung nicht automatisiert erfolgen muss, reicht auch die Ausgabe von ''parted'' oder ''df'' | ||
- | parted /dev/sda print > sicherung.parted | ||
- | scp sicherung.parted root@server:/mnt/backup | ||
- | (( | ||
- | alternativ | ||
- | |||
- | sfdisk -d /dev/sda > sicherung.sfdisk | ||
- | scp sicherung.sfdisk root@server:/mnt/backup | ||
- | )) | ||
- | ==== Sicherung LVM Informationen ==== | ||
- | pvdisplay > sicherung.pvdisplay | ||
- | vgdisplay > sicherung.vgdisplay | ||
- | lvdisplay > sicherung.lvdisplay | ||
- | scp sicherung.pvdisplay sicherung.vgdisplay sicherung.lvdisplay root@server:/mnt/backup | ||
- | |||
- | alternativ mit | ||
- | vgcfgbackup -f sicherung.vg | ||
- | |||
- | ==== Sicherung der Dateisystem-Einstellungen ==== | ||
- | === Welche Dateisysteme müssen gesichert werden? === | ||
- | lsblk | ||
- | oder | ||
- | df -h | ||
- | === ext3 / ext4 === | ||
- | tune2fs -l /dev/sdaX > sicherung.tune2fs.sdaX | ||
- | scp sicherung.tune2fs.sdaX root@server:/mnt/backup | ||
- | ((''/dev/sdaX'' ist hier nur ein Beispiel für ein Speichergerät ( Partition, LVM, ...). Liegt das Dateisystem auf einem Logical Volume, dann heißt das Device ''/dev/mapper/xxx'' oder ähnlich)) | ||
- | |||
- | === xfs === | ||
- | xfs_admin -l /dev/sdaX > sicherung.xfs_admin.sdaX | ||
- | ((''/dev/sdaX'' ist hier nur ein Beispiel für ein Speichergerät ( Partition, LVM, ...). Liegt das Dateisystem auf einem Logical Volume, dann heißt das Device ''/dev/mapper/xxx'' oder ähnlich)) | ||
- | |||
- | ==== Sicherung der Dateien ==== | ||
- | === Einhängen der Dateisysteme unter /mnt/system === | ||
- | |||
- | mkdir /mnt/system | ||
- | mount --bind / /mnt/system | ||
- | mount --bind /boot /mnt/system/boot | ||
- | evtl. weitere Verzeichnisse/Partitionen entsprechend der Ausgabe von ''df'' bzw. ''lsblk'' | ||
- | |||
- | ((ab RedHat 6 und openSuSE 13.1 kann man auf diesen Schritt verzichten, und statt dessen bei ''rsync'' die Option ''-x'' bzw. ''--one-file-system'' nutzen und die entsprechenden Mountpoints einzeln angeben )) | ||
- | |||
- | === mit rsync über ssh === | ||
- | rsync -a --numeric-ids --del -e ssh /mnt/system/ root@server:/mnt/backup/dateien | ||
- | (( mehr zu [[rsync]] )) | ||
- | (( mehr zu [[ssh]] )) | ||
- | (( | ||
- | Zweiter Aufruf, um zu sehen ob alle Dateien kopiert wurden: | ||
- | rsync -anv --numeric-ids --del -e ssh /mnt/system/ root@server:/mnt/backup/dateien | ||
- | )) | ||
- | == Ubuntu == | ||
- | Unter **Ubuntu** gibt es defaultmäßig kein root Passwort! | ||
- | Wenn ein **Ubuntu** System das **ZIEL** ist, muss man zunächst dem User, mit dem man sich auf dem Ziel einloggen will, einen Eintrag machen, der rsync via sudo ohne Passwort erlaubt: | ||
- | |||
- | sudo visudo | ||
- | |||
- | und diese Zeile ergänzen: | ||
- | |||
- | %sudo ALL=(ALL) NOPASSWD: ALL | ||
- | |||
- | Der Benutzer muss in der Gruppe //sudo// sein | ||
- | |||
- | Und dann lautet der Befehl zum Backup: | ||
- | rsync -a --numeric-ids --del -e ssh --rsync-path="sudo rsync" /mnt/system/ user@zielsystem:/mnt/backup/dateien | ||
- | |||
- | == RedHat / CentOS == | ||
- | RedHat's Versionen von ''[[tar]]'' und ''[[rsync]]'' können mit ACLs und erweiterten Dateiattributen umgehen. Dazu die Optionen ''--xattrs'' ( ''tar'' ) oder ''--xattrs --acls'' ( ''rsync'' ) angeben. | ||
- | |||
- | === Plausibilitätsprüfung === | ||
- | //die gezeigten Verfahren sind nicht genau// | ||
- | |||
- | (( //Das funktioniert nicht, und ich verstehe nicht warum:// --- //[[|Ingo Wichmann]] 2013/12/19 16:21// | ||
- | Datenmenge auf dem Quellsystem: | ||
- | tar c --one-file-system / /home /boot 2>/dev/null | dd of=/dev/null | ||
- | Datenmenge auf dem Zielsystem: | ||
- | tar c /mnt/backup/dateien 2>/dev/null | dd of=/dev/null | ||
- | )) | ||
- | |||
- | Anzahl Dateien auf dem Quellsystem: | ||
- | find / /boot /home -xdev 2>/dev/null | sort | uniq | wc -l | ||
- | Anzahl Dateien auf dem Zielsystem: | ||
- | find /mnt/backup/dateien 2>/dev/null | wc -l | ||
- | |||
- | ==== Sicherung der ACL-Dateirechte ==== | ||
- | nur nötig, wenn ''tar'' oder ''rsync'' das nicht kann | ||
- | cd /mnt/system | ||
- | getfacl --skip-base -P -n -R . > sicherung.acl | ||
- | scp sicherung.acl root@server:/mnt/backup | ||
- | |||
- | ==== Sicherung der erweiterten Dateiattribute ( z.B. SELINUX, capabilities ) ==== | ||
- | nur nötig, wenn ''tar'' oder ''rsync'' das nicht kann | ||
- | cd /mnt/system | ||
- | getfattr -Rh -m . -d . > sicherung.attr | ||
- | scp sicherung.attr root@server:/mnt/backup | ||
- | |||
- | ====== Löschen des Systems ====== | ||
- | === schnell === | ||
- | dd if=/dev/zero of=/dev/sda | ||
- | |||
- | ... und nach ein paar Sekunden ist das System zumindest unbrauchbar. | ||
- | === sicher === | ||
- | dd if=/dev/urandom of=/dev/sda | ||
- | |||
- | wipe /dev/sda | ||
- | |||
- | ====== Wiederherstellung des Systems ====== | ||
- | Rettungssystem ( z.B. knoppix, pmagic ) booten | ||
- | |||
- | ===== Schritte im Rettungs-System ===== | ||
- | ==== Wiederherstellung der Partitionierung ==== | ||
- | Partitionierung anhand der Informationen aus der gesicherten Datei ''sicherung.parted'' und/oder gemäß ''etc/fstab'' aus dem Backup wie in [[Partitionierung]] beschrieben anlegen | ||
- | |||
- | ==== Wiederherstellung LVM ==== | ||
- | Partitionierung anhand der Informationen aus der gesicherten Datei ''sicherung.pvdisplay'', ''sicherung.vgdisplay'', ''sicherung.lvdisplay'' und/oder gemäß ''etc/fstab'' aus dem Backup wie in [[lvm]] beschrieben anlegen | ||
- | |||
- | ==== Dateisysteme anlegen==== | ||
- | Dateisysteme mit ''mkfs.ext3'' o.ä. gemäß ''etc/fstab'' aus dem Backup anlegen | ||
- | ((''/dev/sdaX'' ist hier nur ein Beispiel für ein Speichergerät ( Partition, LVM, ...). Liegt das Dateisystem auf einem Logical Volume, dann heißt das Device ''/dev/mapper/xxx'' oder ähnlich)) | ||
- | mkfs.ext3 /dev/sdaX | ||
- | ... | ||
- | |||
- | ==== Swap anlegen ==== | ||
- | ((''/dev/sdaX'' ist hier nur ein Beispiel für ein Speichergerät ( Partition, LVM, ...). Liegt das Dateisystem auf einem Logical Volume, dann heißt das Device ''/dev/mapper/xxx'' oder ähnlich)) | ||
- | mkswap /dev/sdaX | ||
- | |||
- | ==== Mounten der Zielpartitionen ==== | ||
- | Mountpoints mit ''mkdir'' anlegen und Dateisysteme mit ''mount'' einhängen: (( evtl. mount-optionen ( z.B. acl ) beachten )) | ||
- | ((''/dev/sdaX'' ist hier nur ein Beispiel für ein Speichergerät ( Partition, LVM, ...). Liegt das Dateisystem auf einem Logical Volume, dann heißt das root-Device ''/dev/mapper/xxx'' oder ähnlich)) | ||
- | mkdir /tmp/system | ||
- | mount /dev/sdaX /tmp/system | ||
- | |||
- | mkdir /tmp/system/boot | ||
- | mount /dev/sdaY /tmp/system/boot | ||
- | ... | ||
- | |||
- | ==== Wiederherstellen mit rsync über ssh ==== | ||
- | ((mehr siehe [[rsync]])) | ||
- | rsync -a --numeric-ids --del -e ssh root@server:/mnt/backup/dateien/ /tmp/system | ||
- | |||
- | evtl. ACLs und erweiterte Dateisystemattribute berücksichtigen | ||
- | |||
- | === Ubuntu === | ||
- | rsync -a --numeric-ids --del -e ssh --rsync-path="sudo rsync" user@server:/mnt/backup/dateien/ /tmp/system | ||
- | |||
- | ==== Wiederherstellen der ACL-Dateirechte ==== | ||
- | nur nötig, wenn ''tar'' das nicht kann | ||
- | mount -o remount,acl /tmp/system/ | ||
- | cd /tmp/system | ||
- | setfacl --restore sicherung.acl | ||
- | |||
- | ==== Wiederherstellen der SELinux Attribute ==== | ||
- | nur nötig, wenn ''tar'' das nicht kann | ||
- | ( nicht erfolgreich getestet ... ) | ||
- | mount -o remount,user_xattrs /tmp/system | ||
- | cd /tmp/system | ||
- | setfattr -h --restore sicherung.attr | ||
- | oder | ||
- | touch /tmp/system/.autorelabel | ||
- | |||
- | ==== Wiederherstellung der Dateisystem-Einstellungen ==== | ||
- | Mir ist kein automatischer Weg bekannt ... daher: | ||
- | tune2fs .... ( UUID, Dateisystem-Label, Mountoptionen, ... ) | ||
- | tune2fs -U xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /dev/sda5 | ||
- | mkswap -U yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy /dev/sda6 | ||
- | |||
- | ===== Bootloader wiederherstellen ===== | ||
- | ==== chroot vorbereiten ==== | ||
- | mount --rbind /dev /tmp/system/dev | ||
- | mount --bind /proc /tmp/system/proc | ||
- | mount --bind /sys /tmp/system/sys | ||
- | |||
- | (( nicht alle diese Befehle sind in allen Fällen notwendig! grub braucht hauptsächlich /dev, und das ist, wenn man zuvor beim Sichern mit ''mount --bind'' gearbeitet hat, schon minimal befüllt. Kann man also weglassen, aber wenn grub meckert, sollte man das versuchen! | ||
- | Ich habe es schon erlebt, dass die Datei ''/etc/mtab'' falsche Informationen enthält. Falls das so ist, kann man sie so ersetzen: | ||
- | mv /tmp/system/etc/mtab /tmp/system/etc/mtab.bak | ||
- | cp -a /proc/mounts /tmp/system/etc/mtab | ||
- | Nach dem chroot nicht vergessen, die ''/etc/mtab'' wiederherzustellen: | ||
- | mv /tmp/system/etc/mtab.bak /tmp/system/etc/mtab | ||
- | )) | ||
- | |||
- | ==== Schritte im chroot Zielsystem ==== | ||
- | chroot /tmp/system | ||
- | |||
- | === System wieder startfähig machen === | ||
- | == grub == | ||
- | Grub in den MBR schreiben: | ||
- | grub | ||
- | > root (hd0,0) | ||
- | > setup (hd0) | ||
- | > quit | ||
- | |||
- | oder mit | ||
- | grub-install --recheck --no-floppy hd0 | ||
- | |||
- | == grub2 == | ||
- | |||
- | == Debian 6.0 == | ||
- | grub-install /dev/sda | ||
- | update-grub2 | ||
- | |||
- | == openSuSE 12.2 == | ||
- | grub2-install /dev/sda | ||
- | update-bootloader --refresh | ||
- | |||
- | ===== Anpassungen bei geänderter Hardware oder geänderten Partitionen ===== | ||
- | Je nach dem wie sich die Hardware geändert hat, sind folgende Bereiche anzupassen: | ||
- | |||
- | ==== Bootloader grub ==== | ||
- | ''/boot/grub/menu.lst'' : | ||
- | |||
- | Neue Partitionsnummern beachten, wichtig sind z.B. | ||
- | * die Einstellungen zur Boot-Partition ( ''root'' ) in Grub-Terminologie | ||
- | * die Lage des Kernels ( ''/boot/vmlinuz*'' oder ''/vmlinuz*'' ) | ||
- | * Kernel-Parameter zum root-Dateisystem ( ''root= ...'' ) | ||
- | |||
- | ==== /etc/fstab ==== | ||
- | ''/etc/fstab'' : | ||
- | Neue Partitionsnummern, Software-RAID und Logical Volumes beachten | ||
- | |||
- | ==== /etc/mtab ==== | ||
- | ''/etc/mtab'' : | ||
- | Neue Partitionsnummern, Software-RAID und Logical Volumes beachten | ||
- | (( möglicherweise kann man ''/etc/mtab'' auch einfach löschen )) | ||
- | ==== Kernel-Module und initrd ==== | ||
- | Je nach Änderung muß eine neue [[admin_grundlagen:initrd|initrd]] erzeugt werden und/oder die bei Booten geladenen Module müssen überarbeitet werden | ||
- | === CentOS 6 === | ||
- | in der chroot-Umgebung | ||
- | mkinitrd --force /boot/initramfs-2.6.32-220.el6.x86_64.img 2.6.32-220.el6.x86_64 | ||
- | |||
- | ==== udev ==== | ||
- | Gerätenamen in ''/etc/udev/rules.d'' anpassen | ||
- | |||
- | ====== Alternative Sicherungswege ====== | ||
- | ==== Platzsparende Hardlink Backups mit rsnapshot ==== | ||
- | |||
- | Installation mit | ||
- | |||
- | apt-get install rsnapshot | ||
- | |||
- | Konfiguration unter: | ||
- | |||
- | /etc/rsnapshot.conf | ||
- | |||
- | Dabei wichtig: | ||
- | |||
- | snapshot_root - wohin soll gesichert werden | ||
- | interval daily 7 - Wieviele Versionen vom täglichen Backup sollen behalten werden? | ||
- | interval weekly 4 - Wieviele Versionen vom wöchentlichen Backup sollen behalten werden? | ||
- | interval monthly 6 - Wieviele Versionen vom monatlichen Backup sollen behalten werden? | ||
- | backup /quelle zielrechner/ - Zb localhost/ oder im Zusammenhang mit SSH gebrauchen | ||
- | |||
- | Testen der Config | ||
- | |||
- | rsnapshot configtest | ||
- | |||
- | Danach kann man das Ganze erst einmal im Probedurchlauf testen ohne wirklich Dateien zu schreiben: | ||
- | |||
- | rsnapshot -t daily | ||
- | |||
- | ==== Sicherung mit tar über ssh ==== | ||
- | tar cz --numeric-owner --directory /mnt/system . | ssh nutzer@server "cat > /mnt/backup/sicherung.tgz" | ||
- | |||
- | Fedora 7, Centos 5: | ||
- | tar cz --numeric-owner --xattrs --directory /mnt/system . | ssh nutzer@server "cat > /mnt/backup/sicherung.tgz" | ||
- | |||
- | === Dokumentation === | ||
- | * [[tar|Übersicht tar]] | ||
- | * man tar | ||
- | |||
- | === Sicherung mit tar über ssh und anschließendem entpacken === | ||
- | |||
- | cd /pfad/zur/quelle && tar -cpP --atime-preserve -f - . | ssh user@server "( cd /pfad/zum/ziel && tar -xpvP --atime-preserve -f - )" | ||
- | |||
- | ==== Sicherung mit cpio über ssh ==== | ||
- | ((Vermeidet die Probleme von tar und gzip bei Datenfehlern)) | ||
- | |||
- | cd /mnt/system | ||
- | find -xdev -depth -print0 | cpio -o0 --format=crc | bzip2 | ssh nutzer@server 'cat > /mnt/backup/sicherung.cpio.bz2' | ||
- | |||
- | ==== Wiederherstellen mit tar über ssh ==== | ||
- | ssh nutzer@server 'cat /mnt/backup/sicherung.tgz' | tar xz --numeric-owner --directory /tmp/system | ||
- | |||
- | ==== Wiederherstellen mit cpio über ssh ==== | ||
- | cd /tmp/system | ||
- | ssh nutzer@server 'cat /mnt/backup/sicherung.cpio.bz2' | bunzip2 | cpio -dumin | ||
- | |||
- | ==== rsync ==== | ||
- | Auf lokale Platte: | ||
- | rsync -ax --numeric-ids --del / /mnt/usbdisk/root/ | ||
- | |||
- | Übers Netz via ssh: | ||
- | rsync -ax --numeric-ids --del -e ssh / server:/mnt/backup/dateien | ||
- | |||
- | Übers Netz via rsyncd: (( erfordert laufenden rsyncd auf dem Zielsystem //server// )) | ||
- | rsync -ax --numeric-ids --del / server::/backup/dateien/ | ||
- | |||
- | ===== Problem: udev ===== | ||
- | Auf modernen Linux-Installationen wird wegen [[udev]] das Verzeichnis ''/dev'' von einem temporären Dateisystem überdeckt. Linux benötigt diese überdeckten Dateien aber beim Booten. | ||
- | |||
- | Lösungswege: | ||
- | |||
- | - Beim Backup das Verzeichnis ''/dev'' explizit angeben. Die wichtigsten Gerätedateien sollten auch darin enthalten sein. | ||
- | - Auf das Orginalsystem kann man mit ''mkdir /tmp/system && mount --bind / /tmp/system'' zugreifen. Die Sicherung muss man dann mit ''tar czpf /dev/st0 --numeric-owner --directory /tmp/system .'' starten. | ||
- | |||
- | FRAGE: das müsste doch durch die bind-mounts nach /mnt/system gelöst sein, oder?! | ||
- | |||
- | Antwort: richtig | ||
- | |||
- | ====== Dokumentation ====== | ||
- | * [[http://www.linux-magazin.de/Artikel/ausgabe/2002/04/rsync/rsync.html]] | ||
- | ====== Software ====== | ||
- | * [[http://www.dirvish.org]] | ||
- | * [[http://www.mondorescue.org/]] | ||
- | * [[http://www.partimage.org/Main_Page]] | ||