Saturday, January 18, 2025

ZFS (Zettabyte File System) trên Linux

-

1. Tổng quan.

ZFS (Zettabyte File System) là một loại hệ thống File System và quản lý Volume được phát triển bởi Sun Microsystems. Nó được thiết kế để đảm bảo tính toàn vẹn dữ liệu, dễ dàng quản lý và có khả năng mở rộng lớn.

Dưới đây là một số tính năng chính của ZFS:

  • Tính toàn vẹn dữ liệu: ZFS sử dụng checksums để kiểm tra và đảm bảo tính toàn vẹn dữ liệu. Nếu dữ liệu bị hỏng và ZFS có thể sửa chữa, nó sẽ làm điều đó tự động.
  • Quản lý volume: ZFS không chỉ là một hệ thống File System, mà còn là một trình quản lý volume. Điều này nghĩa là nó có thể quản lý nhiều ổ đĩa và tạo ra một “pool” lưu trữ, cho phép bạn thêm hoặc xóa ổ đĩa mà không cần phải phân vùng hoặc định dạng.
  • RAID-Z: ZFS hỗ trợ RAID-Z, một biến thể của RAID 5 và RAID 6, nhưng không cần sử dụng ổ đĩa parity riêng biệt, giúp tăng hiệu suất và dung lượng lưu trữ.
  • Snapshots và Clones: ZFS hỗ trợ snapshots, cho phép bạn lưu lại trạng thái của hệ thống File System tại một thời điểm cụ thể. Bạn cũng có thể tạo clones từ các snapshots, cho phép bạn tạo bản sao của hệ thống File System mà không cần phải sao chép toàn bộ dữ liệu.
  • Compression và Deduplication: ZFS hỗ trợ nén và deduplication, giúp tiết kiệm không gian lưu trữ.
  • Caching: ZFS sử dụng cơ chế ARC (Adaptive Replacement Cache) để lưu trữ dữ liệu được truy cập thường xuyên vào RAM và cũng hỗ trợ L2ARC để sử dụng ổ SSD như một cache cấp 2, giúp tăng hiệu suất.
  • Scalability: ZFS được thiết kế để hỗ trợ một lượng lớn không gian lưu trữ – lên đến 18.4 zettabytes.

ZFS có sẵn trên nhiều hệ điều hành, bao gồm Linux, BSD, macOS và Solaris. Trên Linux, bạn có thể cài đặt ZFS như một module kernel.

ZFS hỗ trợ nhiều cấp độ RAID khác nhau, bao gồm:

  • RAID 0 (Striping): Dữ liệu được phân chia đều giữa các ổ đĩa. Tốc độ đọc/ghi tăng lên nhưng không có khả năng chịu đựng lỗi.
  • RAID 1 (Mirroring): Dữ liệu được sao chép giữa các ổ đĩa. Tốc độ đọc tăng lên và có khả năng chịu đựng lỗi, nhưng không gian lưu trữ hiệu quả giảm xuống một nửa.
  • RAIDZ1: Tương tự như RAID 5, RAIDZ1 sử dụng parity để cung cấp khả năng chịu đựng lỗi. Nó có thể chịu được một ổ đĩa hỏng mà không mất dữ liệu.
  • RAIDZ2: Tương tự như RAID 6, RAIDZ2 sử dụng parity kép để cung cấp khả năng chịu đựng lỗi. Nó có thể chịu được hai ổ đĩa hỏng mà không mất dữ liệu.
  • RAIDZ3: Một phiên bản của RAIDZ với ba parity, cho phép chịu được ba ổ đĩa hỏng mà không mất dữ liệu.
  • RAID 10 (Mirror of Stripes): Một sự kết hợp của RAID 0 và RAID 1, cung cấp tốc độ và khả năng chịu đựng lỗi.
  • RAID 50 (Stripe of RAIDZ sets) và RAID 60 (Stripe of RAIDZ2 sets): Những sự kết hợp của striping và RAIDZ, cung cấp tốc độ và khả năng chịu đựng lỗi.

Lưu ý rằng ZFS cũng hỗ trợ các cấu hình phức tạp hơn, bao gồm việc kết hợp nhiều cấp độ RAID khác nhau trong cùng một pool.

2. Cài đặt.

Để cài đặt Zettabyte File System bạn sử dụng lệnh sau ở bản phân phối Ubuntu.

apt install zfsutils-linux -y

