Mở rộng RAIDZ trên TrueNAS: thêm ổ không cần dựng lại pool

Mở rộng RAIDZ trên TrueNAS: thêm ổ không cần dựng lại pool

TrueNAS lưu dữ liệu bằng ZFS. Dữ liệu nằm trong pool, pool ghép từ các vdev. Vdev RAIDZ gần giống RAID 5/RAID 6 mà dân Synology đã quen: RAIDZ1 chịu được 1 ổ chết, RAIDZ2 chịu được 2.

Xem video tóm tắt: Mở rộng RAIDZ trên TrueNAS: thêm ổ không cần dựng lại pool

RAIDZ expansion là gì mà dân TrueNAS chờ mòn mỏi?

TrueNAS lưu dữ liệu bằng ZFS. Dữ liệu nằm trong pool, pool ghép từ các vdev. Vdev RAIDZ gần giống RAID 5/RAID 6 mà dân Synology đã quen: RAIDZ1 chịu được 1 ổ chết, RAIDZ2 chịu được 2.

Cái khổ là suốt nhiều năm, vdev RAIDZ cứng đầu như ông bác về hưu: tạo ra 4 ổ thì 4 ổ đến cuối đời. Pool đầy mà muốn thêm chỗ thì chỉ có ba đường: mua nguyên một cụm ổ để tạo vdev mới, thay lần lượt từng ổ bằng ổ to hơn, hoặc backup hết rồi đập pool dựng lại.

RAIDZ expansion (trên giao diện TrueNAS gọi là Extend) gỡ đúng nút thắt đó. Cắm thêm một ổ vào vdev RAIDZ đang chạy, ZFS tự dàn lại dữ liệu sang ổ mới, pool vẫn online từ đầu đến cuối.

Nó giải quyết mấy chuyện rất đời:

  • Nâng cấp theo túi tiền: mỗi lần một ổ, không phải gom tiền mua cả cụm.
  • Không phải tắt dịch vụ: SMB share, app, máy chủ media vẫn chạy trong lúc vdev dãn ra, chỉ chậm hơn thường ngày.
  • Giữ nguyên mọi thứ: dataset, snapshot, phân quyền, share vẫn như cũ, không phải cấu hình lại.
  • Không giảm mức dự phòng: RAIDZ2 vẫn chịu 2 ổ chết, kể cả khi đang expand.

Vài tình huống thực tế:

  • Nhà có NAS 5 khay, 4 ổ RAIDZ1 chứa ảnh và video của con từ lúc lọt lòng, giờ đầy 85%. Khay thứ năm còn trống. Mua đúng một ổ, cắm vào, Extend. Khỏi phải thuyết trình với bộ tài chính trong nhà về khoản mua bốn ổ mới.
  • Studio nhỏ mua máy 8 khay nhưng mới đủ tiền 4 ổ. Dựng RAIDZ2 4 ổ trước, quý sau có dự án thì thêm ổ thứ năm, thứ sáu.
  • Người chuyển từ Synology sang, quen cảnh “cắm thêm ổ vào SHR là xong”. Giờ TrueNAS cũng làm được việc tương tự.

Định vị nhanh: Extend gần giống thêm ổ vào SHR/RAID 5 trên Synology. Khác biệt lớn nhất nằm ở con số dung lượng sau khi nới: nó “khiêm tốn” hơn thực tế, và đây là chỗ khiến nhiều người tưởng mình làm hỏng. Phần dưới nói kỹ.

Sơ đồ RAIDZ expansion trên TrueNAS: cắm thêm một ổ vào vdev RAIDZ đang chạy, bấm Extend, ZFS dàn lại dữ liệu trong lúc pool vẫn online

Vì sao chọn Extend thay vì các cách khác

CáchỔ cần muaDowntimeHợp khi
Extend vdev RAIDZ1 ổ/lầnKhôngCòn khay trống
Thêm vdev mớiCả cụmKhôngNhiều khay trống
Thay ổ lớn hơnThay cả vdevKhôngHết khay
Đập pool dựng lạiTùyCó, lâuMuốn đổi layout

