Block Size và nguyên nhân làm số ổ đĩa bị giảm hiệu năng

📌 Tổng quan

Khi vận hành storage, ví dụ ở bài này là hệ thống sử dụng ZFS, đôi lúc bạn sẽ gặp dòng thông báo như sau khi kiểm tra tình trạng pool bằng zpool status:

block size: 512B configured, 4096B native

Thoạt nhìn, dòng này tưởng như bình thường, nhưng thật ra lại ẩn chứa rất nhiều điều quan trọng liên quan đến hiệu năng và tính tương thích của hệ thống đĩa. Bài viết này sẽ giúp bạn:

  • Hiểu ý nghĩa thực sự của dòng thông báo trên.
  • Biết được ưu nhược điểm của ổ đĩa 512e so với 512 native.
  • Nhận ra vì sao một số đĩa tốt lại bị giới hạn hiệu năng bởi các đĩa còn lại.
  • Có lời khuyên rõ ràng để tối ưu ZFS pool về sau.

Ví dụ thực tế đầu ra sẽ như dưới

shell> zpool status
  pool: hdd
 state: ONLINE
  scan: none requested
config:

        NAME              STATE     READ WRITE CKSUM
        data              DEGRADED     0     0     0
          raidz2-0        DEGRADED     0     0     0
            sda           ONLINE       0     0     0
            sdb           ONLINE       0     0     0
            sdc           ONLINE       0     0     0  block size: 512B configured, 4096B native
            sdd           ONLINE       0     0     0

            <đã lược bỏ một ít device_name>

            sdl           ONLINE       0     0     0
            sdm           ONLINE       0     0     0
            sdbj          ONLINE       0     0     0  block size: 512B configured, 4096B native
            sdn           ONLINE       0     0     0

            <đã lược bỏ một ít device_name>

            sdbe          ONLINE       0     0     0
            sdbg          ONLINE       0     0     0

errors: No known data errors

Phân tích disk sdcsdbj

Cả hai disk đều có:

  • Logical sector size: 512 bytes
  • Physical sector size (native): 4096 bytes
  • Điều này gây ra dòng sau khi xem zpool status, nó có thể ảnh hưởng đến hiệu năng, nhưng KHÔNG phải lỗi — và cả hai disk đều đang ở trạng thái ONLINE. Điều này có nghĩa là không cần thay thế chúng ngay chỉ vì lý do block size.

💡 Ý nghĩa của dòng thông báo

Khi ZFS in ra:

block size: 512B configured, 4096B native

Nó đang cho biết:

TrườngÝ nghĩa
512B configuredHệ điều hành/ZFS đang truy cập đĩa này bằng sector logic 512 byte
4096B nativeSector vật lý thực tế của đĩa là 4096 byte (tức 4K sector)

🔍 Tức là, ổ đĩa có khả năng hoạt động tốt nhất ở đơn vị 4096B, nhưng đang phải giả lập 512B để tương thích với hệ thống.

→ Đây là ổ 512e (512 emulated), không phải 512 native.

🔍 Phân biệt 3 loại ổ đĩa phổ biến

Loại ổ đĩaSector logicSector vật lýTên gọiHiệu năng
512 native512B512BCũ, phổ biến xưa nayThấp
512e (emulated)512B4096BTrung gianTrung bình
4K native4096B4096BMới, hiệu năng caoCao nhất

📊 Ví dụ thực tế

Giả sử bạn có ZFS pool với các ổ đĩa như sau:

sdc   → 4096B native, 512B logic → 512e
sdbj  → 4096B native, 512B logic → 512e
sda   → 512B native
sdb   → 512B native
sdd   → 512B native
...

Chỉ sdcsdbj là 512e, còn lại toàn là 512 native.

→ Kết quả: ZFS phải định dạng toàn bộ pool theo 512B (ashift=9) để đồng bộ.

Cách xác minh chính xác support của từng disk

shell> lsblk -o NAME,PHY-SEC,LOG-SEC,MODEL
NAME        PHY-SEC LOG-SEC MODEL
loop0           512     512
loop1           512     512
loop2           512     512
sda             512     512 LOGICAL VOLUME
├─sda1          512     512
└─sda9          512     512
sdb             512     512 LOGICAL VOLUME
├─sdb1          512     512
└─sdb9          512     512
sdc            4096     512 LOGICAL VOLUME
└─sdc1         4096     512
sdd             512     512 LOGICAL VOLUME
├─sdd1          512     512
└─sdd9          512     512

<đã lược bỏ 1 số device_name>

sdbf            512     512 LOGICAL VOLUME
├─sdbf1         512     512
└─sdbf9         512     512
sdbg            512     512 LOGICAL VOLUME
├─sdbg1         512     512
└─sdbg9         512     512
sdbh            512     512 MM1000GFJTE
└─sdbh1         512     512
  └─md0         512     512
    └─md0p1     512     512
sdbi            512     512 MM1000GFJTE
├─sdbi1         512     512
└─sdbi2         512     512
  └─md0         512     512
    └─md0p1     512     512