3. Thực hành tạo zpool.

3.1. Ví dụ tạo Raid level cơ bản.

Dưới đây là một ví dụ mình có danh sách 60 ổ đĩa 12.7TB.

shell> lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0     7:0    0    62M  1 loop /snap/core20/1587
loop1     7:1    0  79.9M  1 loop /snap/lxd/22923
loop2     7:2    0    47M  1 loop /snap/snapd/16292
sda       8:0    0  12.7T  0 disk
sdb       8:16   0  12.7T  0 disk
sdc       8:32   0  12.7T  0 disk
sdd       8:48   0  12.7T  0 disk
sde       8:64   0  12.7T  0 disk
sdf       8:80   0  12.7T  0 disk
sdg       8:96   1     0B  0 disk
sdh       8:112  0  12.7T  0 disk
sdi       8:128  0  12.7T  0 disk
sdj       8:144  0  12.7T  0 disk
sdk       8:160  0  12.7T  0 disk
sdl       8:176  0  12.7T  0 disk
sdm       8:192  0  12.7T  0 disk
sdn       8:208  0  12.7T  0 disk
sdo       8:224  0  12.7T  0 disk
sdp       8:240  0  12.7T  0 disk
sdq      65:0    0  12.7T  0 disk
sdr      65:16   0  12.7T  0 disk
sds      65:32   0  12.7T  0 disk
sdt      65:48   0  12.7T  0 disk
sdu      65:64   0  12.7T  0 disk
sdv      65:80   0  12.7T  0 disk
sdw      65:96   0  12.7T  0 disk
sdx      65:112  0  12.7T  0 disk
sdy      65:128  0  12.7T  0 disk
sdz      65:144  0  12.7T  0 disk
sdaa     65:160  0  12.7T  0 disk
sdab     65:176  0  12.7T  0 disk
sdac     65:192  0  12.7T  0 disk
sdad     65:208  0  12.7T  0 disk
sdae     65:224  0  12.7T  0 disk
sdaf     65:240  0 931.5G  0 disk
├─sdaf1  65:241  0     1G  0 part /boot/efi
└─sdaf2  65:242  0 930.4G  0 part /
sdag     66:0    0  12.7T  0 disk
sdah     66:16   0  12.7T  0 disk
sdai     66:32   0  12.7T  0 disk
sdaj     66:48   0  12.7T  0 disk
sdak     66:64   0  12.7T  0 disk
sdal     66:80   0  12.7T  0 disk
sdam     66:96   0  12.7T  0 disk
sdan     66:112  0  12.7T  0 disk
sdao     66:128  0  12.7T  0 disk
sdap     66:144  0  12.7T  0 disk
sdaq     66:160  0  12.7T  0 disk
sdar     66:176  0  12.7T  0 disk
sdas     66:192  0  12.7T  0 disk
sdat     66:208  0  12.7T  0 disk
sdau     66:224  0  12.7T  0 disk
sdav     66:240  0  12.7T  0 disk
sdaw     67:0    0  12.7T  0 disk
sdax     67:16   0  12.7T  0 disk
sday     67:32   0  12.7T  0 disk
sdaz     67:48   0  12.7T  0 disk
sdba     67:64   0  12.7T  0 disk
sdbb     67:80   0  12.7T  0 disk
sdbc     67:96   0  12.7T  0 disk
sdbd     67:112  0  12.7T  0 disk
sdbe     67:128  0  12.7T  0 disk
sdbf     67:144  0  12.7T  0 disk
sdbg     67:160  0  12.7T  0 disk
sdbh     67:176  0  12.7T  0 disk
sdbi     67:192  0  12.7T  0 disk
sdbj     67:208  0  12.7T  0 disk

Mình dùng đoạn shell dưới để lấy nhanh danh sách ổ đĩa này.

shell> echo $(lsblk | grep '12.7T' | awk '{print "/dev/" $1}')
/dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdh /dev/sdi /dev/sdj /dev/sdk /dev/sdl /dev/sdm /dev/sdn /dev/sdo /dev/sdp /dev/sdq /dev/sdr /dev/sds /dev/sdt /dev/sdu /dev/sdv /dev/sdw /dev/sdx /dev/sdy /dev/sdz /dev/sdaa /dev/sdab /dev/sdac /dev/sdad /dev/sdae /dev/sdag /dev/sdah /dev/sdai /dev/sdaj /dev/sdak /dev/sdal /dev/sdam /dev/sdan /dev/sdao /dev/sdap /dev/sdaq /dev/sdar /dev/sdas /dev/sdat /dev/sdau /dev/sdav /dev/sdaw /dev/sdax /dev/sday /dev/sdaz /dev/sdba /dev/sdbb /dev/sdbc /dev/sdbd /dev/sdbe /dev/sdbf /dev/sdbg /dev/sdbh /dev/sdbi /dev/sdbj

