ZFS trên VPS: Cấu hình RAM và ARC tối ưu
ZFS cung cấp checksum và snapshot mạnh mẽ nhưng ARC mặc định sẽ ngốn hết RAM trên VPS. Tìm hiểu cách giới hạn bộ nhớ ARC để hệ thống vận hành ổn định mà không bị OOM.
Những gì ZFS mang lại và những gì bạn phải đánh đổi
ZFS trên FreeBSD và Linux hiện dùng chung một codebase là OpenZFS, vì vậy các tính năng trên cả hai hệ thống là như nhau. Một máy chủ chạy ZFS sẽ có dữ liệu được kiểm tra checksum, các snapshot không tốn tài nguyên cho đến khi dữ liệu thay đổi, khả năng replication với zfs send, và tính năng nén dữ liệu chỉ cần bật qua một thuộc tính. Điều bạn phải đánh đổi là bộ nhớ: ARC (adaptive replacement cache) mặc định chiếm một phần lớn RAM, và trên một VPS (virtual private server) 2 GB hoặc 4 GB, đó chính là lượng bộ nhớ mà ứng dụng của bạn đang cần.
Hướng dẫn này đánh giá ZFS từ góc độ một VPS thuê với một hoặc hai ổ đĩa ảo, không phải từ một hệ thống lưu trữ với bốn mươi khay ổ cứng. Những tính năng vẫn hữu dụng trong môi trường này là những gì bạn nên quan tâm. Những phần không còn phù hợp là những điều bạn cần biết trước khi xây dựng một pool.
OpenZFS trên FreeBSD và Linux: một codebase, hai cách đóng gói
FreeBSD đã tích hợp ZFS vào hệ thống cơ sở từ bản FreeBSD 7.0 năm 2008, ban đầu là một tính năng thử nghiệm. Kể từ OpenZFS 2.0 vào tháng 12 năm 2020, FreeBSD và Linux cùng build từ một cây mã nguồn, vì vậy zfs và zpool hoạt động giống hệt nhau trên cả hai nền tảng, và một pool được tạo trên hệ thống này có thể import trên hệ thống kia.
Lý do ZFS là một gói phần mềm trên Linux nhưng lại là một phần của hệ thống cơ sở trên FreeBSD nằm ở vấn đề bản quyền. OpenZFS sử dụng giấy phép CDDL (common development and distribution license). Kernel Linux sử dụng giấy phép GPL (general public license) phiên bản 2. Dự án kernel coi hai giấy phép này không tương thích với nhau, vì vậy mã nguồn ZFS không được gộp vào mainline Linux, và mỗi bản phân phối tự quyết định cách thức đóng gói nó. FreeBSD không gặp xung đột này, nên ZFS được tích hợp sẵn. Đó là toàn bộ câu chuyện thực tế: chỉ khác biệt về cách đóng gói, và bạn không cần phải chọn phe nào cả.
SSD Nodes không cung cấp image FreeBSD, vì vậy trên máy chủ thuê tại đây, phần hướng dẫn dành cho Linux là nội dung áp dụng cho bạn. Nếu bạn chạy FreeBSD ở nơi khác, một máy chủ FreeBSD sẽ có sẵn ZFS mà không cần build module hay lo lắng về việc nâng cấp kernel.
Cài đặt ZFS và tạo pool
Trên Ubuntu, module được tích hợp sẵn trong các gói kernel, vì vậy bạn chỉ cần cài đặt các lệnh điều khiển.
sudo apt update
sudo apt install -y zfsutils-linux
zfs versionzfs version sẽ in ra hai dòng, bao gồm phiên bản userland và phiên bản kernel module. Nếu chỉ có một dòng, nghĩa là module chưa được load. Gói này nằm trong thành phần universe, vốn được các image Ubuntu server bật mặc định; nếu apt không tìm thấy, hãy chạy sudo add-apt-repository universe trước.
Trên Debian, các gói nằm trong thành phần contrib và module được build trực tiếp trên máy của bạn thông qua DKMS (dynamic kernel module support). Hãy thêm contrib vào dòng Components: trong file /etc/apt/sources.list.d/debian.sources, chạy sudo apt update, sau đó:
sudo apt install -y linux-headers-$(dpkg --print-architecture) zfs-dkms zfsutils-linuxQuá trình cài đặt sẽ biên dịch module và in ra Building initial module for 6.12.0-..., việc này mất vài phút. Hãy lưu ý: mỗi lần nâng cấp kernel, hệ thống sẽ build lại module này; nếu quá trình build thất bại, pool của bạn sẽ không thể mount cho đến khi bạn khắc phục xong.
Trên FreeBSD, không cần cài đặt gì thêm. Bạn chỉ cần enable service và khởi động nó.
sysrc zfs_enable=YES
service zfs startBây giờ đến phần tạo pool. Trước tiên, hãy kiểm tra các đường dẫn thiết bị ổn định, vì /dev/vdb được gán theo thứ tự phát hiện và có thể thay đổi khi bạn gắn thêm ổ đĩa khác.
ls -l /dev/disk/by-id/
sudo zpool create -o ashift=12 tank /dev/disk/by-id/virtio-abc123def456
zpool status tankzpool status sẽ in ra state: ONLINE với thiết bị của bạn nằm dưới mục tank. ashift=12 thiết lập block nhỏ nhất của pool là 4 KiB, phù hợp với các loại SSD hiện nay và không thể thay đổi sau khi đã tạo.
Hầu hết các image VPS đều boot từ phân vùng root ext4, vì vậy ZFS ở đây đóng vai trò là data pool trên ổ đĩa thứ hai thay vì là filesystem cho hệ thống. Hãy xác nhận thiết bị đúng với dự kiến trước khi tạo pool, vì việc xác nhận ổ NVMe bạn được cấp chỉ mất một phút, nhưng việc rebuild lại dữ liệu sẽ tốn cả buổi chiều.
Checksum chỉ sửa lỗi khi pool có tính dự phòng
Mỗi block dữ liệu ZFS ghi xuống đều kèm theo một checksum, và mọi thao tác đọc đều được kiểm tra. Việc phát hiện lỗi luôn hoạt động. Tuy nhiên, để sửa lỗi thì cần một bản sao thứ hai.
Trên một pool chỉ có một ổ đĩa, ZFS sẽ thông báo cho bạn biết sự thật và dừng lại ở đó. zpool status -v báo cáo lỗi như sau:
status: One or more devices has experienced an error resulting in data
corruption.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
errors: Permanent errors have been detected in the following files:
/tank/data/archive.tarTệp tin bị lỗi sẽ được nêu tên. Nếu là ext4, nó sẽ trả về các byte dữ liệu đó mà không có cảnh báo nào, vì vậy đây đã là một giá trị hữu ích. ZFS vẫn không thể sửa lỗi vì không có bản sao thứ hai trong pool để khôi phục.
Với một mirror, thao tác đọc tương tự sẽ được thực hiện từ phía ổ đĩa tốt, block lỗi sẽ được ghi đè, và sự kiện này sẽ xuất hiện trong cột CKSUM của zpool status. Đó là cơ chế tự phục hồi, và nó yêu cầu hai thiết bị.
sudo zpool create -o ashift=12 tank mirror /dev/disk/by-id/DISK1 /dev/disk/by-id/DISK2Trên một VPS, bộ nhớ lưu trữ của host thường đã có tính dự phòng, thường là RAID 10 bên dưới hypervisor. Điều đó bảo vệ bạn trước việc ổ đĩa bị hỏng hoàn toàn. Nó không cho bạn biết khi nào một block dữ liệu trả về bị sai, vì mảng RAID không có cách nào để biết bản sao nào là đúng. ZFS thì biết, vì nó so sánh dữ liệu với checksum mà chính nó đã ghi.
Nếu bạn chỉ có một ổ đĩa ảo và muốn có khả năng tự sửa lỗi, sudo zfs set copies=2 tank/important sẽ lưu trữ hai bản sao của mỗi block trong dataset đó trên cùng một ổ đĩa. Nó làm tăng gấp đôi dung lượng sử dụng của dataset đó, giúp bạn vượt qua lỗi block, nhưng sẽ vô tác dụng khi toàn bộ volume biến mất.
Một lệnh scrub sẽ đọc mọi thứ trong pool và xác minh chúng.
sudo zpool scrub tank
zpool status tankMột pool khỏe mạnh sẽ kết thúc bằng một dòng như scan: scrub repaired 0B in 00:04:11 with 0 errors. Hãy đặt lịch chạy lệnh này; hàng tháng là đủ cho một pool nhỏ.
systemctl list-unit-files 'zfs-scrub*'
sudo systemctl enable --now zfs-scrub-monthly@tank.timerDataset là đơn vị quản lý chính sách
Dataset là một filesystem nằm trong pool, việc tạo mới rất nhanh chóng, vì vậy hãy tạo riêng một dataset cho mỗi tác vụ. Các thuộc tính được kế thừa từ pool xuống, nghĩa là bạn chỉ cần thiết lập mặc định một lần và ghi đè tại nơi cần thiết.
sudo zfs create tank/data
sudo zfs create tank/pg
sudo zfs set compression=lz4 tank
sudo zfs set atime=off tank
sudo zfs set quota=20G tank/data
sudo zfs set recordsize=16K tank/pg
zfs get -r compression,compressratio,quota tankCompression là thuộc tính mà mọi người thường bỏ qua vì lo ngại, nhưng điều đó hoàn toàn ngược lại. lz4 tiêu tốn một lượng nhỏ CPU nhưng giảm số byte cần ghi xuống đĩa, vì vậy với dữ liệu có thể nén được, nó thường giúp tăng tốc độ đọc và ghi. zstd nén mạnh hơn và tốn nhiều CPU hơn, phù hợp cho các file log và dữ liệu lưu trữ ít khi đọc lại. Hãy kiểm tra hiệu quả thực tế bằng zfs get compressratio tank, và lưu ý rằng tỷ lệ này chỉ tính trên dữ liệu được ghi sau khi thuộc tính đã được thiết lập.
recordsize là kích thước block lớn nhất mà một dataset ghi, mặc định là 128K. Một database ghi các trang 8 KiB vào các record 128 KiB sẽ biến một thao tác ghi nhỏ thành việc đọc toàn bộ record, sửa đổi, rồi ghi đè trở lại. Hãy thiết lập recordsize=16K trên dataset của database trước khi nạp dữ liệu, vì thuộc tính này chỉ áp dụng cho các block mới được ghi.
quota là cách bạn ngăn một dataset làm đầy pool. Một ZFS pool gần đầy 100% sẽ chạy chậm và rất khó để dọn dẹp, vì vậy hãy chủ động để lại dung lượng trống.
Snapshots không tốn dung lượng cho đến khi dữ liệu thay đổi
ZFS không bao giờ ghi đè lên một block đang hoạt động. Nó ghi một block mới và cập nhật các con trỏ, đó chính là ý nghĩa của cơ chế copy-on-write. Một snapshot chỉ là một ghi chú với nội dung "giữ lại các block mà dataset này đang trỏ tới ngay lúc này", vì vậy việc tạo snapshot diễn ra tức thì và miễn phí.
sudo zfs snapshot tank/data@2026-08-11
zfs list -t snapshot -o name,used,refer -r tank/dataCột USED của một snapshot là dung lượng chỉ được chiếm giữ bởi riêng snapshot đó. Nó bắt đầu gần bằng 0 và tăng dần khi bạn thay đổi hoặc xóa dữ liệu, vì các block cũ không còn có thể được giải phóng nữa.
Việc khôi phục một file không cần bước restore nào cả.
ls /tank/data/.zfs/snapshot/
cp /tank/data/.zfs/snapshot/2026-08-11/notes.txt /tank/data/notes.txtThư mục .zfs bị ẩn ngay cả với ls -a cho đến khi bạn chạy sudo zfs set snapdir=visible tank/data. Hãy tạo snapshot trước khi bạn cần đến nó, vì nếu không có snapshot, một lệnh rm -rf nhầm lẫn sẽ đẩy bạn vào quy trình khôi phục ext4, bắt đầu bằng việc unmount ổ đĩa và mọi thứ sẽ trở nên tệ hơn từ đó.
Rollback sẽ loại bỏ mọi thứ đã được ghi kể từ thời điểm snapshot.
sudo zfs rollback tank/data@2026-08-11Nó sẽ từ chối thực hiện khi tồn tại các snapshot mới hơn, và -r sẽ xóa các snapshot mới hơn đó để tiếp tục. Hãy đọc kỹ tên dataset hai lần trước khi bạn nhấn enter.
Snapshot không phải là backup. Nó nằm trong cùng một pool, trên cùng một volume, trên cùng một máy chủ. Một volume bị lỗi hoặc một zpool destroy sẽ kéo theo cả snapshot và dữ liệu cùng biến mất. Snapshot bảo vệ bạn khỏi những sai sót của chính bạn rm và khỏi một bản nâng cấp lỗi, vốn bao phủ rất nhiều sự cố thực tế, nhưng chúng không bảo vệ bạn khỏi bất cứ điều gì xảy ra với chính cái pool đó. Lập luận đầy đủ được trình bày tại đây: tại sao VPS snapshot không phải là backup.
Gửi và nhận: replication trong một lệnh
zfs send chuyển đổi một snapshot thành luồng byte trên standard output, và zfs receive chuyển đổi luồng đó ngược lại thành một dataset. Bản sao đầu tiên là một full send.
sudo zfs snapshot tank/data@daily-2026-08-11
sudo zfs send tank/data@daily-2026-08-11 | ssh backup.example.com "sudo zfs recv -F backup/data"Sau đó, chỉ gửi những thay đổi giữa hai snapshot.
sudo zfs snapshot tank/data@daily-2026-08-12
sudo zfs send -i tank/data@daily-2026-08-11 tank/data@daily-2026-08-12 | ssh backup.example.com "sudo zfs recv backup/data"Phía nhận phải giữ snapshot mà bạn đang gửi từ đó. Khi không có, quá trình nhận sẽ dừng với cannot receive incremental stream: most recent snapshot of backup/data does not match incremental source, vì ZFS không có base để áp dụng các khác biệt. Hãy gửi từ một snapshot mà cả hai phía đều có, hoặc bắt đầu lại với một full send.
Cấp quyền trên đích thay vì sử dụng root từ xa: sudo zfs allow -u backupuser create,mount,receive backup/data.
Đây là một bản backup off-site thực thụ với một điều kiện. Phía xa phải là một ZFS pool, vì object storage không thể nhận một luồng dữ liệu. Khi đích của bạn là storage tương thích S3 hoặc một host Linux thông thường, hãy sử dụng công cụ hỗ trợ, và restic backup từ một VPS sẽ hướng dẫn cách thực hiện đó.
Tại sao ZFS lại dùng nhiều RAM đến vậy? ARC
ARC (adaptive replacement cache) là bộ nhớ đệm đọc của ZFS. Nó nằm trong bộ nhớ kernel thay vì page cache thông thường của Linux, vì vậy free -h không báo cáo nó trong mục buff/cache. Nó được tính là bộ nhớ đang sử dụng. Một máy chủ ZFS trông có vẻ gần đầy RAM thường là do cache đang "ấm", và đây là nguyên nhân của hầu hết các báo cáo kiểu "ZFS ngốn hết RAM của tôi".
Giới hạn mặc định được đặt ở mức cao một cách có chủ đích. OpenZFS 2.3 đặt kích thước ARC tối đa bằng giá trị lớn hơn giữa (RAM trừ đi 1 GiB) và (5/8 RAM). OpenZFS 2.2 trở về trước sử dụng một nửa RAM trên Linux, trong khi FreeBSD đã áp dụng quy tắc mới này từ lâu. Chạy zfs version để xem hệ thống của bạn đang áp dụng quy tắc nào.
The data behind this chart
[
{
"label": "2 GB VPS",
"openzfs_2_2_linux_gib": 1,
"openzfs_2_3_gib": 1.25
},
{
"label": "4 GB VPS",
"openzfs_2_2_linux_gib": 2,
"openzfs_2_3_gib": 3
},
{
"label": "8 GB VPS",
"openzfs_2_2_linux_gib": 4,
"openzfs_2_3_gib": 7
},
{
"label": "16 GB VPS",
"openzfs_2_2_linux_gib": 8,
"openzfs_2_3_gib": 15
}
]Những con số đó là quy tắc mặc định được ghi trong tài liệu cho các kích thước instance phổ biến, không phải là số đo thực tế từ một máy chủ đang chạy. Trên một instance 4 GB, quy tắc 2.3 cho phép ARC đạt mức 3 GiB. Cùng máy chủ đó nhưng chạy bản 2.2 sẽ dừng ở mức 2 GiB. Một instance 2 GB theo quy tắc 2.3 vẫn cho phép 1.25 GiB. Ứng dụng của bạn sẽ nhận được phần còn lại.
Hãy đọc các con số thực tế từ máy chủ của chính bạn thay vì tin vào bảng trên:
grep -E '^(size|c_max) ' /proc/spl/kstat/zfs/arcstats
arc_summary | head -n 20Cột thứ ba là đơn vị byte. c_max là giới hạn tối đa đang được áp dụng, và size là dung lượng mà ARC đang thực sự chiếm giữ.
ARC có trả lại bộ nhớ. Kernel sẽ báo hiệu áp lực bộ nhớ và ARC sẽ co lại. Vấn đề nằm ở thời điểm, vì việc co lại được kích hoạt bởi chính áp lực đó, nên một tiến trình yêu cầu vài trăm MiB cùng lúc có thể gặp OOM (out of memory) killer trong khi ARC vẫn đang trong quá trình giải phóng. Trên một máy chủ 2 GB chạy cơ sở dữ liệu và web server, đây không phải là sự kiện hiếm gặp. Tài liệu OpenZFS cũng nói điều tương tự về việc thay đổi thủ công: việc hạ thấp giới hạn "sẽ không khiến ARC co lại nếu không có áp lực bộ nhớ để thúc đẩy việc đó".
Cách giới hạn ARC trên VPS nhỏ
Hãy xác định dung lượng bộ nhớ cho workload trước. Cộng tổng nhu cầu của database và ứng dụng, để lại một khoảng dự phòng cho hệ điều hành, phần còn lại dành cho ARC. Trên instance 4 GB chạy Postgres và một ứng dụng web, mức 512 MiB đến 1 GiB cho ARC là điểm khởi đầu hợp lý.
Thiết lập trực tiếp bằng byte. Đây là mức 1 GiB.
echo 1073741824 | sudo tee /sys/module/zfs/parameters/zfs_arc_maxLưu cấu hình để áp dụng sau khi reboot.
echo 'options zfs zfs_arc_max=1073741824' | sudo tee /etc/modprobe.d/zfs.conf
sudo update-initramfs -uBước initramfs rất quan trọng vì module có thể load từ initramfs trước khi root filesystem được mount, nghĩa là nó sẽ không đọc file bạn vừa tạo. Sau khi reboot, xác nhận lại bằng dòng c_max từ arcstats.
Có hai lưu ý từ tài liệu hướng dẫn. Bạn không thể đặt giá trị về 0 khi hệ thống đang chạy, nên muốn hoàn tác thì phải sửa file và reboot. Việc giảm con số này cũng không làm ARC co lại ngay lập tức.
Trên FreeBSD, giới hạn tương tự nằm trong sysctl tại vfs.zfs.arc. Chạy sysctl vfs.zfs.arc để xem các giá trị hiện tại và tên chính xác mà phiên bản của bạn sử dụng, sau đó ghi giá trị tối đa vào /boot/loader.conf.
Thêm hai quy tắc bộ nhớ cho server nhỏ. Hãy tắt deduplication, vì bảng dedup nằm trên RAM và quy tắc phổ biến là cần 1 đến 3 GB RAM cho mỗi TB dữ liệu duy nhất. Đừng đặt swap trên zvol (một block device tạo từ pool), vì việc swap thông qua filesystem đang cố giải phóng bộ nhớ có thể gây deadlock máy chủ. Hãy giữ swap trên một partition thông thường hoặc một file swap nằm ngoài pool.
Khi nào ext4 hoặc XFS kết hợp với restic là lựa chọn tốt hơn
ZFS phát huy hiệu quả trên máy chủ có dư RAM và ổ đĩa thứ hai. Ngoài trường hợp đó, một filesystem thông thường kết hợp với công cụ backup chuyên dụng sẽ tối ưu hơn. Hãy chọn ext4 hoặc XFS khi:
- Instance có 2 GB hoặc 4 GB RAM và workload cần sử dụng toàn bộ tài nguyên đó.
- Chỉ có một ổ đĩa ảo và không có bản sao thứ hai, nên ZFS chỉ giúp bạn phát hiện lỗi mà không thể tự sửa chữa.
- Đích đến của bản backup là object storage hoặc một host Linux thông thường, nơi không thể tiếp nhận luồng
zfs send. - Bạn chạy Debian với DKMS và không muốn gặp rủi ro khi nâng cấp kernel mà module chưa được build kịp.
- Bạn cần ZFS trên filesystem gốc (root) nhưng image của nhà cung cấp chỉ hỗ trợ ext4.
Hãy giữ lại ZFS khi bạn có một volume dữ liệu riêng biệt, dư thừa RAM (từ 8 GB trở lên là mức thoải mái), và một kế hoạch sử dụng snapshot cùng zfs send thay vì chỉ bật chúng lên cho có. Với mọi trường hợp khác, ext4 kết hợp với restic để ghi các bản backup đã mã hóa, deduplicate vào bộ lưu trữ mà máy chủ không kiểm soát sẽ đạt được hiệu quả tương đương mà không tốn tài nguyên RAM.
Các lỗi thường gặp và thông báo tương ứng
Pool biến mất sau khi reboot. zpool status in ra no pools available. Dịch vụ import đọc file /etc/zfs/zpool.cache, vì vậy nếu pool không có trong file này, nó sẽ không được tự động import khi khởi động. sudo zpool import liệt kê các pool có thể import, sudo zpool import tank khôi phục lại pool, và sudo zpool set cachefile=/etc/zfs/zpool.cache tank lưu cấu hình để pool tự động mount ở các lần boot sau. Một pool chưa được export sạch sẽ từ hệ thống khác sẽ báo cannot import 'tank': pool may be in use from other system, và sudo zpool import -f tank sẽ ghi đè trạng thái đó khi bạn chắc chắn không có host nào khác đang sử dụng nó.
modprobe: FATAL: Module zfs not found in directory /lib/modules/6.12.0-... trên Debian sau khi nâng cấp kernel. DKMS không build được cho kernel mới, thường do thiếu gói headers tương ứng. dkms status hiển thị các module đã build cho từng kernel. sudo apt install -y linux-headers-$(uname -r) sau đó là sudo dkms autoinstall sẽ build lại module, và sudo zpool import tank sẽ khôi phục pool.
Pool đã đầy nhưng bạn đã xóa file. Dữ liệu đã xóa vẫn nằm trên đĩa nếu còn snapshot tham chiếu đến nó, dẫn đến việc du và df hiển thị dung lượng khác nhau. zfs list -o space -r tank chia nhỏ mức sử dụng thành USEDDS và USEDSNAP, nếu USEDSNAP lớn thì đó chính là nguyên nhân. Xóa các snapshot cũ bằng sudo zfs destroy tank/data@2026-06-01 để giải phóng dung lượng.
Số lượng CKSUM tăng lên trong zpool status. Có thành phần bên dưới ZFS trả về dữ liệu lỗi. Trên cấu hình mirror, con số này chỉ là cảnh báo vì block dữ liệu đã được tự động sửa. Trên pool chỉ có một đĩa, file đó đã bị hỏng, zpool status -v sẽ chỉ ra tên file, và bạn cần khôi phục file đó từ bản backup nằm ngoài pool này.
Máy chủ chậm và đang swap. Giới hạn ARC như hướng dẫn ở trên, sau đó chạy arc_summary và kiểm tra tỷ lệ hit ratio. Nếu ARC quá nhỏ để chứa tập dữ liệu đang làm việc, mọi thao tác đọc đều phải truy xuất xuống đĩa. Khi đó, một filesystem thông thường sử dụng page cache sẽ cho hiệu năng tốt hơn.
FAQ
ZFS cần bao nhiêu RAM trên một VPS?
ZFS có thể chạy trên một instance 2 GB. Câu hỏi thực sự là bạn còn lại bao nhiêu RAM cho ứng dụng của mình. Nếu không tinh chỉnh, OpenZFS 2.3 cho phép ARC tăng trưởng đến giá trị lớn hơn giữa (RAM trừ đi 1 GiB) và (5/8 RAM), vì vậy một máy chủ 4 GB có thể cấp 3 GiB cho cache. Hãy đặt zfs_arc_max thành một con số mà workload của bạn có thể chia sẻ, sau đó xác nhận bằng cách đọc dòng c_max từ /proc/spl/kstat/zfs/arcstats.
ZFS snapshot có phải là bản backup không?
Không. Một snapshot nằm trong cùng pool với dữ liệu gốc. Nó giúp bạn sống sót sau một lần rm lỗi hoặc nâng cấp thất bại, nhưng nó sẽ mất cùng với pool hoặc instance. Hãy biến nó thành bản backup bằng cách gửi nó sang máy khác bằng zfs send, hoặc chạy một công cụ backup ghi dữ liệu vào bộ nhớ mà máy chủ này không kiểm soát.
ZFS có hoạt động giống nhau trên FreeBSD và Linux không?
Cùng một codebase từ OpenZFS 2.0 vào tháng 12 năm 2020, cùng các lệnh, cùng định dạng trên đĩa, và các pool có thể di chuyển qua lại giữa chúng. Sự khác biệt nằm ở cách đóng gói. FreeBSD tích hợp sẵn ZFS trong hệ thống cơ sở. Trên Linux, mỗi bản phân phối quyết định cách làm riêng: Ubuntu build module vào các gói kernel của họ, trong khi Debian build trên máy của bạn bằng DKMS, vì vậy một lần nâng cấp kernel có thể khiến bạn không có module cho đến khi quá trình rebuild hoàn tất.
ZFS có thể sửa lỗi hỏng dữ liệu trên VPS chỉ có một ổ đĩa không?
Nó phát hiện lỗi hỏng và chỉ ra file bị lỗi, nhưng không thể tự sửa vì việc sửa chữa cần một bản sao thứ hai của block đó. zfs set copies=2 trên một dataset sẽ cung cấp cho bạn bản sao thứ hai đó với dung lượng gấp đôi, giúp xử lý một block bị hỏng nhưng không cứu được nếu mất cả volume. Một mirror trên hai volume mới là giải pháp thực sự có khả năng tự phục hồi.
Nén dữ liệu có làm chậm máy chủ không?
lz4 thường làm cho máy chủ nhanh hơn. Các block được nén đồng nghĩa với việc số byte ghi và đọc ít hơn, và chi phí CPU cho mỗi block là rất nhỏ so với dung lượng đĩa tiết kiệm được. Hãy đặt compression=lz4 tại root của pool để mọi dataset đều kế thừa, sau đó kiểm tra zfs get compressratio tank sau khi dữ liệu thực tế đã được ghi vào.