Thêm vdev mới chỉ đáng khi bạn có nhiều khay trống và đủ tiền mua cả cụm. Vdev mới nên cùng mức dự phòng với vdev cũ, vì pool chết khi bất kỳ vdev nào chết. Thay ổ lớn hơn là đường của máy đã kín khay, và dung lượng chỉ tăng khi ổ cuối cùng trong vdev được thay xong. Còn đập pool chỉ cần khi muốn đổi layout, ví dụ từ RAIDZ1 lên RAIDZ2. Extend không làm được việc này.

Cây quyết định chọn cách nới dung lượng pool TrueNAS: đập pool, thay ổ lớn hơn, thêm vdev mới hoặc Extend vdev RAIDZ

Trước khi bấm Extend: kiểm tra 5 thứ

Phiên bản. Bản ổn định hiện hành là TrueNAS 25.10.7 “Goldeye” (phát hành 02/09/2026, OpenZFS 2.3.9). TrueNAS 27 (trước đây gọi là 26) mới ở RC.1 từ 06/10/2026, bản chính thức dự kiến đầu tháng 12/2026. Đừng đem RC lên máy chứa dữ liệu thật. TrueNAS CORE 13.3 đã hết hạn hỗ trợ và không có RAIDZ expansion; muốn dùng thì phải chuyển sang 25.10.Feature flag của pool. SSH vào (hoặc mở System → Shell) rồi gõ:

zpool get feature@raidz_expansion tank

Thay tank bằng tên pool của bạn. Ra enabled hoặc active là được. Ra disabled nghĩa là pool tạo từ bản cũ, phải Upgrade pool trước (xem cạm bẫy số 2).
Dung lượng ổ mới. Ổ mới phải bằng hoặc lớn hơn ổ nhỏ nhất trong vdev. Lớn hơn vẫn dùng được, nhưng phần dư nằm không cho đến khi cả vdev cùng lên dung lượng đó.Pool đang khỏe. zpool status không báo lỗi, scrub gần nhất sạch, SMART ổn. Expansion đọc lại toàn bộ dữ liệu, ổ nào đang yếu sẽ lộ ra đúng lúc này.Backup. Expansion được thiết kế để giữ an toàn dữ liệu từ đầu đến cuối. Nhưng thiết kế tốt đến đâu cũng không thay được một bản backup nằm ngoài NAS, nhất là trước một tác vụ đụng vào mọi block trong vdev.

RAID 1 - A mirrored array
Ảnh: Free the Image (flickr) CC BY

Bảng dung lượng 2–8 ổ: con số nên biết trước khi mua

RAIDZ không chia dung lượng theo kiểu “bỏ 1 ổ, bỏ 2 ổ”. ZFS cấp phát theo từng block, mỗi block có parity riêng và được đệm (padding) cho tròn số sector, nên tỉ lệ dùng được thấp hơn phép chia trên giấy.

Bảng dưới tính theo công thức cấp phát của OpenZFS, với recordsize 128K và ổ sector 4K (ashift=12), chưa trừ metadata và phần dự trữ của ZFS:

Số ổMirror (từng cặp)RAIDZ1RAIDZ2
250%——
3—66,7%—
450%72,7%48,5%
5—80%59,3%
650%80%66,7%
850%84,2%71,1%

RAIDZ1 5 ổ và 6 ổ cùng ra 80%, không phải gõ nhầm đâu. Block 128K chia không chẵn cho 5 ổ dữ liệu, phần padding ăn mất cái lợi của ổ thêm vào.

Con số đáng ngẫm nhất: RAIDZ2 4 ổ chỉ còn khoảng 48,5%, ít hơn cả 2 cặp mirror. Với zvol 16K cho máy ảo thì còn khoảng 44%. Định dừng ở 4 ổ và chạy nhiều VM thì 2 cặp mirror vừa nhiều chỗ hơn vừa nhanh hơn. Đổi lại, RAIDZ2 chịu được 2 ổ chết bất kỳ, còn mirror chỉ chịu 1 ổ mỗi cặp.