sdbj           4096     512 LOGICAL VOLUME
├─sdbj1        4096     512
└─sdbj9        4096     512

Tổng quan phát hiện được

Chỉ có 2 disk trong toàn bộ hệ thống là:

  • sdc
  • sdbj

có cấu hình block size như sau:

PHY-SEC: 4096
LOG-SEC: 512

Tức là: 4K physical sector size, nhưng 512B logical sector size → Đây chính là loại disk 512e (512-byte emulated).

Tất cả các disk còn lại:

PHY-SEC: 512
LOG-SEC: 512

→ Đây là disk 512 native — tức là thực sự chỉ hỗ trợ 512B sector.

Dưới đây là bảng phân tích tóm tắt

DiskPhysical Sector (PHY-SEC)Logical Sector (LOG-SEC)LoạiGhi chú
sdc, sdbj4096512512eCó thông báo “block size: 512B configured, 4096B native” từ ZFS
Các disk còn lại512512512 nativeKhông có cảnh báo từ ZFS vì không có mismatch

📉 Vấn đề phát sinh: “ổ tốt bị kéo hiệu suất xuống”

sdcsdbj tuy hỗ trợ block size 4096B, nhưng do pool được tạo dựa trên các ổ chỉ hỗ trợ 512B, nên chúng:

  • Bị ZFS truy cập theo 512B.
  • Dẫn đến việc ghi 512B trên nền vật lý 4096B → ZFS phải thực hiện thêm thao tác đọc-modify-ghi → hiệu suất giảm đáng kể.

🔧 Sơ đồ mô tả

Ổ 512 native:
[512B][512B][512B][512B]...

Ổ 512e:
[4096B]        ← 1 sector vật lý
 └────┬────┘
   512B logic
 → Nếu ZFS ghi 512B:
   - Phải đọc 4096B gốc
   - Ghi đè 512B
   - Ghi lại 4096B
   → Chậm!

Ổ 4K native:
[4096B] ← ghi 1 lần, nhanh và chính xác nếu ZFS dùng ashift=12

✅ Ưu điểm và nhược điểm

➕ Ưu điểm của ổ 512e

  • Vẫn tương thích tốt với hệ điều hành cũ.
  • Có khả năng hỗ trợ hiệu suất cao nếu cấu hình đúng (ashift=12).

➖ Nhược điểm

  • Nếu ZFS bị buộc dùng ashift=9 do các ổ khác yếu hơn, ổ 512e bị giảm hiệu suất đáng kể.
  • Có thể gây sai lệch khi đo benchmark nếu không hiểu rõ bản chất.

⚖️ So sánh hiệu năng (giả định workload ghi ngẫu nhiên nhỏ)

Loại ổ đĩaVới ashift=9Với ashift=12
512 native✅ tối ưu❌ lãng phí I/O
512e❌ read-modify-write → chậm✅ tối ưu
4K native❌ không tương thích✅ tốt nhất

🗣️ Lời khuyên thực tế

✅ Khi mua/triển khai hệ thống ZFS mới:

  • Ưu tiên ổ đĩa 4K native để đảm bảo hiệu năng và tối ưu I/O.
  • Luôn tạo pool với ashift=12 trừ khi bạn chắc chắn tất cả ổ là 512 native.

✅ Khi nâng cấp:

  • Khi thay ổ trong pool 512 native → nên dùng ổ 512 native để tránh mismatch.
  • Nếu muốn nâng cấp toàn bộ lên 4K:
    • Tạo pool mới với ashift=12
    • Dùng zfs send | zfs receive để migrate dữ liệu.

🤔 Vậy có nên thay disk không?

Với sdcsdbj:

  • Không cần thay. Cả hai đang ONLINE, không có lỗi đọc/ghi/cksum, chỉ có mismatch giữa block size logic và vật lý.
  • Nếu bạn muốn tối ưu hiệu suất ZFS và đồng nhất block size, bạn có thể cân nhắc thay thế dần dần các disk 512B logical / 4K physical bằng disk 4K native — nhưng không cấp thiết.

Với disk đã được thay (old OFFLINE):

  • Có thể bạn đã thay qua ssacli hoặc gắn disk mới vào đúng bay, sau đó dùng zpool replace → Đây là đúng quy trình.
  • Nếu disk mới (sdw) hoạt động tốt sau khi resilver hoàn tất, không cần thêm hành động.

📌 Kết luận

Thông báo "block size: 512B configured, 4096B native" là dấu hiệu cho thấy:

  • Ổ đĩa đang bị ép chạy ở hiệu suất thấp hơn khả năng thực tế.
  • Nguyên nhân là vì các ổ khác trong pool yếu hơn, buộc ZFS phải đồng bộ block size xuống 512B.

Hiểu rõ bản chất này giúp bạn thiết kế hệ thống lưu trữ hiệu quả hơn, tránh tình trạng “mua ổ nhanh nhưng chạy như ổ chậm”.

Nếu bạn thấy bài viết hữu ích, đừng quên chia sẻ cho anh em sysadmin khác đang dùng ZFS nhé! 🚀

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