Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung Nächste Überarbeitung Beide Seiten, nächste Überarbeitung | ||
admin_grundlagen:systemsicherung [2022/12/09 11:02] carsten_strotmann |
admin_grundlagen:systemsicherung [2024/02/23 17:11] ingo_wichmann [UEFI] |
||
---|---|---|---|
Zeile 33: | Zeile 33: | ||
==== Sicherung der Partitionierung ==== | ==== Sicherung der Partitionierung ==== | ||
- | Mehr zur Vorgehensweise siehe [[partitionierung]]. Wenn die Wiederherstellung nicht automatisiert erfolgen muss, reicht auch die Ausgabe von ''parted'' | + | Partitionstabelle im Textformat sichern: |
+ | sfdisk -d /dev/sda > sicherung.sfdisk | ||
+ | |||
+ | ((bei GPT-Partitionstabellen eine inzwischen veraltete Warnung der Entwickler vorweg: //As of March 2014 (version 0.8.10), sgdisk should be considered beta software.// )) (( | ||
+ | Lesbarer, aber nicht automatisch wiederherstellbar geht das auch so: | ||
fdisk -l -o device,size,type,uuid /dev/sda > sicherung.fdisk | fdisk -l -o device,size,type,uuid /dev/sda > sicherung.fdisk | ||
oder | oder | ||
parted /dev/sda print > sicherung.parted | parted /dev/sda print > sicherung.parted | ||
- | Ubuntu: | + | Mehr zur Vorgehensweise siehe [[Partitionierung]]. )) |
- | scp sicherung.parted nutzer@server:/mnt/backup | + | |
- | + | ||
- | andere Distributionen (bei denen root ein Passwort hat): | + | |
- | scp sicherung.parted root@server:/mnt/backup | + | |
- | (( | + | |
- | alternativ für MSDOS-Partitionstabellen: | + | |
- | + | ||
- | sfdisk -d /dev/sda > sicherung.sfdisk | + | |
- | scp sicherung.sfdisk root@server:/mnt/backup | + | |
- | + | ||
- | bei GPT-Partitionstabellen eine inzwischen veraltete Warnung der Entwickler vorweg: //As of March 2014 (version 0.8.10), sgdisk should be considered beta software.// | + | |
- | )) | + | |
==== Sicherung LVM Informationen ==== | ==== Sicherung LVM Informationen ==== | ||
Zeile 100: | Zeile 92: | ||
==== Sicherung der Dateien ==== | ==== Sicherung der Dateien ==== | ||
=== Einhängen der Dateisysteme unter /mnt/system === | === Einhängen der Dateisysteme unter /mnt/system === | ||
- | In der Ausgabe von ''df -hT -x tmpfs -x devtmpfs'' die Mountpoints aller persistenten, lokalen Dateisysteme (mit Ausnahme von loop-Devices) identifizieren und unterhalb von ''/mnt/system'' bind-mounten: | ||
- | |||
mkdir /mnt/system | mkdir /mnt/system | ||
mount --bind / /mnt/system | mount --bind / /mnt/system | ||
+ | |||
+ | In der Ausgabe von ''df -hT -x tmpfs -x devtmpfs'' die Mountpoints aller weiteren persistenten, lokalen Dateisysteme (mit Ausnahme von loop-Devices) identifizieren und unterhalb von ''/mnt/system'' bind-mounten: | ||
+ | |||
mount --bind /boot /mnt/system/boot | mount --bind /boot /mnt/system/boot | ||
- | ... | + | und/oder |
+ | mount --bind /boot/efi /mnt/system/boot/efi | ||
+ | und möglicherweise weitere: | ||
+ | mount --bind ... | ||
((ab RedHat 6, openSuSE 13.1, Debian 8 und Ubuntu 16.04 könnte man auf diesen Schritt verzichten, und statt dessen bei ''rsync'' die Option ''-x'' bzw. ''--one-file-system'' nutzen und die entsprechenden Mountpoints einzeln angeben )) | ((ab RedHat 6, openSuSE 13.1, Debian 8 und Ubuntu 16.04 könnte man auf diesen Schritt verzichten, und statt dessen bei ''rsync'' die Option ''-x'' bzw. ''--one-file-system'' nutzen und die entsprechenden Mountpoints einzeln angeben )) | ||
Zeile 114: | Zeile 110: | ||
== Debian (ab 8) == | == Debian (ab 8) == | ||
Wie oben unter "[[#debian_ab_8|Vorbereitung Zielsystem]]" beschrieben kann man entweder so vorgehen | Wie oben unter "[[#debian_ab_8|Vorbereitung Zielsystem]]" beschrieben kann man entweder so vorgehen | ||
- | * wie bei anderen Distributionen, bei denen root ein Passwort hat | + | * wie bei [[#andere_distributionen_bei_denen_root_ein_passwort_hat|anderen Distributionen, bei denen root ein Passwort hat]] |
oder | oder | ||
* wie bei Ubuntu | * wie bei Ubuntu | ||
Zeile 144: | Zeile 140: | ||
== andere Distributionen (bei denen root ein Passwort hat) == | == andere Distributionen (bei denen root ein Passwort hat) == | ||
rsync -aSH --acls --xattrs --numeric-ids --del /mnt/system/ root@server:/mnt/backup/dateien | rsync -aSH --acls --xattrs --numeric-ids --del /mnt/system/ root@server:/mnt/backup/dateien | ||
- | (( mehr zu [[rsync]], u.a. wie man hier ''rsync'' auch ohne root-Rechte benutzen kann )) | + | (( mehr zu [[rsync]], u.a. wie man hier ''rsync'' auch ohne root-Rechte benutzen kann )) (( mehr zu [[ssh]] )) (( wenn man ein Art Fortschrittsbalken haben will: ''progress'' installieren und ''progress -wm'' ausführen während rsync läuft. )) |
- | (( mehr zu [[ssh]] )) | + | |
- | (( wenn man ein Art Fortschrittsbalken haben will: ''progress'' installieren und ''progress -wm'' ausführen während rsync läuft. )) | + | |
- | + | ||
- | == erweiterte Attribute und ACLs mit tar und rsync == | + | |
- | RedHat's Versionen von ''[[tar]]'' und ''[[rsync]]'' können mit ACLs und erweiterten Dateiattributen umgehen, bei Debian ab Version 8. Dazu die Optionen ''--xattrs'' ( ''tar'' ) oder ''--xattrs --acls'' ( ''rsync'' ) angeben. | + | |
=== Plausibilitätsprüfung === | === Plausibilitätsprüfung === | ||
Zeile 169: | Zeile 160: | ||
* Größenvergleich mit ''du -sh'' -> Achtung: die Größen sind nie exakt gleich, die Größenordnung pro Dateisystem sollte passen. | * Größenvergleich mit ''du -sh'' -> Achtung: die Größen sind nie exakt gleich, die Größenordnung pro Dateisystem sollte passen. | ||
- | Optional, für Freude der Unix-Kommandozeile: | + | ++++ Optionale, genauere Prüfung für Freude der Unix-Kommandozeile | |
Auf dem Zielsystem Checksummen für Backup-Dateien erzeugen: | Auf dem Zielsystem Checksummen für Backup-Dateien erzeugen: | ||
Zeile 189: | Zeile 180: | ||
Berechtigungen vergleichen | Berechtigungen vergleichen | ||
diff ~/getfacl.orig /run/getfacl.backup | diff ~/getfacl.orig /run/getfacl.backup | ||
+ | ++++ | ||
+ | ++++ ACLs und erweiterte Attribute | | ||
=== Sicherung der ACL-Dateirechte === | === Sicherung der ACL-Dateirechte === | ||
- | nur nötig, wenn ''tar'' oder ''rsync'' das nicht kann | + | aktuelle Versionen von ''tar'' und ''rsync'' erledigen das mit, bei älteren Systemen: |
cd /mnt/system | cd /mnt/system | ||
getfacl --skip-base -P -n -R . > sicherung.acl | getfacl --skip-base -P -n -R . > sicherung.acl | ||
Zeile 201: | Zeile 193: | ||
getfattr -Rh -m . -d . > sicherung.attr | getfattr -Rh -m . -d . > sicherung.attr | ||
scp sicherung.attr root@server:/mnt/backup | scp sicherung.attr root@server:/mnt/backup | ||
+ | ++++ | ||
====== Löschen des Systems ====== | ====== Löschen des Systems ====== | ||
Zeile 240: | Zeile 233: | ||
====== Wiederherstellung des Systems ====== | ====== Wiederherstellung des Systems ====== | ||
- | Rettungssystem ( z.B. sysrcd, knoppix ) booten | + | Rettungssystem booten (im Linuxhotel-Netz: PXE-Boot und ''debian11live'' eingeben) |
===== Schritte im Rettungs-System ===== | ===== Schritte im Rettungs-System ===== | ||
==== Wiederherstellung der Partitionierung ==== | ==== 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 | + | Partitionstabelle wiederherstellen: |
+ | sfdisk /dev/sda < sicherung.sfdisk | ||
- | Bitte Typ der Partitionstabelle (''gpt'' oder ''msdos'') beachten. | + | (( Alternativ: Partitionierung manuell anhand der Informationen aus der gesicherten Datei ''sicherung.parted'' und/oder gemäß ''etc/fstab'' aus dem Backup wie in [[Partitionierung]] beschrieben anlegen |
+ | |||
+ | Typ der Partitionstabelle (''gpt'' oder ''msdos'') beachten. )) | ||
==== Wiederherstellung LVM ==== | ==== Wiederherstellung LVM ==== | ||
In Knoppix muss dazu zuerst lvm2 gestartet werden: | In Knoppix muss dazu zuerst lvm2 gestartet werden: | ||
Zeile 252: | Zeile 248: | ||
=== mit vgcfgrestore === | === mit vgcfgrestore === | ||
IDs der Physical Volumes herausfinden: | IDs der Physical Volumes herausfinden: | ||
- | less ~/sicherung.vg | + | less sicherung.vg |
Physical Volumes anlegen: | Physical Volumes anlegen: | ||
pvcreate -ff --zero y --restorefile ~/sicherung.vg --uuid xxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx /dev/sdaX | pvcreate -ff --zero y --restorefile ~/sicherung.vg --uuid xxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx /dev/sdaX | ||
... | ... | ||
Name der Volume Group herausfinden: | Name der Volume Group herausfinden: | ||
- | less ~/sicherung.vg | + | less sicherung.vg |
Volume Group und Logical Volumes wiederherstellen: | Volume Group und Logical Volumes wiederherstellen: | ||
vgcfgrestore -f ~/sicherung.vg centos_notebook17 | vgcfgrestore -f ~/sicherung.vg centos_notebook17 | ||
+ | vgchange -a y | ||
=== von Hand === | === von Hand === | ||
Zeile 279: | Zeile 276: | ||
mkfs.vfat -i xxxxxxxx /dev/sdaX | mkfs.vfat -i xxxxxxxx /dev/sdaX | ||
((Eine UUID die von ''blkid'' im Format ''%%UUID="066B-5CE0"%%'' ausgegeben wurde muss ''mkfs.vfat'' mit ''066B5CE0'' (also ohne Minus) übergeben werden)) | ((Eine UUID die von ''blkid'' im Format ''%%UUID="066B-5CE0"%%'' ausgegeben wurde muss ''mkfs.vfat'' mit ''066B5CE0'' (also ohne Minus) übergeben werden)) | ||
- | |||
==== Swap anlegen ==== | ==== Swap anlegen ==== | ||
Zeile 287: | Zeile 283: | ||
==== Mounten der Zielpartitionen ==== | ==== Mounten der Zielpartitionen ==== | ||
- | In ''/mnt/backup/dateien/etc/fstab'' aufgeführte Mountpoints mit ''mkdir -p'' anlegen und Dateisysteme mit ''mount'' einhängen: (( evtl. mount-optionen ( z.B. acl ) beachten )) | + | In ''/mnt/backup/dateien/etc/fstab'' aufgeführte 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)) | ((''/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 -p /tmp/system | + | mkdir /tmp/system |
mount /dev/sdaX /tmp/system | mount /dev/sdaX /tmp/system | ||
- | mkdir -p /tmp/system/boot | + | mkdir /tmp/system/boot |
mount /dev/sdaY /tmp/system/boot | mount /dev/sdaY /tmp/system/boot | ||
- | ... | + | und/oder |
+ | mkdir /tmp/system/boot/efi | ||
+ | mount /dev/sdaZ /tmp/system/boot/efi | ||
+ | und möglicherweise weitere: | ||
+ | mkdir /tmp/system/… | ||
+ | mount … | ||
==== Wiederherstellen der Dateien mit rsync über ssh ==== | ==== Wiederherstellen der Dateien mit rsync über ssh ==== | ||
- | ((mehr siehe [[rsync]])) | + | rsync -aSH --acls --xattrs --numeric-ids --del root@server:/mnt/backup/dateien/ /tmp/system |
- | rsync -aSH --acls --xattrs --numeric-ids --del -e ssh root@server:/mnt/backup/dateien/ /tmp/system | + | |
- | evtl. ACLs und erweiterte Dateisystemattribute berücksichtigen | + | ((mehr siehe [[rsync]])) (( Notlösung: Berechtigungen (teilweise) wiederherstellen, wenn sie nicht richtig gesichert wurden |
- | (( Notlösung: Berechtigungen (teilweise) wiederherstellen, wenn sie nicht richtig gesichert wurden | + | |
rpm -qa | xargs rpm --setperms | rpm -qa | xargs rpm --setperms | ||
Todo: debian? | Todo: debian? | ||
)) | )) | ||
=== Ubuntu === | === Ubuntu === | ||
- | rsync -aSH --acls --xattrs --numeric-ids --del -e ssh --rsync-path="sudo rsync" user@server:/mnt/backup/dateien/ /tmp/system | + | rsync -aSH --acls --xattrs --numeric-ids --del --rsync-path="sudo rsync" user@server:/mnt/backup/dateien/ /tmp/system |
+ | ++++ ACLs und erweiterte Attribute | | ||
=== Wiederherstellen der ACL-Dateirechte === | === Wiederherstellen der ACL-Dateirechte === | ||
nur nötig, wenn ''rsync'' bzw. ''tar'' das nicht kann | nur nötig, wenn ''rsync'' bzw. ''tar'' das nicht kann | ||
Zeile 322: | Zeile 322: | ||
oder | oder | ||
touch /tmp/system/.autorelabel | touch /tmp/system/.autorelabel | ||
+ | ++++ | ||
===== Bootfähig machen ===== | ===== Bootfähig machen ===== | ||
==== chroot vorbereiten ==== | ==== chroot vorbereiten ==== | ||
Zeile 328: | Zeile 328: | ||
mount --rbind /proc /tmp/system/proc | mount --rbind /proc /tmp/system/proc | ||
mount --rbind /sys /tmp/system/sys | mount --rbind /sys /tmp/system/sys | ||
- | + | mount --rbind /run /tmp/system/run | |
- | (( 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! | + | ((/run ist sinnvoll bei der Verwendung von lvm oder raid)) (( 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: | + | === Alternativ mit bind statt rbind === |
- | 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 | + | |
- | )) | + | |
- | + | ||
- | (( | + | |
- | === Alternativ ohne rbind === | + | |
mount --bind /dev /tmp/system/dev | mount --bind /dev /tmp/system/dev | ||
mount --bind /dev/pts /tmp/system/dev/pts | mount --bind /dev/pts /tmp/system/dev/pts | ||
mount --bind /proc /tmp/system/proc | mount --bind /proc /tmp/system/proc | ||
mount --bind /sys /tmp/system/sys | mount --bind /sys /tmp/system/sys | ||
+ | mount --bind /run /tmp/system/run | ||
)) | )) | ||
- | /run ist sinnvoll bei der Verwendung von lvm oder raid | ||
- | mount --bind /run /tmp/system/run | ||
- | | ||
==== UEFI ==== | ==== UEFI ==== | ||
(nur bei UEFI-Systemen) | (nur bei UEFI-Systemen) | ||
Zeile 359: | Zeile 349: | ||
chroot /tmp/system /bin/bash | chroot /tmp/system /bin/bash | ||
+ | === grub-efi bzw. efivars wiederherstellen === | ||
- | === grub-efi über efi === | + | Debian: |
- | Bei einfachen Installationen ist grub-efi der zweite Bootloader hinter efi. | + | |
- | In diesem Fall reicht | + | |
grub-install dummy | grub-install dummy | ||
- | Voraussetzung dafür ist, dass die EFI-System-Partition (ESP) an die richtige | + | SuSE (ab 15.4): |
- | Stelle gemountet ist (/boot/grub/efi) | + | grub-install |
+ | shim-install | ||
+ | |||
+ | CentOS / Rocky (ab 8): | ||
+ | |||
+ | ''grub-install'' funktioniert nicht, also müssen die EFI-Einträge manuell gesetzt werden | ||
+ | efibootmgr -v | ||
+ | |||
+ | -> alle alten Einträge löschen: | ||
+ | efibootmgr -B -b 000f | ||
+ | (( ''000f'' ist hier nur ein Beispiel für einen veralteten Eintrag )) | ||
+ | |||
+ | EFI ESP Partition merken | ||
+ | grub2-probe -t device /boot/efi/EFI/ | ||
+ | |||
+ | EFI-Eintrag anlegen | ||
+ | efi_label='Name der Distribution' # z.B. ''CentOS Linux'' oder ''Rocky Linux'' | ||
+ | distro='DISTRIBUTION' # ''centos'' oder ''rocky'' | ||
+ | boot_device='/dev/sda' # ''/dev/sda'' oder ''/dev/nvme0n1'' | ||
+ | esp_partition_id=2 | ||
+ | efibootmgr --create --disk "$boot_device" --part "$esp_partition_id" --label "$efi_label" --loader "/EFI/$distro/shimx64.efi" | ||
+ | |||
+ | grub-config neu erzeugen | ||
+ | grub2-mkconfig -o /boot/grub2/grub.cfg | ||
+ | oder | ||
+ | grub2-mkconfig -o /boot/efi/EFI/$distro/grub.cfg | ||
+ | |||
+ | Ab RHEL/CentOS/Rocky 8 werden zusätzlich Einträge für BLS (''/boot/loader/entries/'') benötigt, da grub.cfg keinen direkten Eintrag für Kernel und initrd enthält: | ||
+ | |||
+ | dnf -y reinstall kernel-core | ||
+ | oder mit grubby von Hand: | ||
+ | source /etc/default/grub | ||
+ | grubby --add-kernel=/boot/vmlinuz-5.14.0-284.30.1.el9_2.x86_64 --args="$GRUB_CMDLINE_LINUX" --initrd=/boot/initramfs-5.14.0-284.30.1.el9_2.x86_64.img --title="Rocky Linux" | ||
(( | (( | ||
Zeile 405: | Zeile 425: | ||
)) | )) | ||
=== EFI Variablen prüfen === | === EFI Variablen prüfen === | ||
+ | blkid | ||
efibootmgr -v | efibootmgr -v | ||
Zeile 425: | Zeile 446: | ||
update-bootloader --refresh | update-bootloader --refresh | ||
- | == CentOS 7 == | + | == CentOS (ab 7) == |
grub2-install /dev/sda | grub2-install /dev/sda | ||
grub2-mkconfig > /boot/grub2/grub.cfg | grub2-mkconfig > /boot/grub2/grub.cfg | ||
Zeile 443: | Zeile 464: | ||
grub-install --recheck --no-floppy hd0 | grub-install --recheck --no-floppy hd0 | ||
- | ==== Centos 8 Recovery mit UEFI ==== | ||
- | grub-install funktioniert nicht, also müssen die EFI-Einträge manuell gesetzt werden | ||
- | efibootmbr -v | ||
- | da wird wahrscheinlich nur noch der PXE-Eintrag sein | ||
- | |||
- | EFI SP merken | ||
- | blkid | ||
- | gdisk -l /dev/sda | ||
- | |||
- | Achtung: Je nach Umgebung, sind efivars gar nicht gemountet oder RO | ||
- | mount -oremount,rw /sys/firmware/efi/efivars | ||
- | | ||
- | EFI-Eintrag machen (-p = ordinale Nummer der ESP) | ||
- | efibootmgr -c -L "CentOS Linux" -l /EFI/centos/shimx64.efi -p 1 | ||
- | |||
- | nochmal kontrollieren | ||
- | blkid | ||
- | efibootmgr -v | ||
- | | ||
- | grub-config neu erzeugen | ||
- | grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg | ||
- | |||
- | Fallen | ||
- | * /etc/default/grub # resume devices und Parameter | ||
==== reboot ==== | ==== reboot ==== | ||
chroot-Umgebung (z.B. mit ''Strg+d'') verlassen und | chroot-Umgebung (z.B. mit ''Strg+d'') verlassen und | ||
Zeile 473: | Zeile 470: | ||
===== Anpassungen bei geänderter Hardware oder geänderten Partitionen ===== | ===== Anpassungen bei geänderter Hardware oder geänderten Partitionen ===== | ||
+ | ==== Ubuntu (22.04 LTS) ==== | ||
+ | * TODO: Nach Backup/Restore ist snap kaputt | ||
+ | |||
+ | |||
==== Rebuild Red Hat / Rocky / Alma 8 ==== | ==== Rebuild Red Hat / Rocky / Alma 8 ==== | ||
**[[Rebuild Red Hat 8|komplettes Rebuild Bootmanager UEFI+Rocky/Alma/Red Hat 8]]** | **[[Rebuild Red Hat 8|komplettes Rebuild Bootmanager UEFI+Rocky/Alma/Red Hat 8]]** | ||
Zeile 713: | Zeile 714: | ||
* BTRFS Dateisysteme von Backup-System via SSH zurückspielen<code example> | * BTRFS Dateisysteme von Backup-System via SSH zurückspielen<code example> | ||
- | ssh nutzerXX@192.168.1.2XX "cat notebookXX.btrfs" | btrfs recieve /mnt/.restore | + | ssh nutzerXX@192.168.1.2XX "cat notebookXX.btrfs" | btrfs receive /mnt/.restore |
</code> | </code> | ||
Zeile 732: | Zeile 733: | ||
* Root-Filesystem-ID als neues Default-Volume des BTRFS Dateisystems eintragen<code example> | * Root-Filesystem-ID als neues Default-Volume des BTRFS Dateisystems eintragen<code example> | ||
- | btrfs subvol set-default <id> | + | btrfs subvol set-default <id> /mnt |
</code> | </code> | ||