Một câu lệnh đơn giản để tạo là zpool create <zpool_name> <danh sách các ổ đĩa phân biệt bởi khoảng trắng>, nếu bạn không truyền tham số raid level mặc định nó sẽ tạo Raid0, đây là một zpool dạng stripe. Trong một zpool stripe, dữ liệu được phân chia đều giữa tất cả các ổ đĩa. Điều này có thể tăng tốc độ đọc/ghi, nhưng nếu một ổ đĩa hỏng, bạn sẽ mất tất cả dữ liệu trên zpool.

zpool create zpool_vol01 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdh /dev/sdi /dev/sdj /dev/sdk /dev/sdl /dev/sdm /dev/sdn /dev/sdo /dev/sdp /dev/sdq /dev/sdr /dev/sds /dev/sdt /dev/sdu /dev/sdv /dev/sdw /dev/sdx /dev/sdy /dev/sdz /dev/sdaa /dev/sdab /dev/sdac /dev/sdad /dev/sdae /dev/sdag /dev/sdah /dev/sdai /dev/sdaj /dev/sdak /dev/sdal /dev/sdam /dev/sdan /dev/sdao /dev/sdap /dev/sdaq /dev/sdar /dev/sdas /dev/sdat /dev/sdau /dev/sdav /dev/sdaw /dev/sdax /dev/sday /dev/sdaz /dev/sdba /dev/sdbb /dev/sdbc /dev/sdbd /dev/sdbe /dev/sdbf /dev/sdbg /dev/sdbh /dev/sdbi /dev/sdbj

Nếu bạn muốn tạo một zpool với sự dự phòng (tương tự như RAID 1 hoặc RAID 5), bạn sẽ cần sử dụng từ khóa mirror hoặc raidz khi tạo zpool.

Ví dụ:

zpool create zpool_vol01 mirror /dev/sda /dev/sdb

hoặc

zpool create zpool_vol01 raidz /dev/sda /dev/sdb /dev/sdc

Lưu ý rằng việc tạo một zpool có dự phòng sẽ giảm không gian lưu trữ tổng cộng của zpool, nhưng nó sẽ tăng khả năng chịu đựng lỗi.

Nếu khi bạn chạy lệnh mà gặp thông báo này thì nó cho biết rằng thiết bị /dev/sdd đã được định dạng với hệ thống File System ‘xfs’.

Nếu bạn nhận được thông báo use '-f' to override the following errors: /dev/sda contains a filesystem of type 'xfs' trong khi đang cố gắng thực hiện một hành động nào đó ví dụ như format lại thiết bị hoặc tạo một zpool mới, điều này có thể là một cảnh báo rằng hành động của mình sẽ ghi đè lên hệ thống File System hiện tại.

shell> zpool create zpool_vol01 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdh /dev/sdi /dev/sdj /dev/sdk /dev/sdl /dev/sdm /dev/sdn /dev/sdo /dev/sdp /dev/sdq /dev/sdr /dev/sds /dev/sdt /dev/sdu /dev/sdv /dev/sdw /dev/sdx /dev/sdy /dev/sdz /dev/sdaa /dev/sdab /dev/sdac /dev/sdad /dev/sdae /dev/sdag /dev/sdah /dev/sdai /dev/sdaj /dev/sdak /dev/sdal /dev/sdam /dev/sdan /dev/sdao /dev/sdap /dev/sdaq /dev/sdar /dev/sdas /dev/sdat /dev/sdau /dev/sdav /dev/sdaw /dev/sdax /dev/sday /dev/sdaz /dev/sdba /dev/sdbb /dev/sdbc /dev/sdbd /dev/sdbe /dev/sdbf /dev/sdbg /dev/sdbh /dev/sdbi /dev/sdbj
invalid vdev specification
use '-f' to override the following errors:
/dev/sda contains a filesystem of type 'xfs'
/dev/sdb contains a filesystem of type 'xfs'
/dev/sdc contains a filesystem of type 'xfs'
/dev/sdd contains a filesystem of type 'xfs'
/dev/sdh contains a filesystem of type 'xfs'
/dev/sdad contains a filesystem of type 'xfs'
/dev/sdae contains a filesystem of type 'xfs'
/dev/sdag contains a filesystem of type 'xfs'

