Thay đĩa an toàn trong RAIDZ2 khi nhiều ổ gặp lỗi

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

Bài viết gần đây

spot_img

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here

Đăng ký nhận thông tin bài viết qua email