Làm chủ ZFS trên Linux: Hướng dẫn thực hành về lưu trữ nâng cao

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Vượt xa Ext4 và XFS

Hầu hết các quản trị viên Linux bắt đầu hành trình của mình với Ext4 hoặc XFS. Những hệ thống tệp này là những “cỗ xe tam mã” đáng tin cậy, nhưng chúng thường khiến bạn gặp khó khăn khi cần quản lý volume tích hợp hoặc bảo vệ chống lỗi dữ liệu. ZFS (Zettabyte File System) định nghĩa lại việc quản lý lưu trữ bằng cách hợp nhất hệ thống tệp với trình quản lý volume logic. Nó không chỉ lưu trữ dữ liệu; nó còn chủ động bảo vệ dữ liệu khỏi hiện tượng “bit rot”—những khoảnh khắc hiếm gặp nhưng thảm khốc khi một số 0 chuyển thành số 1 trên đĩa vật lý của bạn.

Về mặt kỹ thuật, ZFS hoạt động trên nền tảng Copy-on-Write (CoW). Các hệ thống tiêu chuẩn ghi đè dữ liệu trực tiếp, điều này rất rủi ro nếu mất điện giữa chừng khi đang ghi. Ngược lại, ZFS ghi dữ liệu mới vào một block trống trước khi cập nhật các con trỏ. Nếu máy chủ mất điện trong quá trình ghi, dữ liệu cũ vẫn nguyên vẹn và hợp lệ. Kiến trúc này cung cấp mức độ an toàn dữ liệu mà các phân vùng tiêu chuẩn đơn giản là không thể có được.

Cài đặt ZFS lên hệ thống của bạn

Sự khác biệt về giấy phép (CDDL so với GPL) khiến ZFS không nằm trong nhân Linux chính thức, nhưng dự án OpenZFS giúp việc cài đặt trở nên cực kỳ dễ dàng trên các bản phân phối hiện đại. Trên Ubuntu hoặc Debian, bạn có thể thiết lập và chạy chỉ trong vài giây.

Bắt đầu bằng cách cập nhật repository cục bộ và tải gói tiện ích:

sudo apt update
sudo apt install zfsutils-linux

Đối với các hệ thống dựa trên RHEL như AlmaLinux 9 hoặc Rocky Linux, trước tiên bạn sẽ cần repository OpenZFS chính thức:

sudo dnf install https://zfsonlinux.org/epel/zfs-release-el9.noarch.rpm
sudo dnf install kernel-devel zfs

Sau khi các gói đã được cài đặt, hãy nạp module kernel để kích hoạt hỗ trợ ZFS:

sudo modprobe zfs

Xây dựng Storage Pool đầu tiên của bạn

Hãy quên đi cách tư duy cũ về các phân vùng riêng lẻ và /dev/sda1. ZFS nhóm các ổ đĩa vật lý thành một zpool. Hãy coi pool này như một “thùng” lưu trữ khổng lồ. Từ thùng này, bạn có thể phân chia thành các dataset riêng lẻ hoạt động như các hệ thống tệp nhưng chia sẻ tổng dung lượng của pool.

Tạo một Mirrored Pool

Nếu bạn có hai ổ đĩa 1TB trống (ví dụ: /dev/sdb/dev/sdc), bạn có thể tạo một pool dạng mirror. Điều này tương đương với RAID 1. Cảnh báo: Lệnh sau sẽ xóa ngay lập tức toàn bộ dữ liệu trên các ổ đĩa mục tiêu đó.

sudo zpool create mypool mirror /dev/sdb /dev/sdc

ZFS tự động mount pool mới này tại /mypool. Bạn sẽ không cần chạm vào /etc/fstab vì ZFS tự xử lý logic mount khi khởi động.

Tổ chức với Dataset

Đừng đổ mọi thứ vào thư mục gốc của pool. Thay vào đó, hãy tạo các dataset để áp dụng các quy tắc cụ thể cho các loại dữ liệu khác nhau. Ví dụ: bạn có thể muốn nén mạnh các tệp log nhưng đặt quota nghiêm ngặt cho dữ liệu người dùng.

sudo zfs create mypool/userdata
sudo zfs create mypool/logs

Hiệu quả thực tế: Nén và Snapshot

