geen overeenkomende diensten gevonden
ZFS installeren op root in een actieve VPS
Deze handleiding legt uit hoe u ZFS kunt installeren als het root-bestandssysteem van een VPS met een bestaande Linux-installatie zonder gegevensverlies te veroorzaken. De VPS krijgt een kleine EXT4-bootpartitie voor GRUB2 met de kernel en initrd, en een grote ZFS-pool die op root is gekoppeld met ingeschakelde compressie. De meeste opdrachten worden uitgevoerd vanuit een live CD-image en er wordt een workaround getoond als de VPS het koppelen van ISO-images niet ondersteunt.
- Index:
- 1. De gegevens back-uppen
- 2. Een live OS-image opstarten
- 3. ZFS installeren in de live OS-omgeving
- 4. De VPS-schijf partitioneren
- 5. Installeer ZFS op de VPS-schijf
- 6. Herstel de back-up naar het nieuwe ZFS-rootbestandsysteem
- 7. Installeer GRUB2
- 8. Start op vanaf de ZFS-rootpool
- Stap 1: Maak een back-up van de gegevens
-
Als u een tweede VPS of thuiscomputer heeft met voldoende ruimte om de back-upgegevens op te slaan, voer dan vanaf die computer het volgende uit:
waarbij target de hostname is van de VPS die wordt geconverteerd. Hiermee wordt het volledige rootbestandsysteem via SSH naar de back-upmachine gekopieerd, en het later herstellen van deze back-up op de doel-VPS zal eenvoudig zijn. Als u de back-up moet comprimeren vanwege een gebrek aan ruimte, kunt u in plaats daarvan een gecomprimeerd TGZ-archief maken:
# rsync -aqrxz root@target:/ backup.d
Bij het herstellen van een root-bestandssysteem vanuit een TAR-archief is het echter nodig om alle symlinks waarvan de doelen absolute padnamen hebben opnieuw aan te maken, omdat TAR hun doelen omzet in relatieve padnamen; het gebruik van rsync is daarom het eenvoudigere alternatief. Hoe het TAR-archief correct hersteld kan worden, wordt later beschreven.# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
- Stap 2: Start een live OS-image
-
De conversie naar ZFS wordt uitgevoerd vanuit een live CD-besturingssysteem. Afhankelijk van de mogelijkheden van uw VPS-controlepaneel is er mogelijk al een live OS-image klaar om te starten. Als alternatief kunt u een Debian live ISO downloaden van de Debian mirror en deze uploaden naar uw VPS-controlepaneel om de ISO vervolgens vanaf daar te starten; dit werkt prima, zelfs als uw VPS een andere distributie gebruikt. Let erop dat u een live OS ISO-image gebruikt en geen installatie-ISO, omdat installatie-images geen apt hebben en niet in staat zijn om de benodigde software in de live-omgeving te installeren. Als uw VPS-controlepaneel het starten vanaf een door de gebruiker geleverde ISO-image ondersteunt, ga dan direct naar Stap 3. Anders kunt u de gedownloade ISO nog steeds starten door een swap-partitie, indien aanwezig, om te zetten naar EXT4 en de ISO in die vrijgemaakte opslagruimte op te slaan, waarna GRUB2 kan worden geconfigureerd om vanaf die ISO te starten. Dit gebeurt als volgt:
Deze VPS heeft een swap-partitie van 2 GB in /dev/vda2 die groot genoeg is om de ISO op te slaan. Maak het EXT4-bestandssysteem aan, koppel het en download de ISO naar deze partitie:
# 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
instrueer GRUB2 vervolgens om vanaf deze ISO op te starten; bewerk /etc/grub.d/40_custom als volgt:# swapoff /dev/vda2 # schakel swap-partitie uit
# mkfs.ext4 /dev/vda2 # maak EXT4-bestandssysteem aan
# mount /dev/vda2 /mnt # koppel de teruggewonnen ruimte
# mkdir /mnt/images/
# wget -O /mnt/images/image_file.iso <image_URL>
en pas de configuratie toe met#!/bin/sh
exec tail -n +3 $0
# Dit bestand biedt een eenvoudige manier om aangepaste menu-items toe te voegen. Typ simpelweg de
# menu-items die u wilt toevoegen na deze opmerking. Pas op dat u
# de 'exec tail'-regel hierboven niet wijzigt.
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
}
Wanneer u de VPS opnieuw opstart, biedt het GRUB2-menu de optie om vanaf het live-image te booten. Ga vanaf daar verder met behulp van de VNC-rescueconsole die wordt aangeboden via het controlepaneel van de provider.update-grub2
- Stap 3: ZFS installeren in de live OS-omgeving
-
Boot het live OS-image en open de terminal. Installeer vervolgens de ZFS-pakketten in de live OS-omgeving:
Nu beschikt het live OS over de ZFS-kernelmodule en de ZFS-hulpprogramma's die nodig zijn om het root-bestandssysteem van uw VPS te formatteren.
# echo deb http://deb.debian.org/debian stretch contrib >> /etc/apt/sources.list
# apt update
# apt install zfs-dkms
# modprobe zfs
- Stap 4: Partitioneer de VPS-schijf
-
Er zijn twee alternatieve scenario's voor het partitioneren van de VPS-schijf:
- Als u de live ISO in /dev/vda2 hebt opgeslagen, mag u die partitie nu niet wijzigen omdat het live-systeem ervan afhankelijk is, en er zal helemaal geen partitionering van de VPS-schijf worden uitgevoerd. ZFS wordt geformatteerd op de bestaande /dev/vda2-partitie, en /dev/vda1 blijft ongewijzigd en wordt later opnieuw gebruikt als uw permanente bootpartitie voor het opslaan van de kernel en initrd. Ga naar Stap 5.
-
Als uw live-omgeving niet afhankelijk is van een ISO-bestand dat op de VPS-schijf is opgeslagen, partitioneer de schijf dan opnieuw door één kleine bootpartitie voor GRUB2 aan te maken en één grote partitie voor de ZFS-root die over alle resterende schijfruimte loopt. Voer fdisk uit om de volgende twee partities aan te maken:
Maak een primaire bootpartitie van 100MB aan en markeer deze als opstartbaar met een asterisk (*), met een partitie-ID = 83 (Linux). Deze wordt geformatteerd als EXT4 voor compatibiliteit met GRUB2 en bevat de bootgegevens. Maak vervolgens een andere primaire partitie aan voor ZFS, met ID = bf (Solaris). Schrijf de wijzigingen naar de schijf en sluit fdisk. Nu de schijf correct is gepartitioneerd, kunt u de bootpartitie formatteren:
# 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
- Stap 5: ZFS installeren op de VPS-schijf
-
Formatteer /dev/vda1 als een ZFS-volume:
Deze set opties wordt aanbevolen door de ZFS-documentatie voor de hoogste compatibiliteit met de nieuwste en toekomstige schijven. De optie compression=zstd activeert het ZSTD-compressiealgoritme, dat een hogere compressieratio heeft dan de standaard LZ4, hoewel u compression=lz4 kunt gebruiken om het CPU-gebruik te verminderen als uw VPS een hoge schijf-I/O heeft. De pool heet rpool, wat de meest gebruikte naam is voor root-pools. Wanneer dit commando is voltooid, wordt rpool gekoppeld aan de /mnt-directory van de live-omgeving, zoals gespecificeerd door de bovenstaande optie -R /mnt, maar het zal bij elke volgende boot automatisch worden gekoppeld aan /. Het koppelen aan /mnt is noodzakelijk om uw back-up vanuit de live-omgeving naar de pool te herstellen.
# 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
- Stap 6: Herstel de back-up naar het nieuwe ZFS root-bestandssysteem
-
Installeer de OpenSSH-server in de live-omgeving om de back-upgegevens van de back-up-VPS te ontvangen:
Schakel voor de eenvoud PermitRootLogin yes in /etc/ssh/sshd_config van de live-omgeving in, stel vervolgens een veilig root-wachtwoord in en start OpenSSH opnieuw op:
# apt install openssh-server
en start het herstel van de back-upgegevens van de back-up-VPS, waardoor de ZFS-rootpool die is gekoppeld aan /mnt wordt gevuld:# passwd
# service restart ssh
of als u TAR hebt gebruikt om een back-uparchief te maken, herstel het dan met:## from the backup VPS
# rsync -arxz backup.d/* root@target:/mnt/
zoals ik echter schreef in Stap 1, zet TAR bij extractie het doelpad van absolute symlinks om in relatieve paden; deze symlinks kunnen allemaal als volgt correct worden hersteld. Let op: dit herstel is niet nodig als u TAR niet heeft gebruikt om het root-bestandssysteem te back-uppen. Maak vanaf de back-up VPS een lijst van alle symlinks in het archief:## from the backup VPS
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
kopieer vervolgens de lijst naar de doel-VPS in /mnt, waarin nu het root-bestandssysteem staat dat is hersteld vanuit de back-up:## from the backup VPS
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
Vanaf de doel-VPS, chroot naar /mnt en voer dit Bash-script uit om alle absolute symbolische koppelingen te herstellen:## from the backup VPS
# scp list_of_symlinks.txt root@target:/mnt/root/
Uw root-bestandssysteem is nu volledig hersteld vanuit de back-up en kan worden opgestart, maar u heeft eerst een functionerende bootloader nodig.## 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
- Stap 7: GRUB2 installeren
-
Als u zich in de chroot bevindt, verlaat deze dan en keer terug naar de live-omgeving. Bind vervolgens de virtuele bestandssystemen aan /mnt en mount de boot-partitie:
U kunt ervoor kiezen om eventuele reeds bestaande inhoud van /mnt/boot/ naar de nieuwe boot-partitie te kopiëren. Chroot in de rootpool en installeer vanuit daar de ZFS initramfs-hook, de ZFS-kernelmodule en de ZFS-userspace-tools die nodig zijn om de initrd te genereren:
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount /dev/vda2 /mnt/boot
installeer vervolgens het GRUB2-pakket:# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
bewerk /etc/default/grub om de ZFS-pool als root-apparaat in te stellen door de variabele GRUB_CMDLINE_LINUX te wijzigen:# apt install grub-pc
# update-initramfs -u -k all
pas vervolgens de configuratie toe:## this is /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
en installeer tot slot GRUB2 in de MBR:# update-grub
# grub-install /dev/vda
- Stap 8: Start op vanuit de ZFS root pool
-
Het systeem is gereed, volledig hersteld vanuit de back-up, en kan worden opgestart. Verlaat de chroot en unmount alle virtuele bestandssystemen, exporteer vervolgens de ZFS root pool:
U kunt nu het ISO-bestand verwijderen uit het VPS-controlepaneel, indien u deze optie heeft gebruikt, of het ISO-bestand van de harde schijf verwijderen en het systeem opnieuw opstarten in de ZFS-rootpool:
# exit # verlaat de rpool chroot
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/boot
# umount /mnt
# zpool export -a
De conversie van het VPS-rootbestandssysteem van EXT4 naar ZFS is voltooid en de VPS zal als gewoonlijk opstarten in uw eerder geïnstalleerde systeem.# reboot
Lees meer artikelen
