Hệ thống tập tin nén trong suốt kết hợp với ext4


26

Tôi đang cố gắng kiểm tra một dự án cần lưu trữ nén bằng cách sử dụng hệ thống tệp ext4 vì ứng dụng tôi sử dụng phụ thuộc vào các tính năng của ext4.

Có bất kỳ giải pháp sản xuất / ổn định nào hiện có để nén trong suốt trên ext4 không?

Những gì tôi đã thử:

Ext4 trên khối lượng ZFS với kích hoạt nén. Điều này thực sự có một ảnh hưởng bất lợi. Tôi đã thử tạo một khối ZFS với tính năng nén lz4 và tạo một hệ thống tập tin ext4 trên / dev / zvol / ... nhưng khối lượng zfs cho thấy mức sử dụng thực tế gấp đôi và việc nén dường như không có tác dụng.

# du -hs /mnt/test
**1.1T**    /mnt/test
# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
pool       15.2T  2.70G   290K  /pool
pool/test  15.2T  13.1T  **2.14T**  -

Các lệnh tạo ZFS

zpool create pool raidz2 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde2 /dev/sdf1 /dev/sdg1 /dev/sdh2 /dev/sdi1
zfs set recordsize=128k pool
zfs create -p -V15100GB pool/test
zfs set compression=lz4 pool/test
mkfs.ext4 -m1 -O 64bit,has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink /dev/zvol/pool/test

Fusecompress: Có vẻ như hoạt động nhưng không ổn định 100%. Tìm kiếm sự thay thế.

LessFS: Có thể sử dụng Lessfs kết hợp với ext4 không? Tôi chưa thử nhưng sẽ quan tâm đến cái nhìn sâu sắc của người dùng.

Một vấn đề lớn: không minh bạch thực sự

Một vấn đề tôi thấy với fusecompress là hạn ngạch. Ví dụ: nếu tôi kích hoạt tính năng nén trên hệ thống tập tin, tôi sẽ muốn hệ thống của mình được hưởng lợi từ việc nén, không nhất thiết phải là người dùng cuối. Nếu tôi kích hoạt hạn mức 1GB cho người dùng, với tỷ lệ nén là 1,5, họ sẽ có thể tải lên 1,5 GB dữ liệu, thay vì 1GB dữ liệu và hệ thống được hưởng lợi từ việc nén. Điều này cũng xuất hiện để hiển thị trên df -h. Có một giải pháp để có minh bạch nén để hạn ngạch?


Chắc chắn rồi. Bạn có thể vui lòng liệt kê HĐH / distro / phiên bản và chi tiết về bản chất của dữ liệu bạn định lưu trữ không?
ewwhite

Ngoài ra chi tiết phần cứng.
ewwhite

1
@ewwhite 8x3TB trong RAID6 Phần mềm. Dữ liệu sẽ được sao lưu rsynced từ các máy chủ khác để các loại dữ liệu hỗn hợp và người dùng cuối khác nhau, tài liệu, vv CentOS 6.5 x64.
dùng235918

Bạn có chắc bạn cần điều này? Bạn có nhiều tập tin lớn, thưa thớt? Không gian đĩa là giá rẻ những ngày này.
Andrew Schulman

@AndrewSchulman: Tận dụng nén là phương pháp tốt hơn từ tính toán của tôi. Chi phí cho các đĩa phụ và bộ điều khiển hỗ trợ chúng nhiều hơn chi phí CPU.
dùng235918

Câu trả lời:


27

Tôi sử dụng ZFS trên Linux như một trình quản lý âm lượng và phương tiện để cung cấp các chức năng bảo vệ và chức năng bổ sung cho các hệ thống tệp truyền thống. Điều này bao gồm đưa các ảnh chụp nhanh cấp khối, sao chép, sao chép, nén và lưu trữ nâng cao vào hệ thống tệp XFS hoặc ext4.

Xem: https://pthree.org/2012/12/21/zfs-ad dùng- part-xiv-zvols / để được giải thích khác.