Thêm nữa, con số dung lượng báo cáo bị “khóa” theo tỉ lệ lúc tạo vdev (giải thích ở phần dưới). Lời khuyên thực dụng vì thế là: dựng vdev ban đầu với nhiều ổ nhất mà ngân sách cho phép, đừng cố tình bắt đầu thật hẹp rồi trông chờ Extend gánh hết.

Extend từng bước trên giao diện TrueNAS 25.10

  1. Lắp ổ mới vào khay trống. Ổ từng dùng ở máy khác thì vào Storage → Disks, chọn ổ và Wipe để xóa phân vùng cũ. Đối chiếu số serial trước khi bấm, đừng tin vào thứ tự khay.
  2. Vào Storage, tìm pool cần nới, bấm View VDEVs.
  3. Chọn đúng vdev RAIDZ (trong cây hiển thị dạng RAIDZ1/RAIDZ2), bấm Extend.
  4. Chọn ổ mới trong danh sách rồi xác nhận. Đọc kỹ hộp thoại trước khi bấm: thao tác này không hoàn tác được.
  5. Theo dõi tiến độ trong mục Jobs trên thanh trên cùng, hoặc bằng lệnh ở phần tiếp theo.

Hướng dẫn cũ trên mạng hay bảo vào “Manage Devices”, nhưng trên 25.10 không còn tên đó. Mỗi lần chỉ thêm được một ổ: muốn thêm hai ổ thì Extend ổ thứ nhất, chờ xong hẳn rồi mới tới ổ thứ hai.

Theo dõi và kiểm tra kết quả

zpool status -v tank
zpool list -v tank

Trong zpool status có dòng expand: cho biết đã chép bao nhiêu, tốc độ và thời gian ước tính còn lại. Thời gian tỉ lệ với lượng dữ liệu đã ghi chứ không theo dung lượng ổ. Pool gần rỗng xong rất nhanh. Pool HDD đầy nhiều TB có thể chạy hàng ngày.

Trong lúc đó pool vẫn đọc ghi bình thường, chỉ chậm hơn. Dời các job nặng (scrub, replication lớn) ra sau; có UPS thì đây là lúc nó đáng tiền nhất. Xong xuôi, zpool list -v sẽ cho thấy vdev đã thêm ổ và SIZE tăng lên.

Vì sao thêm ổ 8TB mà dung lượng không tăng 8TB

Hỏi sau Extend thì đây là câu số một. Câu trả lời có hai lớp.

Lớp một: dữ liệu cũ giữ tỉ lệ cũ. Expansion dàn các block sang nhiều ổ hơn nhưng không tính lại parity cho từng block. Block ghi lúc vdev có 4 ổ vẫn mang tỉ lệ dữ liệu/parity của 4 ổ. Chỉ dữ liệu ghi sau khi expand mới hưởng tỉ lệ của vdev rộng.

Lớp hai: con số báo cáo dùng tỉ lệ cũ. Tài liệu chính thức xác nhận dung lượng báo cáo vẫn tính theo tỉ lệ parity cũ, kể cả sau khi đã ghi lại dữ liệu. Tức là dashboard “nói khiêm tốn”: thực tế bạn chứa được nhiều hơn con số hiển thị.

Ví dụ ước lượng: RAIDZ2 4 × 8TB nới lên 6 × 8TB, tổng thô 48TB. Con số báo cáo vẫn theo tỉ lệ khoảng 48,5%, tức chừng 23TB. Một vdev RAIDZ2 6 ổ tạo mới từ đầu sẽ báo khoảng 66,7%, chừng 32TB. Khoảng chênh gần 9TB đó vẫn còn nguyên, chỉ là không hiện trên đồng hồ. Giao diện TrueNAS lại hiển thị theo TiB nên số bạn thấy còn thấp hơn nữa.

Hệ quả: cảnh báo pool sắp đầy sẽ kêu sớm hơn mức thật. Không hại gì, biết trước là được.

Lấy lại tỉ lệ mới cho dữ liệu cũ bằng zfs rewrite (tùy chọn)

