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:
# 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
# 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>
#!/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
}
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:
# 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:
# 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:
# 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:
# apt install openssh-server
# passwd
# service restart ssh
## from the backup VPS
# rsync -arxz backup.d/* root@target:/mnt/
## from the backup VPS
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
## from the backup VPS
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
## from the backup VPS
# scp list_of_symlinks.txt root@target:/mnt/root/
## 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:
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount /dev/vda2 /mnt/boot
# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
# apt install grub-pc
# update-initramfs -u -k all
## this is /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
# 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:
# exit # Verlassen des rpool chroot
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/boot
# umount /mnt
# zpool export -a
# reboot
Weitere Artikel lesen