eine unabhängige Suchmaschine für VPSs, sortiert nach Preis

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:
# rsync -aqrxz root@target:/ backup.d
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:
# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
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.
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:
# 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
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:
# 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>
Anschließend weisen Sie GRUB2 an, von diesem ISO zu booten; bearbeiten Sie /etc/grub.d/40_custom wie folgt:
#!/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
}
und wenden Sie die Konfiguration mit
update-grub2
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.
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:
# echo deb http://deb.debian.org/debian stretch contrib >> /etc/apt/sources.list
# apt update
# apt install zfs-dkms
# modprobe zfs
Jetzt verfügt das Live-OS über das ZFS-Kernelmodul und die ZFS-Dienstprogramme, die zum Formatieren des Root-Dateisystems Ihres VPS erforderlich sind.
Schritt 4: Partitionieren Sie die VPS-Festplatte
Es gibt zwei alternative Szenarien für die Partitionierung der VPS-Festplatte:
  1. 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.
  2. 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:
    # 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
    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:
    # mkfs.ext4 /dev/vda2
Schritt 5: Installieren Sie ZFS auf der VPS-Festplatte
Formatieren Sie /dev/vda1 als ZFS-Volume:
# 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
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.
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:
# apt install openssh-server
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:
# passwd
# service restart ssh
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:
## from the backup VPS
# rsync -arxz backup.d/* root@target:/mnt/
oder falls Sie TAR verwendet haben, um ein Backup-Archiv zu erstellen, stellen Sie es mit folgendem Befehl wieder her:
## from the backup VPS
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
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
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
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
# scp list_of_symlinks.txt root@target:/mnt/root/
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 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
Ihr Root-Dateisystem ist nun vollständig aus dem Backup wiederhergestellt und kann gebootet werden, aber Sie benötigen zuerst einen funktionierenden Bootloader.
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:
# mount --bind /dev  /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys  /mnt/sys
# mount /dev/vda2 /mnt/boot
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:
# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
Installieren Sie dann das GRUB2-Paket:
# apt install grub-pc
# update-initramfs -u -k all
Bearbeiten Sie /etc/default/grub, um den ZFS-Pool als Root-Gerät festzulegen, indem Sie die Variable GRUB_CMDLINE_LINUX ändern:
## this is /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
Dann wenden Sie die Konfiguration an:
# update-grub
Und installieren Sie schließlich GRUB2 im MBR:
# 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:
# exit # Verlassen des rpool chroot
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/boot
# umount /mnt
# zpool export -a
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:
# reboot
Die Konvertierung des VPS-Root-Dateisystems von EXT4 zu ZFS ist abgeschlossen, und der VPS wird wie gewohnt in Ihr altes installiertes System booten.

Weitere Artikel lesen
Arabisch Bengalisch Chinesisch Deutsch Deutsch Englisch Filipino Indonesisch Japanisch Korean Malaiisch Polnisch Portugiesisch Russisch Spanisch Türkisch Vietnamesisch
Hilfe  –  Index  –  Datenschutzrichtlinie  –  Kontakt  –