TrueNAS 25.10 có lệnh zfs rewrite, nhưng giao diện chưa có nút tương ứng. Lệnh này ghi lại các block của file tại chỗ: nội dung giữ nguyên, block mới theo tỉ lệ của vdev rộng. Cách thủ công tương đương là copy sang dataset mới rồi xóa bản cũ.

Bẫy nằm ở snapshot. Block cũ còn bị snapshot giữ thì ZFS không giải phóng được, nên rewrite làm dung lượng đã dùng tăng chứ không giảm, cho đến khi các snapshot đó hết hạn. Kiểm tra trước:

zfs list -t snapshot -r tank/media
zfs rewrite -r /mnt/tank/media

Chạy qua SSH trong tmux, vì Shell trên giao diện web có thể ngắt lệnh khi bạn đóng tab. Gõ man zfs-rewrite trên máy để xem đúng các tùy chọn của bản đang chạy. Và nhớ lớp hai ở trên: rewrite xong, con số báo cáo vẫn theo tỉ lệ cũ. Lệnh vẫn có tác dụng, chỉ là đồng hồ không thể hiện.

Home Server Rack
Ảnh: mray (flickr) CC BY-SA

Lỗi và cạm bẫy hay gặp

1. Bấm nhầm thêm VDEV mới thay vì Extend

Cái bẫy đắt nhất. Thêm một ổ lẻ thành vdev riêng nghĩa là pool có thêm một mắt xích không dự phòng: ổ đó chết là mất cả pool, dù vdev RAIDZ bên cạnh vẫn khỏe re.

Tệ hơn, pool có vdev RAIDZ thì không gỡ được vdev dữ liệu nào. Tài liệu OpenZFS và TrueNAS đều nói vậy, và cũng chẳng có Ctrl+Z. Cứu tạm: gắn thêm một ổ vào vdev đơn đó cho nó thành mirror (zpool attach). Cứu triệt để: backup rồi dựng lại pool. Phòng tránh: chỉ đi qua View VDEVs → Extend, và đọc hộp thoại xác nhận kỹ như đọc hợp đồng vay tiền.

2. Không Extend được vì pool chưa bật feature

Pool tạo từ bản TrueNAS cũ thường chưa bật raidz_expansion. Kiểm tra bằng lệnh zpool get ở trên, rồi Upgrade pool. Upgrade pool là đường một chiều: sau đó các bản TrueNAS/ZFS cũ hơn không import được pool này nữa. Chỉ làm khi chắc chắn bạn không quay về bản cũ.

3. Ổ “cùng 8TB” vẫn bị chê nhỏ

Ổ cùng nhãn dung lượng nhưng khác hãng hoặc khác đời có thể lệch nhau một chút về số sector. Một chút thôi cũng đủ để ZFS từ chối. So số byte chính xác trước khi mua thêm:

lsblk -b -o NAME,SIZE,MODEL,SERIAL

4. Một ổ hỏng đúng lúc đang expand

Tác vụ chạy nhiều ngày thì chuyện một ổ hỏng giữa chừng không còn là lý thuyết. Theo tài liệu OpenZFS, khi đó expansion tạm dừng cho đến khi vdev khỏe lại. Thay ổ hỏng bằng Replace như bình thường, chờ resilver xong, expansion tự chạy tiếp. Đừng hoảng mà rút ổ mới ra. Phòng tránh: chạy SMART long test cho cả ổ cũ lẫn ổ mới trước khi Extend.

5. Tưởng Extend nâng RAIDZ1 lên RAIDZ2

Không. Extend tăng bề rộng, không tăng parity. Thêm ổ thứ năm vào RAIDZ1 4 ổ thì được RAIDZ1 5 ổ: nhiều ổ hơn nhưng vẫn chỉ chịu được 1 ổ chết, nên xác suất gặp sự cố thực ra còn nhích lên. Muốn lên RAIDZ2 thì phải dựng lại pool.

Chọn ổ để thêm vào vdev

