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ệnhdd
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.