- /etc/ssh/sshd_config
PermitRootLogin yes
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 -Thlx tmpfs -x devtmpfs
→ Summe der Daten auf persistenten, lokalen Dateisystemen
evtl. Platz schaffen wie in Plattenplatz, Partitionierung und lvm beschrieben
mkdir -p /mnt/backup/dateien
Zielverzeichnis /mnt/backup
muss dem Ubuntu-Nutzer gehören:
chown nutzerXX /mnt/backup
Entweder
oder
Diese Schritte werden auf dem zu sichernden System ausgeführt.
Bei UEFI-Systemen ist es manchmal hilfreich die EFI Variablen zu sichern:
efibootmgr -v > sicherung.efivars
vgcfgbackup -f sicherung.vg pvdisplay > sicherung.pvdisplay vgdisplay > sicherung.vgdisplay lvdisplay > sicherung.lvdisplay
lsblk -f
oder
df -Thlx tmpfs -x devtmpfs
→ alle persistenten, lokalen Dateisysteme müssen gesichert werden
tune2fs -l /dev/sdaX > sicherung.ext.sdaX
xfs_admin -l -u /dev/sdaX > sicherung.xfs.sdaX xfs_info /dev/sdaX >> sicherung.xfs.sdaX
btrfs läßt sich nicht einfach mit rsync oder tar sichern. Die beste Alternative ist, statt dessen ein Image des Dateisystems mit fsarchiver
oder partclone
zu erstellen. 6)
blkid /dev/sdaX > sicherung.vfat.sdaX
blkid /dev/sdaX > sicherung.swap.sdaX
Ubuntu:
scp sicherung.* nutzer@server:/mnt/backup
andere Distributionen (bei denen root ein Passwort hat):
scp sicherung.* root@server:/mnt/backup
mkdir /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
und/oder
mount --bind /boot/efi /mnt/system/boot/efi
und möglicherweise weitere:
mount --bind ...
Auf Quell- und Zielsystem muss rsync installiert sein. Alternativ kann man auch tar über ssh verwenden.
Wie oben unter „Vorbereitung Zielsystem“ beschrieben kann man entweder so vorgehen
oder
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 -f /etc/sudoers.d/backup
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 -aSH --xattrs --acls --numeric-ids --del --rsync-path="sudo rsync" /mnt/system/ user@zielsystem:/mnt/backup/dateien
Btrfs snapshot subvolumes können nicht sinnvoll mit rsync oder tar gesichert und wieder hergestellt werden, da die Deduplizierung von Btrfs dabei nicht mehr genutzt wird und die Dateien mehrfach im Backup landen würden.
rsync -aSH --acls --xattrs --numeric-ids --del /mnt/system/ root@server:/mnt/backup/dateien
Die wichtigsten Fragen sind:
ls
stichprobenartig nachschauenfind
und wc
Dateien zählenls -l
stichprobenartig nachschauenEinfache Lösung:
-nv
du -sh
→ Achtung: die Größen sind nie exakt gleich, die Größenordnung pro Dateisystem sollte passen.Optionale, genauere Prüfung für Freude der Unix-Kommandozeile
dd if=/dev/zero of=/dev/sda
… und nach ein paar Sekunden ist das System zumindest unbrauchbar. Oder bei SSDs:
blkdiscard -s /dev/sda
dd if=/dev/urandom of=/dev/sda
… und laaaange warten
Bis Kernel 4.5 ist es möglich, dass durch das Löschen der Dateien unter /sys/firmware/efi/efivars die UEFI-Firmware beschädigt wird und der Rechner nicht mehr booten kann.
Daher vorsichtig sein mit
rm -rf /…
Mehr dazu bei heise und im entsprechenden Kernel-Patch
Rettungssystem booten (im Linuxhotel-Netz: PXE-Boot und debian11live
eingeben)
IDs der Physical Volumes herausfinden:
less sicherung.vg
Physical Volumes anlegen:
pvcreate -ff --zero y --restorefile ~/sicherung.vg --uuid xxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx /dev/sdaX ...
Name der Volume Group herausfinden:
less sicherung.vg
Volume Group und Logical Volumes wiederherstellen:
vgcfgrestore -f ~/sicherung.vg centos_notebook17 vgchange -a y
LVM 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 mit mkfs.*
gemäß etc/fstab
aus dem Backup anlegen. Dabei wenn nötig die Dateisystem-Einstellungen aus der Sicherung berücksichtigen (UUID, …)
17)
mkfs.ext4 -U xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /dev/sdaX
mkfs.xfs -m uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /dev/sdaX
mkfs.vfat -i xxxxxxxx /dev/sdaX
mkswap -U xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /dev/sdaX
In /mnt/backup/dateien/etc/fstab
aufgeführte Mountpoints mit mkdir
anlegen und Dateisysteme mit mount
einhängen: 22)
23)
mkdir /tmp/system mount /dev/sdaX /tmp/system
mkdir /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 …
rsync -aSH --acls --xattrs --numeric-ids --del --rsync-path="sudo rsync" user@server:/mnt/backup/dateien/ /tmp/system
mount --rbind /dev /tmp/system/dev mount --rbind /proc /tmp/system/proc mount --rbind /sys /tmp/system/sys mount --rbind /run /tmp/system/run
(nur bei UEFI-Systemen)
mount -o rw,remount /tmp/system/sys/firmware/efi/efivars
oder (falls /tmp/system/sys/firmware/efi/efivars
kein mountpoint ist)
mount -t efivarfs efivarfs /tmp/system/sys/firmware/efi/efivars
chroot /tmp/system /bin/bash
Debian / Ubuntu:
grub-install
SuSE (ab 15.4):
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
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
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"
blkid efibootmgr -v
(nur bei BIOS-Systemen)
chroot /tmp/system /bin/bash
grub-install /dev/sda update-grub2
grub2-install /dev/sda update-bootloader --refresh
grub2-install /dev/sda grub2-mkconfig > /boot/grub2/grub.cfg
grub2-install /dev/sda grub-mkconfig > /boot/grub/grub.cfg
Grub in den MBR schreiben:
grub > root (hd0,0) > setup (hd0) > quit
oder mit
grub-install --recheck --no-floppy hd0
chroot-Umgebung (z.B. mit Strg+d
) verlassen und
reboot
komplettes Rebuild Bootmanager UEFI+Rocky/Alma/Red Hat 8
Je nach dem wie sich die Hardware geändert hat, sind folgende Bereiche anzupassen:
Wenn die neue Festplatte größer als 2TB ist, dann GPT als Format für die Partitionstabelle verwenden.
Wenn Linux von der Festplatte auch booten soll, dann braucht Grub vor der ersten Partition etwas Platz. Die erste Partition sollte daher - wie heute üblich - bei Block 2048 (= 1MiB ≈ 1,05MB) starten. Alternativ kann man diesen unpartitionierten Bereich mit einer BIOS Boot Partition z.B. von Block 34 bis Block 2047 vor Veränderungen schützen.
Bei Debian mit UEFI anpassen: /boot/efi/EFI/debian/grub.cfg
/boot/grub/menu.lst
:
Neue Partitionsnummern beachten, wichtig sind z.B.
root
) in Grub-Terminologie/boot/vmlinuz*
oder /vmlinuz*
)root= …
)
/boot/grub/grub.cfg
: (sollte automatisch über update-grub2
erstellt werden)
Neue Partitionsnummern beachten, wichtig sind z.B.
root
) in Grub-Terminologie/boot/vmlinuz*
oder /vmlinuz*
)root= …
)Um ein (ehemaliges) BIOS System auf einer UEFI Hardware wieder herzustellen braucht man
/boot/efi
, für den Linux Bootloader Grub allein reicht eine Größe von wenigen MByte. Wenn auch der Linux Kernel und/oder Windows auch drauf soll deutlich größer (500MB?). grub-efi
, grub-efi-amd64-bin
und efibootmgr
installieren. Dann grub-install
+ update-grub
ausführen. grub2-efi
, grub2-efi-x64-modules
und efibootmgr
installieren. Dann grub-install
+ update-grub
grub2-x86_64-efi
und efibootmgr
installieren. Dann grub-install
+ update-bootloader
ausführen.
/etc/fstab
:
Neue Partitionsnummern, Software-RAID und Logical Volumes beachten
/etc/mtab
:
Neue Partitionsnummern, Software-RAID und Logical Volumes beachten
33)
Je nach Änderung muß eine neue initrd erzeugt werden und/oder die bei Booten geladenen Module müssen überarbeitet werden
in der chroot-Umgebung
dracut --hostonly --persistent-policy 'by-uuid' --force /boot/initramfs-4.18.0-80.11.2.el8_0.x86_64.img 4.18.0-80.11.2.el8_0.x86_64
in der chroot-Umgebung
add_drivers+=" xfs "
dracut --force /boot/initrd-4.4.87-18.29-default 4.4.87-18.29-default
in der chroot-Umgebung
mkinitrd --force /boot/initramfs-2.6.32-220.el6.x86_64.img 2.6.32-220.el6.x86_64
Gerätenamen in /etc/udev/rules.d
anpassen
tar cz --numeric-owner --sparse --xattrs --acls --directory /mnt/system . | ssh nutzer@server "cat > /mnt/backup/sicherung.tgz"
ssh nutzer@server 'cat /mnt/backup/sicherung.tgz' | tar xz --numeric-owner --sparse --xattrs --acls --xattrs-include='*' --directory /tmp/system
cd /mnt/system find -xdev -depth -print0 | cpio -o0 --sparse --format=crc | bzip2 | ssh nutzer@server 'cat > /mnt/backup/sicherung.cpio.bz2'
cd /tmp/system ssh nutzer@server 'cat /mnt/backup/sicherung.cpio.bz2' | bunzip2 | cpio -dumin --sparse
Auf lokale Platte:
rsync -a --hard-links --sparse --acls --xattrs --numeric-ids --del / /mnt/usbdisk/root/
Übers Netz via ssh:
rsync -a --hard-links --sparse --acls --xattrs --numeric-ids --del / server:/mnt/backup/dateien
Übers Netz via rsyncd: 35)
rsync -a --hard-links --sparse --acls --xattrs --numeric-ids --del / server::/backup/dateien/
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
Seit Kernel 2.6 und der Einführung von udev haben Linux Distributionen das Verzeichnis /dev
von einem temporären Dateisystem überdeckt. Linux benötigt diese überdeckten Dateien aber beim Booten. Neuere Distributionen (RHEL / CentOS 6, …) tun das nicht mehr.
Lösungswege:
/dev
explizit angeben. Die wichtigsten Gerätedateien sollten auch darin enthalten sein.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
Diese Anleitung beschreibt die Sicherung und Wiederherstellung eines Suse Linux Systems mit BTRFS Dateisystem.
Getestet wurde diese Anleitung auf einem Suse Leap 15.x im Dezember 2022 auf einem Tuxedo Laptop mit NVME Speicher.
btrfs send
Befehl, um die Daten via SSH auf ein entferntes System zu sichern.btrfs subvol create .backup
/.snapshots
) als Read-Only Volume vorliegen:btrfs subvol list / btrfs subvol snap -r / .backup/root-fs btrfs subvol snap -r /usr/local .backup/usr-local btrfs subvol snap -r /tmp .backup/tmp ... ls -l /.backup
/ /home /opt /srv /var /root /usr/local /tmp /boot/grub2/x86_64-efi /boot/grub2/i386-pc
btrfs send
und über SSH (komprimiert) auf einen entfernten Rechner übertragen. Das Dateisystem auf dem Zielsystem muss genügend freien Speicher aufweisen um das Backup aufzunehmen. Der erste Parameter für den „ls“ Befehl ist ein Eins „1“, kein „l“ (kleines Ell)!ls -1 -d /.backup/* | xargs btrfs send | ssh -C nutzerXX@192.168.1.2XX "cat > notebookXX.btrfs"
btrfs subvol delete /.backup/root-fs btrfs subvol delete /.backup/usr-local btrfs subvol delete /.backup/srv ... btrfs subvol delete /.backup
rm -rf /usr
snapper
) ist die Logik des Boot-Loaders Grub2 und die Skripte innerhalb der Init-Ramdisk initrd
komplexer als bei anderen Linux Varianten (z.B. Debian). Hat die Partitions-Tabelle, der Boot-Record des Speichers oder die EFI-Partition Schaden genommen, so wird empfohlen erst mittels eines Suse-Installations-Mediums ein minimales frisches Suse-System zu installieren, und danach das BTRFS-Root-Dateisystem nach dieser Anleitung aus dem Rettungs-Linux zu ersetzen./dev/sda3
statt /dev/nvme0n1p3
)mkfs.btrfs -f /dev/nvme0n1p3
/mnt
einhängenmount /dev/nvme0n1p3 /mnt
btrfs subvol create /mnt/.restore
ssh nutzerXX@192.168.1.2XX "cat notebookXX.btrfs" | btrfs receive /mnt/.restore
btrfs subvol snap /mnt/.restore/tmp /mnt/tmp btrfs subvol snap /mnt/.restore/root-fs /mnt/root-fs btrfs subvol snap /mnt/.restore/usr-local /mnt/usr-local ...
btrfs subvol create /mnt/snapshots
btrfs subvol list /mnt
btrfs subvol set-default <id> /mnt
/mnt
aushängenumount /mnt
mount /dev/nvme0n1p3 /mnt
mount --rbind /dev /mnt/dev mount --rbind /sys /mnt/sys mount --rbind /proc /mnt/proc
chroot /mnt
/etc/fstab
anpassensubvol=/@/tmp
wird subvol=tmp
)mount -a
/dev/nvme0n1p3 / btrfs defaults 0 0 /dev/nvme0n1p3 /.snapshots btrfs subid=279 0 0 /dev/nvme0n1p3 /var btrfs subvol=var 0 0 /dev/nvme0n1p3 /usr/local btrfs subvol=usr-local 0 0 /dev/nvme0n1p3 /tmp btrfs subvol=tmp 0 0 /dev/nvme0n1p3 /srv btrfs subvol=srv 0 0 /dev/nvme0n1p3 /root btrfs subvol=root 0 0 /dev/nvme0n1p3 /opt btrfs subvol=opt 0 0 /dev/nvme0n1p3 /home btrfs subvol=home 0 0 /dev/nvme0n1p3 /boot/grub2/x86_64-efi btrfs subvol=x86_64-efi 0 0 /dev/nvme0n1p3 /boot/grub2/i386-pc btrfs subvol=i386-pc 0 0 /dev/nvme0n1p1 /boot/efi vfat rw 0 2 /dev/nvme0n1p2 none swap sw 0 0
initrd
neu erstellenmkinitrd
grub2-install
grub2-mkconfig -o /boot/grub2/grub.cfg
exit
reboot
PermitRootLogin yes
fdisk -l -o device,size,type,uuid /dev/sda > sicherung.fdiskoder
parted /dev/sda print > sicherung.partedMehr zur Vorgehensweise siehe Partitionierung.
/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 ähnlichrsync
die Option -x
bzw. –one-file-system
nutzen und die entsprechenden Mountpoints einzeln angeben %sudo ALL=(ALL) NOPASSWD: /usr/bin/rsync
progress
installieren und progress -wm
ausführen während rsync läuft. echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-triggerSiehe sysctl
echo 1 > /proc/sys/vm/drop_caches
sicherung.parted
und/oder gemäß etc/fstab
aus dem Backup wie in Partitionierung beschrieben anlegen
Typ der Partitionstabelle (gpt
oder msdos
) beachten. blkid
im Format UUID="066B-5CE0"
ausgegeben wurde muss mkfs.vfat
mit 066B5CE0
(also ohne Minus) übergeben werden/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 ähnlichrpm -qa | xargs rpm --setpermsTodo: debian?
mount –bind
gearbeitet hat, schon minimal befüllt. Kann man also weglassen, aber wenn grub meckert, sollte man das versuchen! mount --bind /dev /tmp/system/dev mount --bind /dev/pts /tmp/system/dev/pts mount --bind /proc /tmp/system/proc mount --bind /sys /tmp/system/sys mount --bind /run /tmp/system/run
000f
ist hier nur ein Beispiel für einen veralteten Eintrag ls /boot/efi/EFI/und der Datei
sicherung.efivars
setzen:
efi_label='Name der Distribution' distro='DISTRIBUTION' boot_device='/dev/sda' esp_partition_id=2 efibootmgr --create --disk "$boot_device" --part "$esp_partition_id" --label 'UEFI OS' --loader '\EFI\BOOT\BOOTX64.EFI' efibootmgr --create --disk "$boot_device" --part "$esp_partition_id" --label "$efi_label" --loader "\\EFI\\$distro\\SHIMX64.EFI"=== Grub2 konfigurieren === In CentOS 8 BLSCFG abschalten:
… GRUB_ENABLE_BLSCFG=false …
grub2-mkconfig -o /boot/efi/EFI/$distro/grub.cfg== Debian, Ubuntu ==
dpkg-reconfigure grub-efi-amd64oder
update-grub2
parted /dev/disk set partition-number bios_grub onIf you are using gdisk, set the partition type to ‘0xEF02’. With partitioning programs that require setting the GUID directly, it should be ‘21686148-6449-6e6f-744e656564454649’.
/etc/mtab
auch einfach löschen