không tìm thấy dịch vụ nào phù hợp
Cài đặt ZFS trên Root trong một VPS đang chạy
Hướng dẫn này giải thích cách cài đặt ZFS làm hệ thống tập tin gốc của một VPS chứa sẵn cài đặt Linux mà không gây mất dữ liệu. VPS sẽ có một phân vùng khởi động EXT4 nhỏ dành cho GRUB2 với kernel và initrd, và một pool ZFS lớn được gắn trên root với tính năng nén được kích hoạt. Hầu hết các lệnh sẽ được thực hiện từ một hình ảnh live CD và một giải pháp thay thế sẽ được trình bày nếu VPS không hỗ trợ gắn kết hình ảnh ISO.
- Mục lục:
- 1. Sao lưu dữ liệu
- 2. Khởi động một hình ảnh hệ điều hành live
- 3. Cài đặt ZFS trên môi trường hệ điều hành live
- 4. Phân vùng đĩa của VPS
- 5. Cài đặt ZFS trên đĩa của VPS
- 6. Khôi phục bản sao lưu vào hệ thống tập tin root ZFS mới
- 7. Cài đặt GRUB2
- 8. Khởi động vào ZFS root pool
- Bước 1: Sao lưu dữ liệu
-
Nếu bạn có một VPS thứ hai hoặc máy tính tại nhà với đủ không gian để lưu trữ dữ liệu sao lưu, từ máy tính đó hãy chạy lệnh:
trong đó target là tên máy chủ của VPS đang được chuyển đổi. Lệnh này sẽ sao chép toàn bộ hệ thống tệp gốc qua SSH sang máy sao lưu, và việc khôi phục bản sao lưu này lên VPS đích sau này sẽ rất đơn giản. Nếu bạn cần nén bản sao lưu do thiếu không gian, bạn có thể tạo một kho lưu trữ TGZ nén:
# rsync -aqrxz root@target:/ backup.d
Tuy nhiên, khi khôi phục hệ thống tệp gốc từ kho lưu trữ TAR, sẽ cần phải tạo lại tất cả các liên kết tượng trưng có mục tiêu là đường dẫn tuyệt đối, vì TAR chuyển đổi mục tiêu của chúng thành đường dẫn tương đối, do đó sử dụng rsync là phương án đơn giản hơn. Cách khôi phục kho lưu trữ TAR đúng cách sẽ được trình bày sau.# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
- Bước 2: Khởi động từ một ảnh hệ điều hành live
-
Việc chuyển đổi sang ZFS sẽ được thực hiện từ một hệ điều hành live CD. Tùy thuộc vào khả năng của bảng điều khiển VPS của bạn, nó có thể đã có sẵn một ảnh hệ điều hành live để khởi động. Ngoài ra, bạn có thể tải xuống một ISO live Debian từ gương Debian và tải lên bảng điều khiển VPS của bạn, sau đó khởi động từ ISO đó; điều này sẽ hoạt động tốt ngay cả khi VPS của bạn chạy một bản phân phối khác. Hãy cẩn thận sử dụng một ảnh ISO hệ điều hành live, không phải ISO cài đặt, vì các ảnh cài đặt thiếu apt và không thể cài đặt phần mềm cần thiết vào môi trường live. Nếu bảng điều khiển VPS của bạn hỗ trợ khởi động từ ảnh ISO do người dùng cung cấp, hãy chuyển đến Bước 3, nếu không, bạn vẫn có thể khởi động ISO đã tải xuống bằng cách chuyển đổi một phân vùng swap, nếu có, thành EXT4 và lưu trữ ISO trong không gian lưu trữ đã thu hồi đó, sau đó GRUB2 có thể được cấu hình để khởi động từ ISO đó. Điều này được thực hiện như sau:
VPS này có một phân vùng swap 2GB trong /dev/vda2, đủ lớn để lưu trữ ISO. Tạo hệ thống tập tin EXT4, gắn kết nó và tải ISO lên đó:
# fdisk --list /dev/vda
Đĩa /dev/vda: 35 GiB, 37580963840 byte, 73400320 sector
Đơn vị: sector của 1 * 512 = 512 byte
Kích thước sector (logic/vật lý): 512 byte / 512 byte
Kích thước I/O (tối thiểu/tối ưu): 512 byte / 512 byte
Loại nhãn đĩa: dos
Định danh đĩa: 0x495b5ce4
Thiết bị Khởi động Bắt đầu Kết thúc Sector Kích thước Id Loại
/dev/vda1 * 2048 69203583 69201536 33G 83 Linux
/dev/vda2 69203584 73397887 4194304 2G 82 Linux swap
sau đó hướng dẫn GRUB2 khởi động từ ISO này; chỉnh sửa /etc/grub.d/40_custom như sau:# swapoff /dev/vda2 # tắt phân vùng swap
# mkfs.ext4 /dev/vda2 # tạo hệ thống tập tin EXT4
# mount /dev/vda2 /mnt # gắn kết không gian đã thu hồi
# mkdir /mnt/images/
# wget -O /mnt/images/image_file.iso <image_URL>
và áp dụng cấu hình với#!/bin/sh
exec tail -n +3 $0
# Tệp này cung cấp một cách dễ dàng để thêm các mục menu tùy chỉnh. Chỉ cần nhập
# các mục menu bạn muốn thêm sau nhận xét này. Hãy cẩn thận không thay đổi
# dòng 'exec tail' ở trên.
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
}
Khi bạn khởi động lại VPS, menu GRUB2 sẽ cung cấp tùy chọn để khởi động từ hình ảnh live. Tiếp tục từ đó bằng cách sử dụng bảng điều khiển cứu hộ VNC được cung cấp bởi bảng điều khiển của nhà cung cấp.update-grub2
- Bước 3: Cài đặt ZFS trên môi trường hệ điều hành live
-
Khởi động hình ảnh hệ điều hành live và truy cập terminal của nó. Sau đó cài đặt các gói ZFS trên môi trường hệ điều hành live:
Bây giờ hệ điều hành live đã có module kernel ZFS và các tiện ích ZFS cần thiết để định dạng hệ thống tập tin gốc của VPS.
# echo deb http://deb.debian.org/debian stretch contrib >> /etc/apt/sources.list
# apt update
# apt install zfs-dkms
# modprobe zfs
- Bước 4: Phân vùng đĩa VPS
-
Có hai kịch bản thay thế để phân vùng đĩa VPS:
- Nếu bạn đã lưu trữ ISO live trong /dev/vda2, bạn không thể thay đổi phân vùng đó ngay bây giờ vì hệ thống live phụ thuộc vào nó, và không có bất kỳ phân vùng nào sẽ được thực hiện trên đĩa VPS. ZFS sẽ được định dạng trên phân vùng /dev/vda2 hiện có, và /dev/vda1 sẽ vẫn như cũ và sau đó sẽ được sử dụng lại làm phân vùng khởi động vĩnh viễn của bạn để lưu trữ kernel và initrd. Chuyển đến Bước 5 .
-
Nếu môi trường hoạt động của bạn không phụ thuộc vào tệp ISO được lưu trữ trên đĩa VPS, hãy phân vùng lại đĩa bằng cách tạo một phân vùng khởi động nhỏ cho GRUB2 và một phân vùng lớn cho root ZFS mở rộng trên toàn bộ không gian đĩa còn lại. Thực thi fdisk để tạo hai phân vùng sau:
Tạo một phân vùng khởi động chính rộng 100MB và đánh dấu nó là khởi động bằng dấu hoa thị (*), với ID phân vùng = 83 (Linux). Nó sẽ được định dạng là EXT4 để tương thích với GRUB2, và nó sẽ chứa dữ liệu khởi động. Sau đó, tạo một phân vùng chính khác cho ZFS, với ID = bf (Solaris). Ghi các thay đổi vào đĩa và đóng fdisk. Bây giờ đĩa đã được phân vùng đúng cách, bạn có thể định dạng phân vùng khởi động:
# 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
- Bước 5: Cài đặt ZFS trên đĩa VPS
-
Định dạng /dev/vda1 làm một volume ZFS:
Tập hợp các tùy chọn này được khuyến nghị bởi tài liệu ZFS để đạt được khả năng tương thích cao nhất với các ổ đĩa mới nhất và trong tương lai. Tùy chọn compression=zstd kích hoạt thuật toán nén ZSTD, có tỷ lệ nén cao hơn so với LZ4 mặc định, mặc dù bạn có thể sử dụng compression=lz4 để giảm mức sử dụng CPU nếu VPS của bạn có hoạt động I/O đĩa cao. Pool được đặt tên là rpool, đây là tên được sử dụng phổ biến nhất cho các root pool. Khi lệnh này hoàn thành, rpool sẽ được gắn kết vào thư mục /mnt của môi trường live, như được chỉ định bởi tùy chọn -R /mnt ở trên, nhưng nó sẽ tự động được gắn kết vào / ở mỗi lần khởi động tiếp theo. Việc gắn kết nó vào /mnt là cần thiết để khôi phục bản sao lưu của bạn lên đó từ môi trường 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 \
- Bước 6: Khôi phục bản sao lưu vào hệ thống tệp ZFS root mới
-
Cài đặt máy chủ OpenSSH trên môi trường live để nhận dữ liệu sao lưu từ VPS sao lưu:
Để đơn giản, hãy bật PermitRootLogin yes trong /etc/ssh/sshd_config của môi trường live, sau đó đặt một mật khẩu root an toàn và khởi động lại OpenSSH:
# apt install openssh-server
và bắt đầu khôi phục dữ liệu sao lưu từ VPS sao lưu, điều này sẽ điền vào pool root ZFS được gắn trên /mnt:# passwd
# service restart ssh
hoặc nếu bạn đã sử dụng TAR để tạo một bản sao lưu, hãy khôi phục nó bằng:## từ VPS sao lưu
# rsync -arxz backup.d/* root@target:/mnt/
tuy nhiên như tôi đã viết trong Bước 1, khi giải nén, TAR chuyển đổi đường dẫn đích của các liên kết tượng trưng tuyệt đối thành đường dẫn tương đối; các liên kết tượng trưng này có thể được khôi phục đúng cách như sau. Lưu ý rằng việc khôi phục này là không cần thiết nếu bạn không sử dụng TAR để sao lưu hệ thống tập tin root. Từ VPS sao lưu, liệt kê tất cả các liên kết tượng trưng có trong bản sao lưu:## từ VPS sao lưu
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
sau đó sao chép danh sách vào VPS đích vào thư mục /mnt, bây giờ chứa hệ thống tập tin gốc được khôi phục từ bản sao lưu:## từ VPS sao lưu
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
Từ VPS đích, chroot vào /mnt và thực thi tập lệnh Bash này để khôi phục tất cả các liên kết tượng trưng tuyệt đối:## từ VPS sao lưu
# scp list_of_symlinks.txt root@target:/mnt/root/
Hệ thống tập tin gốc của bạn đã được khôi phục hoàn toàn từ bản sao lưu và có thể khởi động, nhưng bạn cần một bộ nạp khởi động hoạt động trước tiên.## từ môi trường 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
- Bước 7: Cài đặt GRUB2
-
Nếu bạn đang ở trong môi trường chroot, hãy thoát khỏi nó và quay lại môi trường live. Sau đó, liên kết các hệ thống tệp ảo với /mnt và gắn kết phân vùng boot:
Bạn có thể chọn sao chép bất kỳ nội dung nào đã tồn tại từ /mnt/boot/ sang phân vùng boot mới. Chroot vào root pool, và từ trong đó, cài đặt hook initramfs ZFS, module kernel ZFS, và các công cụ userspace ZFS cần thiết để tạo initrd:
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount /dev/vda2 /mnt/boot
sau đó cài đặt gói GRUB2:# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
chỉnh sửa /etc/default/grub để thiết lập ZFS pool làm thiết bị gốc, bằng cách sửa đổi biến GRUB_CMDLINE_LINUX:# apt install grub-pc
# update-initramfs -u -k all
sau đó áp dụng cấu hình:## đây là /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
và cuối cùng cài đặt GRUB2 vào MBR:# update-grub
# grub-install /dev/vda
- Bước 8: Khởi động vào ZFS root pool
-
Hệ thống đã sẵn sàng, được khôi phục hoàn toàn từ bản sao lưu, và có thể được khởi động. Thoát khỏi chroot và gỡ bỏ tất cả các hệ thống tệp ảo, sau đó xuất ZFS root pool:
Bây giờ bạn có thể xóa hình ảnh ISO từ bảng điều khiển VPS, nếu bạn đã sử dụng tùy chọn này, hoặc xóa ISO từ ổ cứng, và khởi động lại hệ thống vào ZFS root pool:
# exit # thoát khỏi chroot của rpool
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/boot
# umount /mnt
# zpool export -a
Quá trình chuyển đổi hệ thống tập tin gốc của VPS từ EXT4 sang ZFS đã hoàn tất, và VPS sẽ khởi động vào hệ thống cài đặt cũ của bạn như bình thường.# reboot
Đọc thêm bài viết