Expansion, resilver và scrub đều là tải đọc ghi liên tục kéo dài hàng giờ đến hàng ngày. Ổ CMR giữ tốc độ ổn định với kiểu tải này; ổ SMR (thường gặp ở ổ desktop lắp vào NAS) có thể chậm đi rõ rệt khi bộ đệm ghi đầy. Cùng một dòng sản phẩm có thể có model CMR và model SMR khác nhau, nên tra mã model trên datasheet trước khi mua.

Mua đúng bằng dung lượng ổ đang có trong vdev là kinh tế nhất. Khác hãng không sao. ZFS không quan tâm logo, nó chỉ quan tâm số byte, nên nhớ cạm bẫy số 3.

Nhu cầuWDSeagateToshiba
Gia đình/SOHO, 3–5 khayRed PlusIronWolfN300
6–8+ khay, tải nặng, VMRed ProIronWolf ProDòng MG

NAS gia đình chứa ảnh, phim, backup máy tính thì WD Red Plus, Seagate IronWolf, Toshiba N300 đều đúng tầm. Máy nhiều khay, chạy máy ảo hay cả team ghi suốt ngày thì nâng lên WD Red Pro hoặc IronWolf Pro: chịu rung tốt hơn trong khung máy đông ổ, định mức tải cao hơn, bảo hành dài hơn. Toshiba dòng MG là lựa chọn ngang tầm nếu bạn đã quen hàng enterprise.

Sau khi expand: mấy việc nên làm

  • Chạy một lượt scrub trong Data Protection → Scrub Tasks nếu chưa thấy scrub nào chạy sau khi expand xong.
  • Đưa ổ mới vào lịch SMART test như các ổ khác.
  • Ghi chú lại rằng con số dung lượng trên dashboard là con số “khiêm tốn”, để lần sau khỏi giật mình.

Còn một việc không nằm trong menu nào: kiểm tra lại bản backup ngoài NAS. RAIDZ chịu được ổ chết, nhưng không chịu được cú rm -rf lúc 2 giờ sáng.

**Ghi chú (không thuộc bài):**

- **Ba chỗ sửa sát nghĩa, không chỉ văn phong:**
- Bạn kiểm giúp xem ba chỗ này còn đúng ý không.
- Câu "chỉ làm khi chắc sẽ ở lại 25.10" giờ là "chắc chắn không quay về bản cũ". Câu cũ đọc như thể không được lên 27.
- Ý backup ở mục 5 bị chép nguyên văn câu mẫu trong style guide, nên tôi viết lại. Nếu để vậy, bài nào cũng có cùng một câu.
- Câu "khác hãng không sao" nay trỏ về cạm bẫy số 3, vì hai chỗ này đang mâu thuẫn nhau.
- **Giảm chỗ đùa:** Bài có khoảng 10 chỗ đùa, tôi giữ lại 4: ông bác về hưu, bộ tài chính trong nhà, hợp đồng vay tiền, `rm -rf` lúc 2 giờ sáng. Câu Murphy và câu "báo động sớm" đã bỏ.
- **Số liệu kỹ thuật không đổi:**
- Tôi đã tính lại cả bảng dung lượng theo cách cấp phát RAIDZ (128K, ashift=12). Mọi ô đều khớp, kể cả 44,4% cho zvol 16K.
- Mấy tên giao diện (View VDEVs, Storage → Disks → Wipe, Jobs) và cờ `-r` của `zfs rewrite` vẫn chưa kiểm trên máy ảo, như ghi chú trước đã nói.
- **Toshiba "Dòng MG":** Theo những gì tôi nhớ, Toshiba có dòng NAS riêng cho máy nhiều khay là N300 Pro, còn MG là ổ enterprise. Nếu đúng thì N300 Pro hợp ô này hơn. Tôi chưa sửa vì sửa là thêm dữ kiện mới. Nên kiểm cùng lúc với agent tra ổ cứng.

Mua NAS chính hãng

Xem tất cả →

Thiết bị NAS Synology & ổ cứng chính hãng Nhật Bản — tư vấn cấu hình, lắp đặt và bảo hành. Mua qua Shopee, giao toàn quốc.

No comments yet