một công cụ tìm kiếm độc lập cho VPS được xếp hạng theo giá

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:
# rsync -aqrxz root@target:/ backup.d
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:
# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
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.
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
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 đó:
# 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>
sau đó hướng dẫn GRUB2 khởi động từ ISO này; chỉnh sửa /etc/grub.d/40_custom như sau:
#!/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
}
và áp dụng cấu hình với
update-grub2
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.
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â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.
Bước 4: Phân vùng đĩa VPS
Có hai kịch bản thay thế để phân vùng đĩa VPS:
  1. 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 .
  2. 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
    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:
    # 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 \
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.
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
Để đơ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:
# passwd
# service restart ssh
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:
## từ VPS sao lưu
# rsync -arxz backup.d/* root@target:/mnt/
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
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
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
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
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
# scp list_of_symlinks.txt root@target:/mnt/root/
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ừ 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
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.
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
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:
# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
sau đó cài đặt gói GRUB2:
# apt install grub-pc
# update-initramfs -u -k all
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:
## đây là /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
sau đó áp dụng cấu hình:
# update-grub
và cuối cùng cài đặt GRUB2 vào MBR:
# 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
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:
# reboot
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.

Đọc thêm bài viết
Bengali Filipino Máy tính VPS Português Tiếng Anh Tiếng Ba Lan Tiếng Đức Tiếng Hàn Tiếng Indonesia Tiếng Mã Lai Tiếng Nga Tiếng Nhật Tiếng Pháp Tiếng Tây Ban Nha Tiếng Thổ Nhĩ Kỳ Tiếng Trung العربية
Trợ giúp  –  Danh mục  –  Chính sách bảo mật  –  Liên hệ  –