tiada perkhidmatan yang sepadan ditemui
Memasang ZFS pada Root dalam VPS yang Sedang Berjalan
Panduan ini menerangkan cara memasang ZFS sebagai sistem fail root bagi VPS yang mengandungi pemasangan Linux sedia ada tanpa menyebabkan kehilangan data. VPS akan mempunyai partisi boot EXT4 kecil untuk GRUB2 dengan kernel dan initrd, serta kolam ZFS besar yang dipasang pada root dengan mampatan diaktifkan. Kebanyakan arahan akan dikeluarkan daripada imej CD langsung dan penyelesaian alternatif akan ditunjukkan jika VPS tidak menyokong pemasangan imej ISO.
- Indeks:
- 1. Sandarkan data
- 2. Boot imej OS langsung
- 3. Pasang ZFS pada persekitaran OS langsung
- 4. Partisikan cakera VPS
- 5. Pasang ZFS pada cakera VPS
- 6. Pulihkan sandaran ke sistem fail root ZFS baru
- 7. Pasang GRUB2
- 8. Boot ke dalam kolam root ZFS
- Langkah 1: Cadangkan data
-
Jika anda mempunyai VPS kedua atau komputer rumah dengan ruang yang mencukupi untuk menyimpan data sandaran, dari dalam komputer tersebut jalankan:
di mana target adalah nama hos VPS yang sedang ditukar. Ini akan menyalin keseluruhan sistem fail root melalui SSH ke mesin sandaran, dan memulihkan sandaran ini ke VPS sasaran pada masa akan datang adalah mudah. Jika anda perlu memampatkan sandaran kerana kekurangan ruang, anda boleh sebagai alternatif mencipta arkib TGZ yang dimampatkan:
# rsync -aqrxz root@target:/ backup.d
Walau bagaimanapun, apabila memulihkan sistem fail root dari arkib TAR, adalah perlu untuk mencipta semula semua pautan simbolik yang mempunyai nama laluan mutlak, kerana TAR menukar sasaran mereka kepada nama laluan relatif, jadi menggunakan rsync adalah alternatif yang lebih mudah. Cara untuk memulihkan arkib TAR dengan betul akan ditunjukkan kemudian.# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
- Langkah 2: Boot imej OS live
-
Penukaran kepada ZFS akan dilakukan daripada sistem pengendalian CD live. Bergantung pada keupayaan panel kawalan VPS anda, ia mungkin sudah mempunyai imej OS live sedia untuk boot. Sebagai alternatif, anda boleh memuat turun ISO live Debian dari cermin Debian dan memuat naiknya ke panel kawalan VPS anda, kemudian boot ISO tersebut dari sana; ini akan berfungsi dengan baik walaupun VPS anda menjalankan pengedaran yang berbeza. Berhati-hati untuk menggunakan imej ISO OS live, bukan ISO pemasangan, kerana imej pemasangan tidak mempunyai apt dan tidak dapat memasang perisian yang diperlukan ke dalam persekitaran live. Jika panel kawalan VPS anda menyokong boot dari imej ISO yang dibekalkan pengguna, teruskan ke Langkah 3, jika tidak, anda masih boleh boot ISO yang dimuat turun dengan menukar partition swap, jika ada, kepada EXT4 dan menyimpan ISO dalam ruang storan yang diperoleh semula itu, kemudian GRUB2 boleh dikonfigurasi untuk boot dari ISO tersebut. Ini dilakukan seperti berikut:
VPS ini mempunyai partisi swap 2GB dalam /dev/vda2 yang cukup besar untuk menyimpan ISO. Cipta sistem fail EXT4, pasangkannya dan muat turun ISO ke atasnya:
# 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
kemudian arahkan GRUB2 untuk boot dari ISO ini; edit /etc/grub.d/40_custom seperti berikut:# swapoff /dev/vda2 # lumpuhkan partisi swap
# mkfs.ext4 /dev/vda2 # cipta sistem fail EXT4
# mount /dev/vda2 /mnt # pasangkan ruang yang telah diambil semula
# mkdir /mnt/images/
# wget -O /mnt/images/image_file.iso <image_URL>
dan terapkan konfigurasi dengan#!/bin/sh
exec tail -n +3 $0
# Fail ini menyediakan cara mudah untuk menambah entri menu tersuai. Cuma taipkan
# entri menu yang anda ingin tambah selepas komen ini. Berhati-hati untuk tidak mengubah
# baris 'exec tail' di atas.
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
Jika persekitaran langsung anda tidak bergantung pada fail ISO yang disimpan pada cakera VPS, partition semula cakera dengan membuat satu partisi boot kecil untuk GRUB2, dan satu partisi besar untuk akar ZFS yang meliputi semua ruang cakera yang tinggal. Jalankan fdisk untuk membuat dua partisi berikut:Cipta partisi boot utama seluas 100MB dan tandakan ia sebagai boleh boot dengan asterisk (*), dengan ID partisi = 83 (Linux). Ia akan diformat sebagai EXT4 untuk keserasian dengan GRUB2, dan ia akan mengandungi data boot. Kemudian cipta satu lagi partisi utama untuk ZFS, dengan ID = bf (Solaris). Tulis perubahan ke cakera dan tutup fdisk. Sekarang cakera telah dipartisi dengan betul, anda boleh memformat partisi boot:# 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
- Langkah 5: Pasang ZFS pada cakera VPS
- Format /dev/vda1 sebagai volum ZFS:
Set pilihan ini disyorkan oleh dokumentasi ZFS untuk keserasian tertinggi dengan cakera terkini dan masa hadapan. Pilihan compression=zstd membolehkan algoritma mampatan ZSTD yang mempunyai nisbah mampatan yang lebih tinggi berbanding LZ4 lalai, walaupun anda boleh menggunakan compression=lz4 untuk mengurangkan penggunaan CPU jika VPS anda mempunyai I/O cakera yang tinggi. Kolam dinamakan rpool yang merupakan nama yang paling biasa digunakan untuk kolam akar. Apabila arahan ini selesai, rpool akan dipasang pada direktori /mnt dalam persekitaran langsung, seperti yang ditentukan oleh pilihan -R /mnt di atas, tetapi ia akan dipasang secara automatik pada / pada setiap but seterusnya. Memasangnya pada /mnt adalah perlu untuk memulihkan sandaran anda ke atasnya dari persekitaran langsung.# 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
- Langkah 6: Pulihkan sandaran ke sistem fail akar ZFS yang baru
- Pasang pelayan OpenSSH pada persekitaran langsung untuk menerima data sandaran dari VPS sandaran:
Untuk kesederhanaan, aktifkan PermitRootLogin yes dalam /etc/ssh/sshd_config persekitaran langsung, kemudian tetapkan kata laluan root yang selamat dan mulakan semula OpenSSH:# apt install openssh-server
dan mulakan pemulihan data sandaran dari VPS sandaran, yang akan mengisi kolam root ZFS yang dipasang pada /mnt:# passwd
# service restart ssh
atau jika anda menggunakan TAR untuk mencipta arkib sandaran, pulihkannya dengan:## dari VPS sandaran
# rsync -arxz backup.d/* root@target:/mnt/
namun seperti yang saya tulis dalam Langkah 1, semasa pengekstrakan, TAR menukar laluan sasaran pautan simbolik mutlak kepada laluan relatif; pautan simbolik ini boleh dipulihkan dengan betul seperti berikut. Perhatikan bahawa pemulihan ini tidak diperlukan jika anda tidak menggunakan TAR untuk menyandarkan sistem fail root. Dari VPS sandaran, senaraikan semua pautan simbolik yang terkandung dalam arkib:## dari VPS sandaran
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
kemudian salin senarai ke VPS sasaran ke dalam /mnt, yang kini mengandungi sistem fail root yang telah diisi semula daripada sandaran:## dari VPS sandaran
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
Dari VPS sasaran, chroot ke dalam /mnt dan jalankan skrip Bash ini untuk memulihkan semua symlink mutlak:## dari VPS sandaran
# scp list_of_symlinks.txt root@target:/mnt/root/
Sistem fail root anda kini telah dipulihkan sepenuhnya daripada sandaran dan boleh diboot, tetapi anda memerlukan bootloader yang berfungsi terlebih dahulu.## dari persekitaran chroot
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
- Langkah 7: Pasang GRUB2
- Jika anda berada di dalam chroot, keluar daripadanya dan kembali ke persekitaran live. Kemudian ikat sistem fail maya ke /mnt dan pasang partition boot:
Anda boleh memilih untuk menyalin sebarang kandungan yang sedia ada dari /mnt/boot/ ke partition boot yang baru. Chroot ke dalam kolam root, dan dari dalamnya, pasang hook initramfs ZFS, modul kernel ZFS, dan alat pengguna ZFS yang diperlukan untuk menjana initrd:# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount /dev/vda2 /mnt/boot
kemudian pasang pakej GRUB2:# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
edit /etc/default/grub untuk menetapkan kolam ZFS sebagai peranti akar, dengan mengubah pembolehubah GRUB_CMDLINE_LINUX:# apt install grub-pc
# update-initramfs -u -k all
kemudian aplikasikan konfigurasi:## this is /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
dan akhirnya pasang GRUB2 ke MBR:# update-grub
# grub-install /dev/vda
- Langkah 8: Boot ke dalam kolam akar ZFS
- Sistem sudah siap, sepenuhnya dipulihkan daripada sandaran, dan boleh diboot. Keluar dari chroot dan umount semua sistem fail maya, kemudian eksport kolam akar ZFS:
Anda kini boleh mengalih keluar imej ISO daripada panel kawalan VPS, jika anda menggunakan pilihan ini, atau memadamkan ISO daripada cakera keras, dan but semula sistem ke dalam kolam akar ZFS:# exit # keluar dari chroot rpool
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/boot
# umount /mnt
# zpool export -a
Penukaran sistem fail akar VPS daripada EXT4 kepada ZFS telah selesai, dan VPS akan boot ke dalam sistem yang dipasang lama seperti biasa.# reboot
Baca lebih banyak artikel