Nếu xác định bạn không cần dữ liệu trong thiết bị đó và có thể ghi đè thì hãy chạy lại câu lệnh zpool create với tham số -f (force) nó sẽ cố gắng ghi đè vào tạo zpool cho bạn.

zpool create -f zpool_vol01 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdh /dev/sdi /dev/sdj /dev/sdk /dev/sdl /dev/sdm /dev/sdn /dev/sdo /dev/sdp /dev/sdq /dev/sdr /dev/sds /dev/sdt /dev/sdu /dev/sdv /dev/sdw /dev/sdx /dev/sdy /dev/sdz /dev/sdaa /dev/sdab /dev/sdac /dev/sdad /dev/sdae /dev/sdag /dev/sdah /dev/sdai /dev/sdaj /dev/sdak /dev/sdal /dev/sdam /dev/sdan /dev/sdao /dev/sdap /dev/sdaq /dev/sdar /dev/sdas /dev/sdat /dev/sdau /dev/sdav /dev/sdaw /dev/sdax /dev/sday /dev/sdaz /dev/sdba /dev/sdbb /dev/sdbc /dev/sdbd /dev/sdbe /dev/sdbf /dev/sdbg /dev/sdbh /dev/sdbi /dev/sdbj

Sau khi bạn tạo xong zpool hãy sử dụng lệnh zfs list để hiển thị ngắn gọn một số thông tin ZFS (bao gồm zpools, filesystems và volumes). Trong trường hợp của mình, nó hiển thị thông tin về zpool zpool_vol01.

Dưới đây là ý nghĩa của từng cột:

  • NAME: Tên của zpool.
  • USED: Dung lượng đã được sử dụng bởi zpool và tất cả các snapshot và clones của nó.
  • AVAIL: Dung lượng còn trống có thể sử dụng cho zpool và tất cả các zpool con của nó.
  • REFER: Dung lượng dữ liệu được tham chiếu bởi zpool, không bao gồm các snapshot, clones hoặc dữ liệu không được sử dụng nữa.
  • MOUNTPOINT: Đường dẫn nơi tập dữ liệu được mount trong hệ thống.

Trong trường hợp của mình, zpool zpool_vol01 đã sử dụng 528K, còn trống 762T và có 96K dữ liệu được tham chiếu. Nó được mount tại /zpool_vol01.

shell> zfs list
NAME          USED  AVAIL     REFER  MOUNTPOINT
zpool_vol01   528K   762T       96K  /zpool_vol01

Kết quả của lệnh zpool list hiển thị thông tin về các zpool trong hệ thống. Trong trường hợp của mình nó đang hiển thị thông tin về zpool zpool_vol01.

Dưới đây là ý nghĩa của từng cột:

  • NAME: Tên của zpool.
  • SIZE: Tổng dung lượng của zpool.
  • ALLOC: Dung lượng đã được phân bổ trong zpool.
  • FREE: Dung lượng còn trống trong zpool.
  • CKPOINT: Dung lượng đã được sử dụng cho checkpoint (nếu có).
  • EXPANDSZ: Dung lượng có thể mở rộng nếu tất cả các vdev được mở rộng.
  • FRAG: Mức độ phân mảnh của zpool (tính bằng phần trăm).
  • CAP: Mức độ sử dụng của zpool (tính bằng phần trăm).
  • DEDUP: Tỷ lệ deduplication (nếu có).
  • HEALTH: Trạng thái sức khỏe của zpool.
  • ALTROOT: Đường dẫn root thay thế (nếu có).

Trong trường hợp này zpool_vol01 có tổng dung lượng 763T, đã phân bổ 528K, còn trống 763T, không phân mảnh, sử dụng 0%, không có deduplication, đang hoạt động (ONLINE) và không có altroot.

shell> zpool list
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zpool_vol01   763T   528K   763T        -         -     0%     0%  1.00x    ONLINE  -

Để xoá zpool bạn sử dụng lệnh zpool destroy <zpool_name>.