Điều đầu tiên bạn sẽ nhận thấy với ZFS là tính năng nén dữ liệu minh bạch (transparent compression). Nó nén dữ liệu trước khi ghi xuống đĩa. Điều này giúp tiết kiệm không gian vật lý và thường tăng hiệu suất vì hệ thống ghi ít block hơn vào phần cứng.

Trên một máy chủ Ubuntu thực tế chỉ có 4GB RAM, tôi đã kích hoạt nén LZ4 trên thư mục log dung lượng 100GB. Kết quả rất ấn tượng. Tôi đã đạt được tỷ lệ nén 2,15x, chuyển 100GB dữ liệu thành 46GB dung lượng đĩa thực tế mà không gây ảnh hưởng đáng kể nào đến độ trễ CPU.

Kích hoạt tính năng này trên dataset của bạn bằng một lệnh duy nhất:

sudo zfs set compression=lz4 mypool/userdata

Điểm lưu tức thì: Snapshot

Snapshot là các bản ghi gần như tức thời của một dataset. Nhờ thiết kế Copy-on-Write, một bản snapshot ban đầu không chiếm thêm dung lượng. Nó chỉ tăng kích thước khi bạn thay đổi hoặc xóa dữ liệu trong dataset đang hoạt động.

Luôn tạo snapshot trước khi nâng cấp phần mềm lớn hoặc thay đổi cấu hình:

sudo zfs snapshot mypool/userdata@before-upgrade

Nếu quá trình nâng cấp làm hỏng ứng dụng, bạn có thể hoàn tác toàn bộ hệ thống tệp trong chưa đầy một giây:

sudo zfs rollback mypool/userdata@before-upgrade

Theo dõi sức khỏe và Bảo trì

Một hệ thống lưu trữ chỉ hữu ích khi nó khỏe mạnh. ZFS tích hợp sẵn các công cụ để xác minh rằng mọi bit dữ liệu của bạn đều chính xác như mong đợi.

Kiểm tra trạng thái Pool

Chạy lệnh status để xem tình trạng các ổ đĩa của bạn. Hãy nhìn kỹ vào các cột READ, WRITE, và CKSUM; trong một pool khỏe mạnh, các giá trị này đều phải bằng không.

zpool status

Bạn sẽ thấy một bản tóm tắt cho biết pool có đang ONLINE hay không và lần “scrub” cuối cùng được thực hiện khi nào. Scrub là một quá trình dọn dẹp sâu, trong đó ZFS đọc mọi block và so sánh với checksum của nó để tự động sửa lỗi.

Quy tắc 80% và Quản lý RAM

ZFS rất mạnh mẽ, nhưng nó có những nhu cầu cụ thể. Đầu tiên, hãy cố gắng giữ dung lượng pool dưới 80%. Khi bạn vượt quá ngưỡng này, cơ chế CoW sẽ gặp khó khăn trong việc tìm không gian trống liên tục. Điều này dẫn đến phân mảnh, có thể làm tốc độ ghi giảm xuống mức cực thấp.

Thứ hai, ZFS sử dụng Adaptive Replacement Cache (ARC) để tăng tốc độ đọc, điều này có thể tiêu tốn nhiều RAM. Nếu bạn đang sử dụng VPS bị giới hạn bộ nhớ với chỉ 4GB RAM, bạn nên giới hạn ARC ở mức 1GB để giữ cho các ứng dụng khác luôn mượt mà.

Tạo một tệp cấu hình tại /etc/modprobe.d/zfs.conf:

options zfs zfs_arc_max=1073741824

Sau khi lưu, hãy cập nhật initramfs và khởi động lại để áp dụng giới hạn:

sudo update-initramfs -u

Chuyển sang ZFS mang lại cho bạn một nền tảng lưu trữ cấp chuyên nghiệp. Bằng cách từ bỏ việc phân vùng kiểu cũ và tận dụng pool cũng như snapshot, bạn có được sự bảo vệ dữ liệu cấp doanh nghiệp. Hãy bắt đầu nhỏ với một vài đĩa ảo để học cú pháp. Một khi bạn thấy tính năng rollback hoạt động, bạn sẽ thấy khó có thể quay lại với các hệ thống tệp truyền thống.

Share: