Mất 1 ổ đĩa trong ZFS có cứu được không?

📌 Tổng Quan

ZFS là file system nổi bật với khả năng tự kiểm tra lỗi (checksumming), snapshot và redundancy (RAIDZ, mirror…). Tuy nhiên, khi triển khai ZFS trên hệ thống thật với hàng chục ổ đĩa, đặc biệt là RAIDZ1/2/3, thì kịch bản “mất một ổ đĩa vật lý không thể thay thế” là một tình huống khó chịu, thậm chí có thể làm mất toàn bộ pool nếu không xử lý kịp.

Bài viết này chia sẻ kinh nghiệm thực tế khi bạn:

  • Có pool ZFS lớn (ví dụ 40 ổ đĩa).
  • Một trong số đó bị hỏng vật lý hoàn toàn (chết slot, không thể thay).
  • Cần tìm cách cứu dữ liệu hoặc “làm nhẹ” pool để tiếp tục vận hành.

🧩 Mô Hình Tình Huống

[ 40 Disk vật lý ] 
        ↓ (RAIDZ2/RAIDZ3)
[ 1 Pool ZFS: datapool ]
        ↓
[ Dataset, volume, snapshot… ]

Giả sử một trong các disk đó bị chết hoàn toàn, không thể nhận diện lại dù thay ổ mới. Tức là:

  • zpool status báo FAULTED.
  • Không thể replace hoặc resilver.

🔍 Cốt lõi vấn đề

ZFS không cho phép xóa ổ đĩa ra khỏi một vdev kiểu RAIDZ.

Loại vdevCó thể xóa disk không?Có thể resilver?Dữ liệu còn nếu mất disk?
Mirror✅ Có thể✅ Có✅ Có
RAIDZ1❌ Không✅ (nếu còn slot)⚠️ Chỉ 1 disk mất được
RAIDZ2❌ Không✅ (nếu còn slot)✅ Mất 2 disk vẫn an toàn
RAIDZ3❌ Không✅ (nếu còn slot)✅ Mất 3 disk vẫn OK

Khi một disk bị hỏng vật lý và không thể thay thế, hệ thống sẽ:

zpool status
  state: DEGRADED
  errors: One or more devices could not be opened.

Nếu tiếp tục mất thêm 1 disk nữa (vượt mức redundancy), pool sẽ:

  state: FAULTED
  status: The pool is lost. Restore from backup.

✅ Giải Pháp Khả Thi

🎯 Trường hợp 1: Ổ đĩa hỏng nhưng còn thay được

zpool replace datapool sdf /dev/sdz

Sau đó ZFS sẽ resilver lại từ parity và trả pool về trạng thái ONLINE.

❌ Trường hợp 2: Không thể thay, mất slot vĩnh viễn

Không còn khả năng replace → ZFS không có cách nào chính thức để “xóa disk ra khỏi RAIDZ”.

⚠️ Giải Pháp Duy Nhất Khi Slot Hỏng

🔄 Di chuyển dữ liệu sang pool mới:

  • Tạo pool mới (datapool2) với số disk còn lại, cấu hình mới phù hợp hơn (mirror, raidz2…).
  • Tạo snapshot:
zfs snapshot datapool/mydata@snap1

Di chuyển:

zfs send datapool/mydata@snap1 | zfs receive datapool2/mydata

Kiểm tra lại dữ liệu và destroy pool cũ (nếu cần).

🔍 So Sánh Phương Án

Phương ánƯu điểmNhược điểm
Replace disk mớiNhanh, không gián đoạnCần slot/ổ thay thế
Tạo pool mới rồi migrateCấu hình lại toàn bộ, sạch sẽMất thời gian, tốn thêm dung lượng
Tiếp tục dùng RAIDZ1 khi mất 1 diskTạm ổn nếu không thêm disk hỏngRủi ro cao nếu thêm 1 disk nữa lỗi

📊 Ví Dụ RAIDZ2 với 6 ổ đĩa

RAIDZ2 - Cho phép mất 2 disk:
┌──────┬──────┬──────┬──────┬──────┬──────┐
│ sd[a]│ sd[b]│ sd[c]│ sd[d]│sd[e]*│sd[f]*│  ← 2 disk lỗi
└──────┴──────┴──────┴──────┴──────┴──────┘
→ OK, vẫn dùng được.

Thêm 1 disk nữa lỗi → FAULTED.

🧠 Lời Khuyên Thiết Kế Hệ Thống ZFS Lớn

✅ Nên

  • Chia nhỏ vdev: dùng nhiều raidz2 nhỏ thay vì 1 raidz2 lớn.
  • Dự phòng slot thay thế hoặc hot spare.
  • Ưu tiên dùng mirror vdev nếu yêu cầu downtime thấp.
  • Snapshot + backup thường xuyên, để có thể phục hồi qua zfs send.

❌ Không nên

  • Dùng RAIDZ1 khi > 10 disk.
  • Gom hết disk vào 1 vdev duy nhất.
  • Bỏ qua cảnh báo DEGRADED.

🔚 Kết Luận

Việc mất 1 ổ đĩa mà không thể thay thế trong RAIDZ là tình huống cực kỳ nguy hiểm trong ZFS. Vì ZFS không cho phép xóa 1 disk khỏi vdev kiểu RAIDZ, nên cách duy nhất là:

  • Thay disk mới nếu còn slot.
  • Tạo pool mới và migrate dữ liệu nếu không còn khả năng thay.

➡️ Thiết kế ban đầu rất quan trọng. Đừng đợi đến khi disk lỗi mới bắt đầu nghĩ cách cứu dữ liệu. Chuẩn bị từ trước luôn là phương án an toàn nhất.

Nếu bạn thấy bài viết này hữu ích, hãy chia sẻ để cộng đồng admin, sysadmin và những ai đang triển khai ZFS có thêm kiến thức và tránh mất mát không đáng có.

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