zpool destroy zpool_vol01

3.2. Ví dụ tạo Raid level nâng cao.

Với 60 ổ đĩa 14TB HDD, bạn có thể xem xét việc sử dụng RAID 10 hoặc RAID 60 trong ZFS.

RAID 10 (Mirror of Stripes).

RAID 10 kết hợp lợi ích của RAID 0 (striping) và RAID 1 (mirroring). Nó cung cấp tốc độ đọc/ghi cao (tăng IOPS) và khả năng chịu đựng lỗi (mỗi ổ đĩa có một bản sao). Tuy nhiên, điều này sẽ giảm dung lượng lưu trữ xuống một nửa.

Với cấu hình RAID 10, dung lượng lưu trữ sẽ là một nửa của tổng dung lượng lưu trữ vì mỗi ổ đĩa có một bản sao.

Vì vậy, nếu có 60 ổ đĩa, mỗi ổ có dung lượng 12.7TB, tổng dung lượng lưu trữ sẽ là 60 * 12.7TB = 762TB.

Tuy nhiên, với RAID 10, dung lượng lưu trữ hiệu quả sẽ là một nửa, tức là 762TB / 2 = 381TB.

Vì vậy, với cấu hình RAID 10 trên 60 ổ đĩa 12.7TB, bạn sẽ có khoảng 381TB dung lượng lưu trữ để sử dụng.

RAID 50 (Stripe of RAID 5 sets).

ZFS không hỗ trợ trực tiếp RAID 50 (một sự kết hợp của RAID 5 và RAID 0), nhưng bạn có thể tạo một cấu hình tương tự bằng cách tạo nhiều vdevs RAIDZ (tương đương với RAID 5) và kết hợp chúng trong cùng một zpool (tương tự như RAID 0).

Ví dụ, nếu bạn muốn tạo một zpool với 4 vdevs RAIDZ, mỗi vdev bao gồm 10 ổ đĩa, bạn có thể sử dụng lệnh sau:

zpool create zpool_vol01 \
  raidz /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj \
  raidz /dev/sdk /dev/sdl /dev/sdm /dev/sdn /dev/sdo /dev/sdp /dev/sdq /dev/sdr /dev/sds /dev/sdt \
  raidz /dev/sdu /dev/sdv /dev/sdw /dev/sdx /dev/sdy /dev/sdz /dev/sdaa /dev/sdab /dev/sdac /dev/sdad \
  raidz /dev/sdae /dev/sdag /dev/sdah /dev/sdai /dev/sdaj /dev/sdak /dev/sdal /dev/sdam /dev/sdan /dev/sdao

Lưu ý rằng RAIDZ cần ít nhất 3 ổ đĩa và mỗi vdev RAIDZ thêm vào zpool sẽ giảm hiệu suất ghi. Bạn cần cân nhắc giữa độ an toàn và hiệu suất khi chọn số lượng ổ đĩa trong mỗi vdev và số lượng vdevs trong zpool.

RAID 60 (Stripe of RAIDZ2 sets).

RAID 60 kết hợp của RAID 0 (striping) và RAIDZ2 (tương tự như RAID 6). Nó cung cấp tốc độ đọc/ghi cao và khả năng chịu đựng lỗi (có thể chịu được hai ổ đĩa hỏng trong mỗi nhóm RAIDZ2). RAID 60 cung cấp dung lượng lưu trữ hiệu quả hơn so với RAID 10, nhưng yêu cầu phức tạp hơn trong việc quản lý.

Lưu ý rằng việc chọn RAID level phụ thuộc vào nhu cầu cụ thể của bạn. Nếu IOPS là ưu tiên hàng đầu và bạn có thể chấp nhận mất một nửa dung lượng lưu trữ, RAID 10 có thể là lựa chọn tốt. Nếu bạn muốn cân nhắc giữa IOPS và không gian lưu trữ, RAID 60 có thể là lựa chọn tốt.

Để cấu hình RAID 60, bạn cần tạo nhiều nhóm RAID 6 và sau đó kết hợp chúng với RAID 0. Trong ZFS, bạn có thể làm điều này bằng cách tạo nhiều vdevs RAIDZ2 và thêm chúng vào cùng một zpool.

Dưới đây là một ví dụ về cách bạn có thể làm điều này với 60 ổ đĩa, mỗi nhóm bao gồm 6 ổ đĩa:

shell> zpool create zpool_vol01 \
raidz2 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf \
raidz2 /dev/sdh /dev/sdi /dev/sdj /dev/sdk /dev/sdl /dev/sdm \
raidz2 /dev/sdn /dev/sdo /dev/sdp /dev/sdq /dev/sdr /dev/sds \
raidz2 /dev/sdt /dev/sdu /dev/sdv /dev/sdw /dev/sdx /dev/sdy \
raidz2 /dev/sdz /dev/sdaa /dev/sdab /dev/sdac /dev/sdad /dev/sdae \
raidz2 /dev/sdag /dev/sdah /dev/sdai /dev/sdaj /dev/sdak /dev/sdal \
raidz2 /dev/sdam /dev/sdan /dev/sdao /dev/sdap /dev/sdaq /dev/sdar \
raidz2 /dev/sdas /dev/sdat /dev/sdau /dev/sdav /dev/sdaw /dev/sdax \
raidz2 /dev/sday /dev/sdaz /dev/sdba /dev/sdbb /dev/sdbc /dev/sdbd \
raidz2 /dev/sdbe /dev/sdbf /dev/sdbg /dev/sdbh /dev/sdbi /dev/sdbj

Kết quả của lệnh zpool list.

shell> zpool list
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zpool_vol01   764T  1.41M   764T        -         -     0%     0%  1.00x    ONLINE  -

Kết quả của lệnh zfs list.

shell> zfs list
NAME          USED  AVAIL     REFER  MOUNTPOINT
zpool_vol01   959K   509T      192K  /zpool_vol01

Trong trường hợp của mình, với 60 ổ đĩa tổng cộng, giả sử mình chia chúng thành 10 nhóm RAID 6, mỗi nhóm có 6 ổ đĩa. Trong mỗi nhóm RAID 6, bạn sẽ mất dung lượng của 2 ổ đĩa cho parity, do đó mình chỉ còn dung lượng của 4 ổ đĩa cho dữ liệu.

Vì vậy, dung lượng tổng cộng sau khi RAID 60 sẽ là:

Số ổ đĩa cho dữ liệu mỗi nhóm * Số nhóm * Dung lượng mỗi ổ đĩa
= 4 * 10 * 12.7 TB
= 508 TB

Kết quả của lệnh zpool status <zpool_name> cho thấy trạng thái của một zpool (một nhóm các ổ đĩa được quản lý bởi ZFS) có tên là “zpool_vol01”.

shell> zpool status zpool_vol01
  pool: zpool_vol01
 state: ONLINE
config:

	NAME         STATE     READ WRITE CKSUM
	zpool_vol01  ONLINE       0     0     0
	  raidz2-0   ONLINE       0     0     0
	    sda      ONLINE       0     0     0
	    sdb      ONLINE       0     0     0
	    sdc      ONLINE       0     0     0
	    sdd      ONLINE       0     0     0
	    sde      ONLINE       0     0     0
	    sdf      ONLINE       0     0     0
	  raidz2-1   ONLINE       0     0     0
	    sdh      ONLINE       0     0     0
	    sdi      ONLINE       0     0     0
	    sdj      ONLINE       0     0     0
	    sdk      ONLINE       0     0     0
	    sdl      ONLINE       0     0     0
	    sdm      ONLINE       0     0     0
	  raidz2-2   ONLINE       0     0     0
	    sdn      ONLINE       0     0     0
	    sdo      ONLINE       0     0     0
	    sdp      ONLINE       0     0     0
	    sdq      ONLINE       0     0     0
	    sdr      ONLINE       0     0     0
	    sds      ONLINE       0     0     0
	  raidz2-3   ONLINE       0     0     0
	    sdt      ONLINE       0     0     0
	    sdu      ONLINE       0     0     0
	    sdv      ONLINE       0     0     0
	    sdw      ONLINE       0     0     0
	    sdx      ONLINE       0     0     0
	    sdy      ONLINE       0     0     0
	  raidz2-4   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
	  raidz2-5   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
	  raidz2-6   ONLINE       0     0     0
	    sdam     ONLINE       0     0     0
	    sdan     ONLINE       0     0     0
	    sdao     ONLINE       0     0     0
	    sdap     ONLINE       0     0     0
	    sdaq     ONLINE       0     0     0
	    sdar     ONLINE       0     0     0
	  raidz2-7   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
	  raidz2-8   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     ONLINE       0     0     0
	  raidz2-9   ONLINE       0     0     0
	    sdbe     ONLINE       0     0     0
	    sdbf     ONLINE       0     0     0
	    sdbg     ONLINE       0     0     0
	    sdbh     ONLINE       0     0     0
	    sdbi     ONLINE       0     0     0
	    sdbj     ONLINE       0     0     0

