walang natagpuang katugmang serbisyo
Pag-install ng ZFS sa Root sa Isang Gumaganang VPS
Ang gabay na ito ay nagpapaliwanag kung paano i-install ang ZFS bilang root filesystem ng isang VPS na mayroon nang Linux installation nang hindi nagdudulot ng pagkawala ng data. Ang VPS ay magkakaroon ng maliit na EXT4 boot partition para sa GRUB2 kasama ang kernel at initrd, at isang malaking ZFS pool na naka-mount sa root na may compression na pinagana. Karamihan sa mga command ay ipapalabas mula sa isang live CD image at ipapakita ang isang workaround kung ang VPS ay hindi sumusuporta sa pag-mount ng ISO images.
- Index:
- 1. I-back up ang data
- 2. Mag-boot ng live OS image
- 3. I-install ang ZFS sa live OS environment
- 4. I-partition ang disk ng VPS
- 5. I-install ang ZFS sa disk ng VPS
- 6. I-restore ang backup sa bagong ZFS root filesystem
- 7. I-install ang GRUB2
- 8. Mag-boot sa ZFS root pool
- Hakbang 1: I-back up ang data
-
Kung mayroon kang pangalawang VPS o home computer na may sapat na espasyo para sa backup data, mula sa loob ng computer na iyon, patakbuhin ang:
kung saan ang target ay ang hostname ng VPS na kino-convert. Kokopyahin nito ang buong root filesystem sa pamamagitan ng SSH papunta sa backup machine, at ang pag-restore ng backup na ito sa target na VPS sa ibang pagkakataon ay magiging diretso. Kung kailangan mong i-compress ang backup dahil sa kakulangan ng espasyo, maaari mong alternatibong gumawa ng compressed TGZ archive:
# rsync -aqrxz root@target:/ backup.d
Gayunpaman, kapag nagre-restore ng root filesystem mula sa TAR archive, kinakailangang muling likhain ang lahat ng symlinks na may absolute pathnames, dahil kinokonvert ng TAR ang kanilang mga target sa relative pathnames, kaya ang paggamit ng rsync ay ang mas simpleng alternatibo. Ipapakita sa ibang pagkakataon kung paano maayos na i-restore ang TAR archive.# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
- Step 2: Mag-boot ng live OS image
-
Ang pag-convert sa ZFS ay gagawin mula sa isang live CD operating system. Depende sa kakayahan ng iyong VPS control panel, maaaring mayroon na itong live OS image na handa nang i-boot. Bilang alternatibo, maaari kang mag-download ng Debian live ISO mula sa Debian mirror at i-upload ito sa iyong VPS control panel, pagkatapos ay i-boot ang ISO mula doon; gagana ito nang maayos kahit na ang iyong VPS ay nagpapatakbo ng ibang distribusyon. Mag-ingat na gumamit ng live OS ISO image, hindi isang installation ISO, dahil ang mga installation image ay walang apt at hindi makakapag-install ng mga kinakailangang software sa live environment. Kung ang iyong VPS control panel ay sumusuporta sa pag-boot mula sa isang user-supplied ISO image, magpatuloy sa Step 3, kung hindi, maaari mo pa ring i-boot ang na-download na ISO sa pamamagitan ng pag-convert ng isang swap partition, kung mayroon, sa EXT4 at iimbak ang ISO sa na-reclaim na storage space na iyon, pagkatapos ay maaaring i-configure ang GRUB2 para mag-boot mula sa ISO na iyon. Ito ay ginagawa tulad ng sumusunod:
Ang VPS na ito ay may 2GB na swap partition sa /dev/vda2 na sapat na malaki para mag-imbak ng ISO. Gumawa ng EXT4 filesystem, i-mount ito at i-download ang ISO dito:
# 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
pagkatapos ay i-instruct ang GRUB2 na mag-boot mula sa ISO na ito; i-edit ang /etc/grub.d/40_custom tulad ng sumusunod:# swapoff /dev/vda2 # i-disable ang swap partition
# mkfs.ext4 /dev/vda2 # gumawa ng EXT4 filesystem
# mount /dev/vda2 /mnt # i-mount ang na-reclaim na espasyo
# mkdir /mnt/images/
# wget -O /mnt/images/image_file.iso <image_URL>
at ilapat ang configuration gamit ang#!/bin/sh
exec tail -n +3 $0
# Ang file na ito ay nagbibigay ng madaling paraan para magdagdag ng custom menu entries. I-type lamang ang
# menu entries na nais mong idagdag pagkatapos ng komentong ito. Mag-ingat na huwag baguhin ang
# 'exec tail' na linya sa itaas.
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
}
Kapag nag-reboot ka ng VPS, ang GRUB2 menu ay mag-aalok ng opsyon para mag-boot mula sa live image. Magpatuloy mula doon gamit ang VNC rescue console na inaalok ng control panel ng provider.update-grub2
- Step 3: I-install ang ZFS sa live OS environment
-
I-boot ang live OS image at i-access ang terminal nito. Pagkatapos, i-install ang mga ZFS package sa live OS environment:
Ngayon, ang live OS ay mayroon nang ZFS kernel module at ZFS utilities na kinakailangan para i-format ang iyong VPS root filesystem.
# echo deb http://deb.debian.org/debian stretch contrib >> /etc/apt/sources.list
# apt update
# apt install zfs-dkms
# modprobe zfs
- Step 4: I-partition ang VPS disk
-
Mayroong dalawang alternatibong senaryo para sa pag-partition ng VPS disk:
- Kung itinago mo ang live ISO sa /dev/vda2, hindi mo maaaring baguhin ang partisyon na iyon ngayon dahil ang live system ay umaasa dito, at walang pag-partition ang gagawin sa VPS disk. Ang ZFS ay i-format sa umiiral na /dev/vda2 partition, at ang /dev/vda1 ay mananatili bilang is at sa dakong huli ay gagamitin bilang iyong permanenteng boot partition para sa pag-iimbak ng kernel at initrd. Lumaktaw sa Step 5 .
-
Kung ang iyong live environment ay hindi umaasa sa isang ISO file na nakaimbak sa VPS disk, muling hatiin ang disk sa pamamagitan ng paggawa ng isang maliit na boot partition para sa GRUB2, at isang malaking partition para sa ZFS root na sumasaklaw sa lahat ng natitirang espasyo sa disk. Isagawa ang fdisk upang gumawa ng dalawang sumusunod na partition:
Lumikha ng primary boot partition na may lapad na 100MB at markahan ito bilang bootable gamit ang asterisk (*), na may partition ID = 83 (Linux). Ito ay ifo-format bilang EXT4 para sa compatibility sa GRUB2, at ito ay maglalaman ng boot data. Pagkatapos, lumikha ng isa pang primary partition para sa ZFS, na may ID = bf (Solaris). Isulat ang mga pagbabago sa disk at isara ang fdisk. Ngayon na ang disk ay wastong na-partition, maaari mong i-format ang boot partition:
# 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
- Step 5: I-install ang ZFS sa VPS disk
-
I-format ang /dev/vda1 bilang isang ZFS volume:
Ang hanay ng mga opsyon na ito ay inirerekomenda ng dokumentasyon ng ZFS para sa pinakamataas na pagkakatugma sa pinakabago at mga hinaharap na disk. Ang opsyon compression=zstd ay nagpapagana ng algorithm ng ZSTD compression na may mas mataas na ratio ng compression kaysa sa default na LZ4, bagaman maaari mong gamitin ang compression=lz4 upang bawasan ang paggamit ng CPU kung ang iyong VPS ay may mataas na disk I/O. Ang pool ay pinangalanang rpool na siyang pinakakaraniwang ginagamit na pangalan para sa mga root pool. Kapag natapos ang command na ito, ang rpool ay mai-mount sa direktoryo ng /mnt ng live environment, gaya ng tinukoy ng opsyon na -R /mnt sa itaas, ngunit ito ay awtomatikong mai-mount sa / sa bawat kasunod na boot. Ang pag-mount nito sa /mnt ay kinakailangan upang maibalik ang iyong backup dito mula sa live environment.
# 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
- Hakbang 6: Ibalik ang backup sa bagong ZFS root filesystem
-
I-install ang OpenSSH server sa live environment upang matanggap ang backup data mula sa backup VPS:
Para sa pagiging simple, paganahin ang PermitRootLogin yes sa /etc/ssh/sshd_config ng live na kapaligiran, pagkatapos ay magtakda ng isang ligtas na root password at i-restart ang OpenSSH:
# apt install openssh-server
at simulan ang pagbabalik ng backup na datos mula sa backup VPS, na pupunuan ang ZFS root pool na naka-mount sa /mnt:# passwd
# service restart ssh
o kung gumamit ka ng TAR para gumawa ng backup archive, ibalik ito gamit ang:## mula sa backup VPS
# rsync -arxz backup.d/* root@target:/mnt/
gayunpaman tulad ng aking isinulat sa Step 1, sa pag-extract, binabago ng TAR ang target path ng absolute symlinks sa mga relatibong path; ang mga symlink na ito ay maaaring maibalik nang maayos tulad ng sumusunod. Tandaan na ang pagbabalik na ito ay hindi kinakailangan kung hindi mo ginamit ang TAR para i-back up ang root file system. Mula sa backup VPS, ilista ang lahat ng symlink na nakapaloob sa archive:## mula sa backup VPS
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
pagkatapos ay kopyahin ang listahan sa target na VPS sa /mnt, na ngayon ay naglalaman ng root filesystem na muling napuno mula sa backup:## mula sa backup VPS
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
Mula sa target na VPS, chroot sa /mnt at isagawa ang Bash script na ito upang maibalik ang lahat ng absolute symlinks:## mula sa backup VPS
# scp list_of_symlinks.txt root@target:/mnt/root/
Ang iyong root filesystem ay ngayon ay ganap na naibalik mula sa backup at maaaring i-boot, ngunit kailangan mo muna ng gumaganang bootloader.## mula sa 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
- Hakbang 7: I-install ang GRUB2
-
Kung nasa loob ka ng chroot, lumabas ka at bumalik sa live environment. Pagkatapos, i-bind ang mga virtual filesystem sa /mnt at i-mount ang boot partition:
Maaari mong piliing kopyahin ang anumang pre-existing na content mula sa /mnt/boot/ patungo sa bagong boot partition. Chroot sa root pool, at mula sa loob nito, i-install ang ZFS initramfs hook, ang ZFS kernel module, at ang ZFS userspace tools na kinakailangan para makabuo ng initrd:
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount /dev/vda2 /mnt/boot
pagkatapos ay i-install ang GRUB2 package:# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
i-edit ang /etc/default/grub upang itakda ang ZFS pool bilang root device, sa pamamagitan ng pagbabago sa variable na GRUB_CMDLINE_LINUX:# apt install grub-pc
# update-initramfs -u -k all
pagkatapos ay ilapat ang configuration:## ito ay /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
at sa wakas ay i-install ang GRUB2 sa MBR:# update-grub
# grub-install /dev/vda
- Hakbang 8: Mag-boot sa ZFS root pool
-
Ang sistema ay handa na, ganap na naibalik mula sa backup, at maaari nang i-boot. Lumabas sa chroot at i-umount ang lahat ng virtual filesystems, pagkatapos ay i-export ang ZFS root pool:
Maaari mo na ngayong alisin ang ISO image mula sa VPS control panel, kung ginamit mo ang opsyon na ito, o burahin ang ISO mula sa hard drive, at i-reboot ang sistema sa ZFS root pool:
# exit # lumabas sa rpool chroot
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/boot
# umount /mnt
# zpool export -a
Ang pag-convert ng VPS root filesystem mula sa EXT4 patungo sa ZFS ay tapos na, at ang VPS ay magbo-boot sa iyong dating naka-install na sistema tulad ng dati.# reboot
Magbasa pa ng mga artikulo
