nie znaleziono pasujących usług
Instalowanie ZFS na partycji root w działającym VPS
Ten przewodnik wyjaśnia, jak zainstalować ZFS jako system plików root na VPS, który zawiera istniejącą instalację systemu Linux, bez utraty danych. VPS będzie miał małą partycję rozruchową EXT4 dla GRUB2 z jądrem i initrd oraz dużą pulę ZFS zamontowaną na root z włączoną kompresją. Większość poleceń będzie wydawana z obrazu live CD, a także zostanie pokazane obejście, jeśli VPS nie obsługuje montowania obrazów ISO.
- Spis treści:
- 1. Wykonaj kopię zapasową danych
- 2. Uruchom obraz live OS
- 3. Zainstaluj ZFS w środowisku live OS
- 4. Podziel dysk VPS na partycje
- 5. Zainstaluj ZFS na dysku VPS
- 6. Przywróć kopię zapasową do nowego systemu plików root ZFS
- 7. Zainstaluj GRUB2
- 8. Uruchom system z puli root ZFS
- Krok 1: Wykonaj kopię zapasową danych
-
Jeśli masz drugi VPS lub komputer domowy z wystarczającą ilością miejsca do przechowywania kopii zapasowej, uruchom z tego komputera:
gdzie target to nazwa hosta VPS, który jest konwertowany. Spowoduje to skopiowanie całego systemu plików root przez SSH na maszynę kopii zapasowej, a przywrócenie tej kopii na docelowy VPS później będzie proste. Jeśli musisz skompresować kopię zapasową z powodu braku miejsca, możesz alternatywnie utworzyć skompresowane archiwum TGZ:
# rsync -aqrxz root@target:/ backup.d
Jednak przy przywracaniu systemu plików root z archiwum TAR konieczne będzie odtworzenie wszystkich dowiązań symbolicznych, których cele mają bezwzględne ścieżki, ponieważ TAR konwertuje ich cele na względne ścieżki, więc użycie rsync jest prostszą alternatywą. Później zostanie pokazane, jak prawidłowo przywrócić archiwum TAR.# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
- Krok 2: Uruchom system operacyjny z obrazu live
-
Konwersja na ZFS zostanie przeprowadzona z systemu operacyjnego uruchomionego z płyty live. W zależności od możliwości panelu sterowania Twojego VPS, może on już mieć gotowy do uruchomienia obraz systemu live. Alternatywnie, możesz pobrać obraz ISO Debian live z lustra Debiana i przesłać go do panelu sterowania swojego VPS, a następnie uruchomić ISO z tego miejsca; to zadziała dobrze, nawet jeśli Twój VPS działa na innej dystrybucji. Upewnij się, że używasz obrazu ISO systemu live, a nie obrazu instalacyjnego, ponieważ obrazy instalacyjne nie zawierają apt i nie są w stanie zainstalować niezbędnego oprogramowania w środowisku live. Jeśli panel sterowania Twojego VPS obsługuje uruchamianie z obrazu ISO dostarczonego przez użytkownika, przejdź do Kroku 3, w przeciwnym razie nadal możesz uruchomić pobrany ISO, konwertując partycję wymiany, jeśli istnieje, na EXT4 i przechowując ISO w tej odzyskanej przestrzeni dyskowej, a następnie skonfigurować GRUB2 do uruchamiania z tego ISO. Odbywa się to w następujący sposób:
Ten VPS ma partycję wymiany o rozmiarze 2GB w /dev/vda2, która jest wystarczająco duża, aby przechowywać ISO. Utwórz system plików EXT4, zamontuj go i pobierz na niego ISO:
# fdisk --list /dev/vda
Dysk /dev/vda: 35 GiB, 37580963840 bajtów, 73400320 sektorów
Jednostki: sektory o rozmiarze 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny): 512 bajtów / 512 bajtów
Rozmiar I/O (minimalny/optymalny): 512 bajtów / 512 bajtów
Typ etykiety dysku: dos
Identyfikator dysku: 0x495b5ce4
Urządzenie Rozruch Start Koniec Sektory Rozmiar Id Typ
/dev/vda1 * 2048 69203583 69201536 33G 83 Linux
/dev/vda2 69203584 73397887 4194304 2G 82 Linux swap
następnie poinstruuj GRUB2, aby uruchamiał się z tego ISO; edytuj /etc/grub.d/40_custom w następujący sposób:# swapoff /dev/vda2 # wyłącz partycję wymiany
# mkfs.ext4 /dev/vda2 # utwórz system plików EXT4
# mount /dev/vda2 /mnt # zamontuj odzyskaną przestrzeń
# mkdir /mnt/images/
# wget -O /mnt/images/image_file.iso <image_URL>
i zastosuj konfigurację za pomocą#!/bin/sh
exec tail -n +3 $0
# Ten plik zapewnia łatwy sposób dodawania niestandardowych wpisów do menu. Po prostu wpisz
# wpisy menu, które chcesz dodać, po tym komentarzu. Uważaj, aby nie zmieniać
# linii 'exec tail' powyżej.
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
}
Po ponownym uruchomieniu VPS, menu GRUB2 zaoferuje opcję uruchomienia z obrazu live. Kontynuuj od tego momentu, korzystając z konsoli ratunkowej VNC dostępnej w panelu sterowania dostawcy.update-grub2
- Krok 3: Zainstaluj ZFS w środowisku live OS
-
Uruchom obraz live OS i uzyskaj dostęp do jego terminala. Następnie zainstaluj pakiety ZFS w środowisku live OS:
Teraz środowisko live OS posiada moduł jądra ZFS oraz narzędzia ZFS wymagane do sformatowania głównego systemu plików Twojego VPS.
# echo deb http://deb.debian.org/debian stretch contrib >> /etc/apt/sources.list
# apt update
# apt install zfs-dkms
# modprobe zfs
- Krok 4: Podziel dysk VPS na partycje
-
Istnieją dwa alternatywne scenariusze partycjonowania dysku VPS:
- Jeśli przechowałeś obraz live ISO w /dev/vda2, nie możesz teraz modyfikować tej partycji, ponieważ system live od niej zależy, i żadne partycjonowanie nie zostanie wykonane na dysku VPS. ZFS zostanie sformatowany na istniejącej partycji /dev/vda2, a /dev/vda1 pozostanie bez zmian i później zostanie przeznaczony jako stała partycja rozruchowa do przechowywania jądra i initrd. Przejdź do Kroku 5.
-
Jeśli Twoje środowisko na żywo nie zależy od pliku ISO przechowywanego na dysku VPS, przeprowadź ponowną partycję dysku, tworząc jedną małą partycję rozruchową dla GRUB2 oraz jedną dużą partycję dla korzenia ZFS, która zajmuje całą pozostałą przestrzeń dyskową. Wykonaj fdisk, aby utworzyć następujące dwie partycje:
Utwórz główną partycję rozruchową o rozmiarze 100MB i oznacz ją jako rozruchową za pomocą gwiazdki (*), z identyfikatorem partycji = 83 (Linux). Będzie ona sformatowana jako EXT4 dla kompatybilności z GRUB2 i będzie zawierać dane rozruchowe. Następnie utwórz kolejną główną partycję dla ZFS, z identyfikatorem = bf (Solaris). Zapisz zmiany na dysku i zamknij fdisk. Teraz, gdy dysk jest prawidłowo podzielony na partycje, możesz sformatować partycję rozruchową:
# 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
- Krok 5: Zainstaluj ZFS na dysku VPS
-
Sformatuj /dev/vda1 jako wolumin ZFS:
Ten zestaw opcji jest zalecany przez dokumentację ZFS dla najwyższej kompatybilności z najnowszymi i przyszłymi dyskami. Opcja compression=zstd włącza algorytm kompresji ZSTD, który ma wyższy współczynnik kompresji niż domyślny LZ4, chociaż możesz użyć compression=lz4, aby zmniejszyć zużycie procesora, jeśli Twój VPS ma wysokie I/O dysku. Pula nazywa się rpool, co jest najczęściej używaną nazwą dla pul głównych. Po zakończeniu tego polecenia, rpool zostanie zamontowany w katalogu /mnt środowiska live, zgodnie z opcją -R /mnt powyżej, ale będzie automatycznie montowany w / przy każdym kolejnym uruchomieniu. Zamontowanie go w /mnt jest konieczne, aby przywrócić na nim kopię zapasową z środowiska live.
# 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
- Krok 6: Przywróć kopię zapasową do nowego systemu plików ZFS root
-
Zainstaluj serwer OpenSSH w środowisku live, aby odebrać dane kopii zapasowej z VPS kopii zapasowej:
Dla uproszczenia, włącz PermitRootLogin yes w /etc/ssh/sshd_config w środowisku live, następnie ustaw bezpieczne hasło roota i zrestartuj OpenSSH:
# apt install openssh-server
i rozpocznij przywracanie danych z kopii zapasowej z VPS-a kopii zapasowej, co wypełni pulę root ZFS zamontowaną na /mnt:# passwd
# service restart ssh
lub jeśli użyłeś TAR-a do utworzenia archiwum kopii zapasowej, przywróć je za pomocą:## z VPS-a kopii zapasowej
# rsync -arxz backup.d/* root@target:/mnt/
jednak jak napisałem w Kroku 1, podczas ekstrakcji TAR konwertuje ścieżkę docelową absolutnych dowiązań symbolicznych na ścieżki względne; te dowiązania symboliczne można prawidłowo przywrócić w następujący sposób. Zauważ, że to przywracanie nie jest konieczne, jeśli nie użyłeś TAR-a do utworzenia kopii zapasowej systemu plików root. Z VPS-a kopii zapasowej, wyświetl listę wszystkich dowiązań symbolicznych zawartych w archiwum:## z VPS-a kopii zapasowej
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
następnie skopiuj listę do docelowego VPS do katalogu /mnt, który teraz zawiera system plików root odtworzony z kopii zapasowej:## z VPS-a kopii zapasowej
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
Z docelowego VPS, chroot do /mnt i wykonaj ten skrypt Bash, aby przywrócić wszystkie bezwzględne dowiązania symboliczne:## z kopii zapasowej VPS
# scp list_of_symlinks.txt root@target:/mnt/root/
Twój system plików root jest teraz w pełni odtworzony z kopii zapasowej i może zostać uruchomiony, ale najpierw potrzebujesz działającego bootloadera.## ze środowiska chroot
while read -r row; do
src=$(echo "$row" | grep -Po '(?<=[0-9]{2}:[0-9]{2} )[^ ]+')
tgt=$(echo "$row" | grep -Po '(?<= -> ).+')
echo "łączenie: $src -> $tgt"
ln -fs "$tgt" "$src"
done </root/list_of_symlinks.txt
- Krok 7: Zainstaluj GRUB2
-
Jeśli jesteś wewnątrz chroot, wyjdź z niego i wróć do środowiska live. Następnie podłącz wirtualne systemy plików do /mnt i zamontuj partycję rozruchową:
Możesz zdecydować się na skopiowanie istniejącej zawartości z /mnt/boot/ do nowej partycji rozruchowej. Przejdź do chroot w puli root, a następnie zainstaluj hak initramfs ZFS, moduł jądra ZFS oraz narzędzia użytkownika ZFS wymagane do wygenerowania initrd:
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount /dev/vda2 /mnt/boot
następnie zainstaluj pakiet GRUB2:# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
edytuj /etc/default/grub, aby ustawić pulę ZFS jako urządzenie główne, modyfikując zmienną GRUB_CMDLINE_LINUX:# apt install grub-pc
# update-initramfs -u -k all
następnie zastosuj konfigurację:## this is /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
i na końcu zainstaluj GRUB2 do MBR:# update-grub
# grub-install /dev/vda
- Krok 8: Uruchom system z głównej puli ZFS
-
System jest gotowy, w pełni przywrócony z kopii zapasowej i może zostać uruchomiony. Wyjdź z chroot i odmontuj wszystkie wirtualne systemy plików, a następnie wyeksportuj główną pulę ZFS:
Możesz teraz usunąć obraz ISO z panelu sterowania VPS, jeśli skorzystałeś z tej opcji, lub usunąć ISO z dysku twardego i zrestartować system w puli głównej ZFS:
# exit # wyjdź z chroot rpool
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/boot
# umount /mnt
# zpool export -a
Konwersja głównego systemu plików VPS z EXT4 na ZFS została zakończona, a VPS uruchomi się w Twoim starym zainstalowanym systemie jak zwykle.# reboot
Przeczytaj więcej artykułów
