keine passenden Dienste gefunden
Installation von ZFS auf dem Root-Verzeichnis in einem laufenden VPS
Diese Anleitung erklärt, wie ZFS als Root-Dateisystem auf einem VPS installiert wird, der bereits eine Linux-Installation enthält, ohne dabei Datenverlust zu verursachen. Der VPS wird eine kleine EXT4-Boot-Partition für GRUB2 mit dem Kernel und der Initrd haben sowie einen großen ZFS-Pool, der auf dem Root-Verzeichnis eingehängt ist und bei dem die Kompression aktiviert ist. Die meisten Befehle werden von einem Live-CD-Image ausgeführt, und es wird eine Problemumgehung gezeigt, falls der VPS das Einhängen von ISO-Images nicht unterstützt.
- Inhaltsverzeichnis:
- 1. Sichern der Daten
- 2. Booten eines Live-OS-Images
- 3. Installation von ZFS in der Live-OS-Umgebung
- 4. Partitionierung der VPS-Festplatte
- 5. Installation von ZFS auf der VPS-Festplatte
- 6. Wiederherstellung des Backups auf dem neuen ZFS-Root-Dateisystem
- 7. GRUB2 installieren
- 8. In den ZFS-Root-Pool booten
- Schritt 1: Sichern Sie die Daten
-
Wenn Sie einen zweiten VPS oder einen Heimcomputer mit genügend Speicherplatz für die Sicherungsdaten haben, führen Sie von diesem Computer aus:
wobei target der Hostname des VPS ist, der konvertiert wird. Dies kopiert das gesamte Root-Dateisystem über SSH auf den Sicherungscomputer, und das Wiederherstellen dieser Sicherung auf dem Ziel-VPS wird später unkompliziert sein. Wenn Sie die Sicherung aufgrund von Platzmangel komprimieren müssen, können Sie alternativ ein komprimiertes TGZ-Archiv erstellen:
# rsync -aqrxz root@target:/ backup.d
Beim Wiederherstellen eines Root-Dateisystems aus einem TAR-Archiv ist es jedoch notwendig, alle Symlinks neu zu erstellen, deren Ziele absolute Pfadnamen haben, da TAR ihre Ziele in relative Pfadnamen umwandelt. Daher ist die Verwendung von rsync die einfachere Alternative. Wie das TAR-Archiv korrekt wiederhergestellt wird, wird später gezeigt.# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
- Schritt 2: Starten Sie ein Live-OS-Image
-
Die Umstellung auf ZFS wird von einem Live-CD-Betriebssystem aus durchgeführt. Abhängig davon, wie leistungsfähig Ihr VPS-Kontrollpanel ist, könnte bereits ein Live-OS-Image zum Starten bereitstehen. Alternativ können Sie ein Debian-Live-ISO von der Debian-Spiegelung herunterladen und es in Ihr VPS-Kontrollpanel hochladen, dann starten Sie das ISO von dort aus; dies funktioniert auch dann gut, wenn Ihr VPS eine andere Distribution ausführt. Achten Sie darauf, ein Live-OS-ISO-Image zu verwenden, kein Installations-ISO, da Installationsimages apt nicht enthalten und die notwendige Software nicht in der Live-Umgebung installieren können. Wenn Ihr VPS-Kontrollpanel das Starten von einem benutzerbereitgestellten ISO-Image unterstützt, springen Sie zu Schritt 3, andernfalls können Sie das heruntergeladene ISO immer noch starten, indem Sie eine Swap-Partition, falls vorhanden, in EXT4 umwandeln und das ISO in diesem zurückgewonnenen Speicherplatz speichern, dann kann GRUB2 so konfiguriert werden, dass es von diesem ISO startet. Dies geschieht wie folgt:
Diese VPS verfügt über eine 2GB große Swap-Partition in /dev/vda2, die groß genug ist, um das ISO zu speichern. Erstellen Sie das EXT4-Dateisystem, mounten Sie es und laden Sie das ISO darauf herunter:
# fdisk --list /dev/vda
Disk /dev/vda: 35 GiB, 37580963840 bytes, 73400320 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x495b5ce4
Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 69203583 69201536 33G 83 Linux
/dev/vda2 69203584 73397887 4194304 2G 82 Linux swap
Anschließend weisen Sie GRUB2 an, von diesem ISO zu booten; bearbeiten Sie /etc/grub.d/40_custom wie folgt:# swapoff /dev/vda2 # Swap-Partition deaktivieren
# mkfs.ext4 /dev/vda2 # EXT4-Dateisystem erstellen
# mount /dev/vda2 /mnt # Den freigegebenen Speicherplatz mounten
# mkdir /mnt/images/
# wget -O /mnt/images/image_file.iso <image_URL>
und wenden Sie die Konfiguration mit#!/bin/sh
exec tail -n +3 $0
# Diese Datei bietet eine einfache Möglichkeit, benutzerdefinierte Menüeinträge hinzuzufügen. Geben Sie einfach die
# Menüeinträge ein, die Sie hinzufügen möchten, nach diesem Kommentar. Achten Sie darauf, die Zeile
# 'exec tail' oben nicht zu ändern.
menuentry "Live ISO" {
set ISOFile="/images/image_file.iso"
loopback loop (hd0,2)$ISOFile
linux (loop)/live/vmlinuz boot=live findiso=$ISOFile
initrd (loop)/live/initrd.img
}
an. Wenn Sie den VPS neu starten, bietet das GRUB2-Menü die Option, von dem Live-Image zu booten. Fahren Sie von dort aus mit der VNC-Rettungskonsole fort, die vom Anbieter-Kontrollpanel bereitgestellt wird.update-grub2
- Schritt 3: Installieren Sie ZFS in der Live-OS-Umgebung
-
Booten Sie das Live-OS-Image und greifen Sie auf dessen Terminal zu. Installieren Sie dann die ZFS-Pakete in der Live-OS-Umgebung:
Jetzt verfügt das Live-OS über das ZFS-Kernelmodul und die ZFS-Dienstprogramme, die zum Formatieren des Root-Dateisystems Ihres VPS erforderlich sind.
# echo deb http://deb.debian.org/debian stretch contrib >> /etc/apt/sources.list
# apt update
# apt install zfs-dkms
# modprobe zfs
- Schritt 4: Partitionieren Sie die VPS-Festplatte
-
Es gibt zwei alternative Szenarien für die Partitionierung der VPS-Festplatte:
- Wenn Sie das Live-ISO in /dev/vda2 gespeichert haben, dürfen Sie diese Partition jetzt nicht ändern, da das Live-System davon abhängt, und es wird keine Partitionierung der VPS-Festplatte vorgenommen. ZFS wird auf der bestehenden /dev/vda2-Partition formatiert, und /dev/vda1 bleibt unverändert und wird später als permanente Boot-Partition für das Speichern des Kernels und des initrd umfunktioniert. Springen Sie zu Schritt 5.
-
Wenn Ihre Live-Umgebung nicht von einer auf der VPS-Festplatte gespeicherten ISO-Datei abhängt, partitionieren Sie die Festplatte neu, indem Sie eine kleine Boot-Partition für GRUB2 und eine große Partition für das ZFS-Root erstellen, die den gesamten verbleibenden Speicherplatz umfasst. Führen Sie fdisk aus, um die folgenden beiden Partitionen zu erstellen:
Erstellen Sie eine primäre Boot-Partition mit einer Größe von 100 MB und markieren Sie sie mit einem Sternchen (*) als bootfähig, mit einer Partitions-ID = 83 (Linux). Sie wird als EXT4 formatiert, um Kompatibilität mit GRUB2 zu gewährleisten, und sie enthält die Boot-Daten. Erstellen Sie dann eine weitere primäre Partition für ZFS mit der ID = bf (Solaris). Schreiben Sie die Änderungen auf die Festplatte und schließen Sie fdisk. Nachdem die Festplatte korrekt partitioniert wurde, können Sie die Boot-Partition formatieren:
# fdisk /dev/vda
Command (m for help): p
Disk /dev/vda: 35 GiB, 37580963840 bytes, 73400320 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x495b5ce4
Device Boot Start End Sectors Size Id Type
/dev/vda1 2048 69203583 69201536 33G bf Solaris
/dev/vda2 * 69203584 73397887 4194304 2G 83 Linux
# mkfs.ext4 /dev/vda2
- Schritt 5: Installieren Sie ZFS auf der VPS-Festplatte
-
Formatieren Sie /dev/vda1 als ZFS-Volume:
Diese Reihe von Optionen wird von der ZFS-Dokumentation für die höchste Kompatibilität mit den neuesten und zukünftigen Festplatten empfohlen. Die Option compression=zstd aktiviert den ZSTD-Kompressionsalgorithmus, der ein höheres Kompressionsverhältnis als das standardmäßige LZ4 aufweist, obwohl Sie compression=lz4 verwenden können, um die CPU-Auslastung zu verringern, wenn Ihr VPS einen hohen Datenträger-I/O hat. Der Pool wird rpool genannt, was der am häufigsten verwendete Name für Root-Pools ist. Wenn dieser Befehl abgeschlossen ist, wird rpool im /mnt-Verzeichnis der Live-Umgebung gemountet, wie durch die Option -R /mnt oben angegeben, aber es wird bei jedem nachfolgenden Boot automatisch auf / gemountet. Das Mounten auf /mnt ist notwendig, um Ihr Backup aus der Live-Umgebung darauf wiederherzustellen.
# zpool create -o ashift=12 \
-O acltype=posixacl -O canmount=on -O compression=zstd \
-O dnodesize=auto -O normalization=formD -O relatime=on -O xattr=sa \
-O mountpoint=/ -R /mnt \
rpool /dev/vda1
- Schritt 6: Das Backup auf das neue ZFS-Root-Dateisystem wiederherstellen
-
Installieren Sie den OpenSSH-Server in der Live-Umgebung, um die Backup-Daten vom Backup-VPS zu empfangen:
Der Einfachheit halber aktivieren Sie PermitRootLogin yes in /etc/ssh/sshd_config der Live-Umgebung, setzen dann ein sicheres Root-Passwort und starten OpenSSH neu:
# apt install openssh-server
und initiieren Sie die Wiederherstellung der Backup-Daten vom Backup-VPS, wodurch der ZFS-Root-Pool, der unter /mnt eingehängt ist, gefüllt wird:# passwd
# service restart ssh
oder falls Sie TAR verwendet haben, um ein Backup-Archiv zu erstellen, stellen Sie es mit folgendem Befehl wieder her:## from the backup VPS
# rsync -arxz backup.d/* root@target:/mnt/
jedoch, wie ich in Schritt 1 geschrieben habe, wandelt TAR beim Extrahieren den Zielpfad von absoluten Symlinks in relative Pfade um; diese Symlinks können wie folgt korrekt wiederhergestellt werden. Beachten Sie, dass diese Wiederherstellung nicht notwendig ist, wenn Sie TAR nicht verwendet haben, um das Root-Dateisystem zu sichern. Listen Sie vom Backup-VPS alle im Archiv enthaltenen Symlinks auf:## from the backup VPS
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
dann kopieren Sie die Liste auf den Ziel-VPS nach /mnt, das nun das aus dem Backup wiederhergestellte Root-Dateisystem enthält:## from the backup VPS
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
Führen Sie vom Ziel-VPS aus ein chroot in /mnt durch und führen Sie dieses Bash-Skript aus, um alle absoluten Symlinks wiederherzustellen:## from the backup VPS
# scp list_of_symlinks.txt root@target:/mnt/root/
Ihr Root-Dateisystem ist nun vollständig aus dem Backup wiederhergestellt und kann gebootet werden, aber Sie benötigen zuerst einen funktionierenden Bootloader.## from the chroot environment
while read -r row; do
src=$(echo "$row" | grep -Po '(?<=[0-9]{2}:[0-9]{2} )[^ ]+')
tgt=$(echo "$row" | grep -Po '(?<= -> ).+')
echo "linking: $src -> $tgt"
ln -fs "$tgt" "$src"
done </root/list_of_symlinks.txt
- Schritt 7: GRUB2 installieren
-
Wenn Sie sich im chroot befinden, verlassen Sie es und kehren Sie zur Live-Umgebung zurück. Binden Sie dann die virtuellen Dateisysteme an /mnt und mounten Sie die Boot-Partition:
Sie können wählen, vorhandene Inhalte von /mnt/boot/ auf die neue Boot-Partition zu kopieren. Chroot in das Root-Pool und installieren Sie von dort aus den ZFS-Initramfs-Hook, das ZFS-Kernelmodul und die ZFS-Userspace-Tools, die zur Generierung des Initrd erforderlich sind:
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount /dev/vda2 /mnt/boot
Installieren Sie dann das GRUB2-Paket:# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
Bearbeiten Sie /etc/default/grub, um den ZFS-Pool als Root-Gerät festzulegen, indem Sie die Variable GRUB_CMDLINE_LINUX ändern:# apt install grub-pc
# update-initramfs -u -k all
Dann wenden Sie die Konfiguration an:## this is /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
Und installieren Sie schließlich GRUB2 im MBR:# update-grub
# grub-install /dev/vda
- Schritt 8: Booten in den ZFS-Root-Pool
-
Das System ist bereit, vollständig aus dem Backup wiederhergestellt und kann gebootet werden. Verlassen Sie das chroot und hängen Sie alle virtuellen Dateisysteme aus, dann exportieren Sie den ZFS-Root-Pool:
Sie können nun das ISO-Image aus dem VPS-Kontrollpanel entfernen, falls Sie diese Option verwendet haben, oder das ISO von der Festplatte löschen und das System in den ZFS-Root-Pool neu starten:
# exit # Verlassen des rpool chroot
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/boot
# umount /mnt
# zpool export -a
Die Konvertierung des VPS-Root-Dateisystems von EXT4 zu ZFS ist abgeschlossen, und der VPS wird wie gewohnt in Ihr altes installiertes System booten.# reboot
Weitere Artikel lesen