errors: No known data errors
  • “state: ONLINE” cho biết rằng zpool đang hoạt động bình thường.
  • “config:” phần sau đây mô tả cấu hình của zpool.
  • “raidz2-0” đến “raidz2-9” là các vdevs (virtual devices), mỗi vdev là một nhóm các ổ đĩa được cấu hình như RAIDZ2 (tương đương với RAID 6).
  • “sda” đến “sdbj” là các ổ đĩa vật lý trong mỗi vdev.
  • “ONLINE” sau tên mỗi ổ đĩa cho biết rằng ổ đĩa đang hoạt động bình thường.
  • “errors: No known data errors” cho biết không có lỗi dữ liệu nào được phát hiện trong zpool.

Vì vậy, kết quả này cho thấy rằng zpool zpool_vol01 đang hoạt động bình thường, không có lỗi dữ liệu và nó bao gồm 10 vdevs, mỗi vdev là một nhóm các ổ đĩa được cấu hình như RAIDZ2.

Kiểm tra kết quả IOPS của Raid60.

Trong kết quả của lệnh zpool iostat, IOPS (Input/Output Operations Per Second) được thể hiện qua số lượng đọc (read) và ghi (write) mỗi giây.

Trong trường hợp này, ta có thể xem tổng số lượng hoạt động đọc và ghi cho zpool (zpool_vol01) trong các cột “read” và “write”.

Ví dụ, trong dòng thứ 3, ta có khoảng 5.22K (tức là 5,220) hoạt động ghi mỗi giây, cộng với 0 hoạt động đọc mỗi giây ta sẽ có công thức.

Total IOPS = 5,220 + 0 = 5,220 IOPS.

Vì vậy, tổng IOPS (Input/Output Operations Per Second) cho thời điểm đó là khoảng 5.22K IOPS. Đó chính là IOPS cho thời điểm đó.

Lưu ý rằng đây là số lượng hoạt động, không phải là số lượng byte được đọc hoặc ghi. Số lượng byte được đọc hoặc ghi mỗi giây được hiển thị trong các cột “read” và “write” cuối cùng.

shell> zpool iostat zpool_vol01 1
               capacity     operations     bandwidth
pool         alloc   free   read  write   read  write
-----------  -----  -----  -----  -----  -----  -----
zpool_vol01  6.57M   764T      8  1.90K  35.6K   488M
zpool_vol01  1.21G   764T      4  3.67K  19.7K   725M
zpool_vol01  2.40G   764T      0  5.22K  3.96K  1.19G
zpool_vol01  3.60G   764T      0  4.52K  3.96K  1.19G
zpool_vol01  3.60G   764T      0  3.38K      0   901M
zpool_vol01  4.80G   764T      0  1.51K  3.95K   314M
zpool_vol01  6.00G   764T      0  5.85K  3.96K  1.19G
zpool_vol01  7.20G   764T      0  5.55K  3.96K  1.19G
zpool_vol01  8.39G   764T      0  4.99K  3.96K  1.19G
zpool_vol01  8.39G   764T      0  3.75K      0   914M
zpool_vol01  9.59G   764T      0  1.74K      0   301M

Kết quả từ lệnh dd, một công cụ Unix/Linux dùng để sao chép và chuyển đổi dữ liệu mình sử dụng để ghi file vào zpool dùng cho việc test IOPS.

shell> dd if=/dev/zero of=/zpool_vol01/testfile bs=4k count=100000000000000
^C3180097+0 records in
3180097+0 records out
13025677312 bytes (13 GB, 12 GiB) copied, 19.6364 s, 663 MB/s
  • if=/dev/zero nghĩa là source dữ liệu cho việc sao chép là /dev/zero, một thiết bị đặc biệt trong Unix/Linux tạo ra các byte 0.
  • of=/zpool_vol01/testfile nghĩa là dest của việc sao chép là một file tên là “testfile” trong zpool có tên “zpool_vol01”.
  • bs=4k nghĩa là kích thước block cho việc sao chép là 4 kilobytes.
  • count=100000000000000 nghĩa là lệnh dd sẽ sao chép 100000000000000 blocks từ nguồn đến đích. Tuy nhiên, lệnh đã bị ngắt (như được thể hiện bởi ^C) trước khi hoàn thành.
  • 3180097+0 records in và 3180097+0 records out cho thấy số lượng blocks đã được đọc và viết.
  • 13025677312 bytes (13 GB, 12 GiB) copied, 19.6364 s, 663 MB/s cho thấy tổng số byte đã được sao chép, thời gian sao chép và tốc độ sao chép.

