1. Tổng quan
Trong RAIDZ2 (ZFS), hệ thống cho phép tối đa 2 ổ đĩa bị hỏng mà vẫn duy trì khả năng truy cập dữ liệu. Tuy nhiên, việc thay cùng lúc 2 ổ hỏng mặc dù lý thuyết có thể chịu được, lại tiềm ẩn nguy cơ cao mất dữ liệu trong quá trình resilver. Nguyên nhân là khi thay nhiều ổ cùng lúc, ZFS phải phục hồi dữ liệu dựa trên số lượng ổ còn lại và nếu bất kỳ ổ nào gặp lỗi đọc trong quá trình này, sẽ không còn đủ parity để tái tạo dữ liệu. Vì vậy, quy trình thay từng ổ một, theo thứ tự và có kiểm soát, là phương án an toàn nhất.
2. Rủi ro khi thay cùng lúc 2 ổ
- Khi thay 2 ổ đồng thời, ZFS sẽ rebuild dữ liệu từ một trạng thái thiếu hụt lớn hơn, giảm mức dự phòng xuống gần như RAIDZ0 trong quá trình resilver.
- Quá trình resilver gây tải I/O cao, làm tăng nguy cơ ổ còn lại phát sinh lỗi.
- Nếu ổ khác gặp bad sector trong khi resilver 2 ổ, dữ liệu ở vùng đó sẽ bị mất vĩnh viễn.
3. Cách thay đĩa an toàn trong RAIDZ2
3.1. Thứ tự thay ổ trong ví dụ 3 ổ lỗi
Giả sử 3 ổ: sdbd (FAULTED), sdap (FAULTED), sdan (DEGRADED)
shell> zpool status
pool: hdd
state: DEGRADED
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: http://zfsonlinux.org/msg/ZFS-8000-8A
scan: scrub repaired 2.82M in 0 days 14:15:07 with 5 errors on Sun Aug 10 14:39:11 2025
config:
NAME STATE READ WRITE CKSUM
hdd DEGRADED 0 0 0
raidz2-0 DEGRADED 607 0 0
sdw ONLINE 0 0 0
sdx ONLINE 0 0 0
sdy ONLINE 0 0 0
sdz ONLINE 0 0 0
sdaa ONLINE 0 0 0
sdab ONLINE 0 0 0
sdac ONLINE 0 0 0
sdad ONLINE 0 0 0
sdae ONLINE 0 0 0
sdaf ONLINE 0 0 0
sdag ONLINE 0 0 0
sdah ONLINE 0 0 0
sdai ONLINE 0 0 0
sdaj ONLINE 0 0 0
sdak ONLINE 0 0 0
sdal ONLINE 0 0 0
sdam ONLINE 0 0 0
sdan DEGRADED 997 0 0 too many errors
sdao ONLINE 0 0 0
sdap FAULTED 96 0 0 too many errors
sdaq ONLINE 0 0 0
sdar ONLINE 0 0 0
sdas ONLINE 0 0 0
sdat ONLINE 0 0 0
sdau ONLINE 0 0 0
sdav ONLINE 0 0 0
sdaw ONLINE 0 0 0
sdax ONLINE 0 0 0
sday ONLINE 0 0 0
sdaz ONLINE 0 0 0
sdba ONLINE 0 0 0
sdbb ONLINE 0 0 0
sdbc ONLINE 0 0 0
sdbd FAULTED 242 0 0 too many errors
sdbe ONLINE 0 0 0
sdbf ONLINE 0 0 0
sdbg ONLINE 0 0 0
errors: 1 data errors, use '-v' for a list
Ưu tiên thay thế
Vì cần giữ pool sống càng lâu càng tốt trong khi thay đĩa, nguyên tắc là:
- Thay ngay disk FAULTED nặng nhất — vì FAULTED = ZFS không còn đọc được bất kỳ block nào từ nó (hoặc quá nhiều lỗi đọc).
- Trong trường hợp này: sdbd (242 READ errors, FAULTED) là ứng viên thay đầu tiên.
- Tiếp theo thay disk FAULTED còn lại → sdap.
- Cuối cùng thay disk DEGRADED → sdan.
Thứ tự thay như sau.
Bước 1: Thay sdbd → chờ resilver hoàn tất.
Bước 2: Thay sdap → chờ resilver hoàn tất.
Bước 3: Thay sdan → chờ resilver hoàn tất.
Lý do chọn thứ tự này
- Mỗi disk FAULTED đang khiến ZFS hoàn toàn bỏ qua dữ liệu từ nó, nên việc rebuild lại từ parity đang dồn áp lực lớn lên 2 disk còn lỗi nhẹ hơn.
- DEGRADED vẫn còn được ZFS sử dụng để đọc một phần dữ liệu, nên nó vẫn giúp giữ pool tạm sống, cho đến khi bạn thay xong 2 disk FAULTED.
- Nếu bạn thay DEGRADED trước, việc resilver sẽ dựa vào 2 disk FAULTED — gần như chắc chắn sẽ fail ngay.
Kế hoạch hành động khẩn cấp
- Ngừng ghi mới vào pool để giảm nguy cơ lỗi thêm.
- Thay sdbd → resilver.
- Thay sdap → resilver.
- Thay sdan → resilver.
- Sau mỗi lần thay, kiểm tra
zpool status
để đảm bảo resilver hoàn tất trước khi tiếp tục thay đĩa khác.
Xóa cảnh báo tạm thời (nếu cần) bằng lệnh zpool clear
Lệnhzpool clear
nó sẽ xóa thông báo lỗi trong trạng thái hiển thị nhưng không sửa lỗi vật lý của disk đâu nhé.
Nói cách khác:
- FAULTED/DEGRADED flag biến mất → ZFS sẽ “quên” các lỗi cũ cho đến khi phát hiện lại trong lần đọc/ghi tiếp theo hoặc trong scrub tiếp theo.
- Ổ đĩa hỏng vẫn hỏng → sector bad, cơ học kém, hoặc lỗi đọc sẽ xuất hiện lại sớm.
errors: 1 data errors
vẫn ở đó → nghĩa là đã có ít nhất 1 file bị hỏng không thể khôi phục từ parity nữa. Đây là hỏng vĩnh viễn trừ khi bạn có backup để thay thế dữ liệu.
3.2. Quy trình thao tác
Ví dụ thay sdbd bằng ổ mới:
zpool offline hdd sdbd
thay ổ vật lý
zpool replace hdd sdbd /dev/newdisk
zpool status hdd # theo dõi quá trình resilver
- Sau khi
resilver
hoàn tất 100%, mới chuyển sang ổ tiếp theo.
4. Minh họa logic rủi ro
RAIDZ2 bình thường:
[O] [O] [O] [O] [O] [O] [O] [O]
^ ^
ổ hỏng 1 ổ hỏng 2 (tối đa cho phép)
Thay cùng lúc 2 ổ:
[ ] [ ] [O] [O] [O] [O] [O] [O]
↓ RAIDZ0 tạm thời trong resilver ↓
- Trong thời gian rebuild, mất thêm 1 ổ = mất dữ liệu.
5. Công cụ hỗ trợ giám sát và kiểm tra
- Open source:
smartmontools
(kiểm tra S.M.A.R.T.)scrutiny
(dashboard giám sát S.M.A.R.T.)nvme-cli
(đối với NVMe)
- Thương mại:
- HD Sentinel
- StableBit Scanner
6. Lời khuyên
- Luôn thay từng ổ một, không thay nhiều ổ cùng lúc.
- Sau mỗi lần thay, chạy scrub hoặc theo dõi resilver để đảm bảo pool ổn định.
- Duy trì backup độc lập ngoài hệ thống ZFS, vì RAID không thay thế cho backup.
- Kiểm tra S.M.A.R.T. trước khi quyết định thay ổ để xác nhận tình trạng phần cứng.
7. Kết luận
Dù RAIDZ2 chịu được 2 ổ hỏng, việc thay đồng thời 2 ổ sẽ khiến thời gian resilver trở thành khoảng mất an toàn gần như RAIDZ0, rất rủi ro. Thay từng ổ một, giám sát kỹ quá trình resilver và có backup đầy đủ là cách duy nhất để giảm nguy cơ mất dữ liệu trong tình huống nhiều ổ gặp lỗi.
Tài liệu tham khảo