Tôi đã bắt đầu bằng cách tạo 16 tệp trống có chính xác 1 tỷ byte:
for i in {1..16}; do dd if=/dev/zero of=/mnt/temp/block$i bs=1000000 count=1000 &> /dev/null; done
Sau đó, tôi đã tạo ra khối lượng RAIDZ2 lớn hơn và lớn hơn trên các tệp, buộc ashift = 12 để mô phỏng ổ đĩa 4K, ví dụ:
zpool create tank raidz2 -o ashift=12 /mnt/temp/block1 /mnt/temp/block2...
và sau đó so sánh sử dụng df -B1
để xem kích thước thực tế.
Filesystem 1B-blocks
tank 12787777536
Kết quả của tôi:
+-------+-------------+-------------+------------+------------+
| disks | expected | actual | overhead | efficiency |
+-------+-------------+-------------+------------+------------+
| 3 | 1000000000 | 951975936 | 48024064 | 95.2 |
| 4 | 2000000000 | 1883766784 | 116233216 | 94.2 |
| 5 | 3000000000 | 2892234752 | 107765248 | 96.4 |
| 6 | 4000000000 | 3892969472 | 107030528 | 97.3 |
| 7 | 5000000000 | 4530896896 | 469103104 | 90.6 |
| 8 | 6000000000 | 5541068800 | 458931200 | 92.4 |
| 9 | 7000000000 | 6691618816 | 308381184 | 95.6 |
| 10 | 8000000000 | 7446331392 | 553668608 | 93.1 |
| 11 | 9000000000 | 8201175040 | 798824960 | 91.1 |
| 12 | 10000000000 | 8905555968 | 1094444032 | 89.1 |
| 13 | 11000000000 | 10403577856 | 596422144 | 94.6 |
| 14 | 12000000000 | 11162222592 | 837777408 | 93.0 |
| 15 | 13000000000 | 12029263872 | 970736128 | 92.5 |
| 16 | 14000000000 | 12787908608 | 1212091392 | 91.3 |
+-------+-------------+-------------+------------+------------+
Như một biểu đồ:
- Là kết quả của tôi chính xác, hoặc tôi đã để lại một cái gì đó?
- Nếu họ đúng, tại sao? Không gian đi đâu?
- Tôi có thể làm bất cứ điều gì để cải thiện hiệu quả?
- Có một công thức để tính toán hiệu quả?
Tại sao? Chỉ là vì sao?!?
—
ewwhite
@ewwhite - Có không gian ít hơn tới 11% so với những gì tôi mong đợi. Nếu bạn có ổ đĩa 12x1TB, bạn sẽ có 10TB nhưng có ít hơn 9TB.
—
steveh7
Không, đó là một câu hỏi hay. Tôi không biết câu trả lời. Tôi có sự khác biệt lớn trong việc sử dụng zpool giữa ashift 9 và 12 và cùng một bộ dữ liệu.
—
ewwhite
Bạn có thể chạy lại chúng với các giá trị ashift từ 0 đến 12 và vẽ đồ thị trong 3D không?
—
Andrew