không tìm thấy dịch vụ 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:
# 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
# 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>
#!/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
}
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:
# 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:
# 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:
# 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:
# apt install openssh-server
# passwd
# service restart ssh
## từ VPS sao lưu
# rsync -arxz backup.d/* root@target:/mnt/
## từ VPS sao lưu
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
## từ VPS sao lưu
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
## từ VPS sao lưu
# scp list_of_symlinks.txt root@target:/mnt/root/
## 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:
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount /dev/vda2 /mnt/boot
# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
# apt install grub-pc
# update-initramfs -u -k all
## đây là /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
# 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:
# 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
# reboot
Đọc thêm bài viết