Trong trường hợp sử dụng phổ biến nhất của tôi, tôi tận dụng tính năng ZFS zvol để tạo âm lượng thưa thớt trên một zpool hiện có. Các thuộc tính của zvol đó có thể được đặt giống như các hệ thống tệp ZFS bình thường. Tại thời điểm này, bạn có thể đặt các thuộc tính như loại nén, kích thước âm lượng, phương thức lưu trữ, v.v.

Tạo zvol này trình bày một thiết bị khối cho Linux có thể được định dạng với hệ thống tệp bạn chọn. Sử dụng fdiskhoặc partedđể tạo phân vùng của bạn và mkfskhối lượng hoàn thành.

Gắn kết này và về cơ bản bạn có một hệ thống tập tin được hỗ trợ bởi zvol và với tất cả các thuộc tính của nó.


Đây là quy trình làm việc của tôi ...

Tạo một zpool bao gồm bốn đĩa:
Bạn sẽ muốn ashift=12chỉ thị cho loại đĩa bạn đang sử dụng. Tên zpool là "vol0" trong trường hợp này.

zpool tạo -o ashift = 12 -f vol0 gương scsi-AccOW140403AS1322043 scsi-AccOW140403AS1322042 gương scsi-AccOW140403AS1322013 scsi-AccOW140403AS1322044

Đặt cài đặt zpool ban đầu:
Tôi đặt autoexpand=onở cấp độ zpool trong trường hợp tôi từng thay thế các đĩa bằng các ổ đĩa lớn hơn hoặc mở rộng nhóm trong thiết lập nhân bản ZFS . Tôi thường không sử dụng ZFS raidz1 / 2/3 vì hiệu suất kém và không có khả năng mở rộng zpool.

zpool set autoexpand=on vol0

Đặt thuộc tính hệ thống tệp zfs ban đầu:
Vui lòng sử dụng lz4thuật toán nén để cài đặt ZFS mới. Bạn có thể để nó mọi lúc.

zfs set compression=lz4 vol0
zfs set atime=off vol0

Tạo ZFS zvol:
Đối với ZFS trên Linux, điều quan trọng là bạn phải sử dụng kích thước khối lớn. -o volblocksize=128klà hoàn toàn cần thiết ở đây. Các -stùy chọn tạo ra một zvol thưa thớt và không tiêu tốn không gian hồ bơi cho đến khi nó cần thiết. Bạn có thể thừa ở đây, nếu bạn biết rõ dữ liệu của mình. Trong trường hợp này, tôi có khoảng 444 GB dung lượng đĩa có thể sử dụng trong nhóm, nhưng tôi đang trình bày dung lượng 800 GB cho XFS.

zfs create -o volblocksize=128K -s -V 800G vol0/pprovol

Thiết bị phân vùng zvol:
( nên là / dev / zd0 cho zvol đầu tiên; / dev / zd16, / dev / zd32, v.v. cho các zvols tiếp theo )

fdisk /dev/zd0 # (create new aligned partition with the "c" and "u" parameters)

Tạo và gắn kết hệ thống tập tin:
mkfs.xfs hoặc ext4 trên phân vùng vừa tạo, / dev / zd0p1.

mkfs.xfs -f -l size=256m,version=2 -s size=4096 /dev/zd0p1

Lấy UUID với blkidvà sửa đổi /etc/fstab.

UUID=455cae52-89e0-4fb3-a896-8f597a1ea402 /ppro       xfs     noatime,logbufs=8,logbsize=256k 1 2

Gắn kết hệ thống tập tin mới.

mount /ppro/

Các kết quả...

[root@Testa ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sde2        20G  8.9G  9.9G  48% /
tmpfs            32G     0   32G   0% /dev/shm
/dev/sde1       485M   63M  397M  14% /boot
/dev/sde7       2.0G   68M  1.9G   4% /tmp
/dev/sde3        12G  2.6G  8.7G  24% /usr
/dev/sde6       6.0G  907M  4.8G  16% /var
/dev/zd0p1      800G  398G  403G  50% /ppro  <-- Compressed ZFS-backed XFS filesystem.
vol0            110G  256K  110G   1% /vol0

Danh sách hệ thống tập tin ZFS.

[root@Testa ~]# zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
vol0           328G   109G   272K  /vol0
vol0/pprovol   326G   109G   186G  -   <-- The actual zvol providing the backing for XFS.
vol1           183G   817G   136K  /vol1
vol1/images    183G   817G   183G  /images

Danh sách zpool ZFS.

[root@Testa ~]# zpool list -v
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
vol0   444G   328G   116G    73%  1.00x  ONLINE  -
  mirror   222G   164G  58.1G         -
    scsi-AccOW140403AS1322043      -      -      -         -
    scsi-AccOW140403AS1322042      -      -      -         -
  mirror   222G   164G  58.1G         -
    scsi-AccOW140403AS1322013      -      -      -         -
    scsi-AccOW140403AS1322044      -      -      -         -

Tính ZFS zvol ( take note của referenced, compressratiovolsize ).

[root@Testa ~]# zfs get all vol0/pprovol
NAME          PROPERTY               VALUE                  SOURCE
vol0/pprovol  type                   volume                 -
vol0/pprovol  creation               Sun May 11 15:27 2014  -
vol0/pprovol  used                   326G                   -
vol0/pprovol  available              109G                   -
vol0/pprovol  referenced             186G                   -
vol0/pprovol  compressratio          2.99x                  -
vol0/pprovol  reservation            none                   default
vol0/pprovol  volsize                800G                   local
vol0/pprovol  volblocksize           128K                   -
vol0/pprovol  checksum               on                     default
vol0/pprovol  compression            lz4                    inherited from vol0
vol0/pprovol  readonly               off                    default
vol0/pprovol  copies                 1                      default
vol0/pprovol  refreservation         none                   default
vol0/pprovol  primarycache           all                    default
vol0/pprovol  secondarycache         all                    default
vol0/pprovol  usedbysnapshots        140G                   -
vol0/pprovol  usedbydataset          186G                   -
vol0/pprovol  usedbychildren         0                      -
vol0/pprovol  usedbyrefreservation   0                      -
vol0/pprovol  logbias                latency                default
vol0/pprovol  dedup                  off                    default
vol0/pprovol  mlslabel               none                   default
vol0/pprovol  sync                   standard               default
vol0/pprovol  refcompressratio       3.32x                  -
vol0/pprovol  written                210M                   -
vol0/pprovol  snapdev                hidden                 default

Tại sao phân vùng zvol? Nó không thể được sử dụng trực tiếp?
Michael Hampton

3
@MichaelHampton Chủ yếu cho sự liên kết và nhất quán. Ngoài ra, tôi muốn linh hoạt nếu tôi mở rộng âm lượng cơ bản. Có một vài lớp trừu tượng ở đây. Nó tương tự như đối số của việc sử dụng /dev/sdbso với /dev/sdb1.
ewwhite

1
Cảm ơn thông tin của bạn. Rất nhiều lời khuyên tốt ở đây. Tôi sẽ thử nó ra.
dùng235918

2
@MichaelHampton BTW, những ngày này, tôi không phân vùng nữa ... đặc biệt là với các máy ảo.
ewwhite

1
Bạn có thể vui lòng cho biết về chi phí tài nguyên bổ sung cho lớp ZFS trong thiết lập này (RAM, CPU) không?
Sz.

4

Bạn cũng cần kích hoạt loại bỏ trên hệ thống tập tin ext4. Không loại bỏ, zfs không lấy lại khoảng trống khi tệp bị xóa. Điều này có thể dẫn đến sự khác biệt về không gian lớn giữa những gì báo cáo hệ thống tập tin ext4 và báo cáo khối lượng zfs.


4
Red Hat không khuyên bạn nên thực hiện việc này trực tuyến với tùy chọn loại bỏ gắn kết (với ext4 hoặc xfs), vì có tác động hiệu suất. Nó sạch hơn để định kỳ chạy fstrimlệnh.
ewwhite

viết nhận xét về việc loại bỏ hiệu ứng gắn kết: Điều này đúng với các ổ SSD cũ, chất lượng thấp. Điều đó không đúng với những cái mới hơn.
Stoat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.