Vì vậy, kết quả này cho thấy rằng lệnh dd đã sao chép khoảng 13 GB dữ liệu từ /dev/zero đến file testfile trong zpool_vol01 với tốc độ khoảng 663 MB/s, trước khi bị ngắt.

Kiểm tra kết quả throughput của Raid60.

Do ở phần trên mình đã giải thích ý nghĩa của các lệnh này rồi nên giờ mình để kết quả ở đây cho bạn tự đọc nhé.

Kết quả từ dd.

shell> dd if=/dev/zero of=/zpool_vol01/testfile bs=1G count=1000
^C50+0 records in
50+0 records out
53687091200 bytes (54 GB, 50 GiB) copied, 29.7912 s, 1.8 GB/s

Kết quả từ iostat.

shell> zpool iostat zpool_vol01 1
               capacity     operations     bandwidth
zpool_vol01  21.0G   764T      0  11.1K  3.95K  2.44G
zpool_vol01  24.0G   764T      1  12.0K  7.88K  2.78G
zpool_vol01  27.0G   764T      0  14.5K  3.95K  2.92G
zpool_vol01  29.6G   764T      0  14.0K      0  2.88G
zpool_vol01  32.0G   764T      0  10.8K      0  2.50G
zpool_vol01  35.7G   764T      0  13.2K      0  2.81G
zpool_vol01  38.1G   764T      0  12.5K      0  2.78G
zpool_vol01  41.7G   764T      0  13.2K      0  2.83G
zpool_vol01  44.1G   764T      0  10.6K      0  2.51G
zpool_vol01  46.5G   764T      0  14.2K      0  3.14G
zpool_vol01  48.9G   764T      0  12.9K      0  2.65G

So sánh Raid50 và Raid60.

Hiệu suất.

Trong hầu hết các trường hợp, RAID 60 sẽ cung cấp hiệu suất IOPS cao hơn so với RAID 50.

RAID 60 là một sự kết hợp của RAID 6 (cung cấp khả năng chịu đựng lỗi thông qua việc sử dụng hai parity) và RAID 0 (cung cấp hiệu suất cao hơn thông qua việc phân chia dữ liệu giữa nhiều ổ đĩa). Điều này tạo ra một cấu hình có hiệu suất cao và khả năng chịu đựng lỗi tốt.

Trong khi đó, RAID 50 là sự kết hợp của RAID 5 (cung cấp khả năng chịu đựng lỗi thông qua việc sử dụng một parity) và RAID 0. Mặc dù RAID 50 cũng cung cấp hiệu suất và khả năng chịu đựng lỗi, nhưng nó không bằng RAID 60 vì nó chỉ sử dụng một parity.

Dung lượng khả dụng.

RAID 50 sẽ cung cấp dung lượng lưu trữ khả dụng cao hơn so với RAID 60, giả sử bạn đang sử dụng cùng một số lượng ổ đĩa.

  • RAID 50 là sự kết hợp của RAID 5 và RAID 0. RAID 5 sử dụng một ổ đĩa cho parity, vì vậy nếu bạn có n vdevs trong một cấu hình RAID 50, bạn sẽ mất dung lượng của n ổ đĩa cho parity.
  • RAID 60 là sự kết hợp của RAID 6 và RAID 0. RAID 6 sử dụng hai ổ đĩa cho parity, vì vậy nếu bạn có n vdevs trong một cấu hình RAID 60, bạn sẽ mất dung lượng của 2n ổ đĩa cho parity.

Vì vậy, nếu dung lượng lưu trữ khả dụng là một ưu tiên hàng đầu, RAID 50 có thể là một lựa chọn tốt hơn. Tuy nhiên, nếu độ tin cậy và hiệu suất là mối quan tâm hàng đầu, RAID 60 thường là lựa chọn tốt hơn.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories