Ext4 ile birlikte saydam sıkıştırma dosya sistemi


26

Kullandığım uygulama ext4 özelliklerine bağlı olduğundan, ext4 dosya sisteminin kullanımıyla sıkıştırılmış depolama gerektiren bir projeyi test etmeye çalışıyorum.

Ext4'te şeffaf sıkıştırma için üretim / kararlı çözümler var mı?

Ne denedim:

Sıkıştırma etkin ZFS biriminde Ext4 . Bunun aslında olumsuz bir etkisi oldu. Lz4 sıkıştırması etkin bir ZFS birimi oluşturmayı ve / dev / zvol / ... üzerinde bir ext4 dosya sistemi oluşturmayı denedim, ancak zfs birimi asıl kullanımın iki katına çıktığını gösterdi ve sıkıştırma herhangi bir etkiye sahip değildi.

# 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**  -

ZFS Oluşturma Komutları

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

Sigorta sıkıştırması: Çalışıyor gibi görünüyordu, ancak% 100 kararlı değil. Alternatifler arıyorum.

LessFS: Lessfs'i ext4 ile birlikte kullanmak mümkün müdür? Henüz denemedim ama kullanıcı bilgisi ile ilgileneceğim.

Bir büyük sorun: gerçek şeffaflık değil

Sigorta sıkıştırmasında gördüğüm bir sorun kotalardı. Örneğin, dosya sisteminde sıkıştırmayı etkinleştirirsem, sistemimin mutlaka son kullanıcı değil sıkıştırma işleminden yararlanmasını isterdim. Bir kullanıcı için 1 GB'lık bir kotayı etkinleştirirsem, 1,5 sıkıştırma oranıyla, 1 GB veri yerine 1,5 GB veri yükleyebilir ve sistem sıkıştırma işleminden yararlanabilir. Bu da df -h'de göründüğü ortaya çıktı. Sıkıştırma kotalarına şeffaf olması için bir çözüm var mı?


Emin. Lütfen OS / distro / versiyonunu ve saklamayı düşündüğünüz verilerin doğası hakkındaki detayları listeleyebilir misiniz?
ewwhite

Ayrıca donanım detayları.
ewwhite

1
@wwhite 8x3TB, bir Yazılım RAID6'sında. Veriler diğer sunuculardan yedeklenecek ve böylece karışık veri türleri ve çeşitli son kullanıcılar, belgeler vb.
user235918

Buna ihtiyacın olduğundan emin misin? Çok büyük, seyrek dosyalarınız var mı? Disk alanı bugünlerde ucuz.
Andrew Schulman

@AndrewSchulman: Sıkıştırmanın avantajını kullanmak benim hesabımdan daha iyi bir yöntem. Ek disklerin ve onları destekleyen denetleyicilerin maliyeti, CPU maliyetinden daha fazladır.
user235918

Yanıtlar:


27

Kullandığım Linux üzerinde ZFS'yi bir hacim yöneticisi olarak ve bir araç geleneksel dosya sistemleri için ek koruma ve işlevsellik sağlamak için. Bu, blok düzeyinde anlık görüntüler, çoğaltma, veri tekilleştirme, sıkıştırma ve XFS veya ext4 dosya sistemlerine gelişmiş önbellekleme getirmeyi içerir.

Başka bir açıklama için bkz: https://pthree.org/2012/12/21/zfs-administration-part-xiv-zvols/ .

En yaygın kullanım durumumda, varolan bir zpool'da seyrek bir hacim oluşturmak için ZFS zvol özelliğini kullanırım. Bu zvol'un özellikleri normal bir ZFS dosya sistemininki gibi ayarlanabilir. Bu noktada, sıkıştırma türü, cilt boyutu, önbellekleme yöntemi vb. Özellikleri ayarlayabilirsiniz.

Bu zvol'ü oluşturmak Linux'a seçtiğiniz dosya sistemiyle formatlanabilecek bir blok cihaz sunar. Bölümünüzü ve bitmiş birimi oluşturmak için fdiskveya parteddüğmesini kullanın mkfs.

Bunu monte edin, aslında bir zvol tarafından desteklenen ve tüm özelliklerine sahip bir dosya sistemine sahipsiniz.


İşte iş akışım ...

Dört disklerin oluşan bir zpool oluşturun:
Sen isteyeceksinizashift=12 olduğunuz disk türü yönergeyi . Bu durumda zpool adı "vol0" dır.

zpool -o ashift = 12 -f vol0 aynası oluşturma scsi-AccOW140403AS1322043 scsi-AccOW140403AS1322042 ayna scsi-AccOW140403AS1322013

İlk zpool ayarlarını belirleyin:
belirlediğim autoexpand=onşimdiye kadar büyük sürücülerle diskleri değiştirmek veya bir havuzdan genişletmek durumunda zpool düzeyinde ZFS aynalar kurulum. ZFS raidz1 / 2 / 3'ü genellikle düşük performans ve zpool'u genişletemediğim için kullanmıyorum.

zpool set autoexpand=on vol0

İlk zfs dosya sistemi özelliklerini ayarlayın:
Lütfen yeni ZFS kurulumları için lz4sıkıştırma algoritmasını kullanın . Her zaman açık bırakman sorun değil.

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

ZFS Oluştur zvol:
Linux'ta ZFS için, büyük bir blok boyutu kullanmanız çok önemlidir. -o volblocksize=128kburada kesinlikle şarttır. -sSeçenek seyrek zvol oluşturur ve ihtiyaç olana kadar havuz alanı tüketmez. Verilerinizi iyi biliyorsanız, buradan fazla ödeyebilirsiniz. Bu durumda, havuzda yaklaşık 444GB kullanılabilir disk alanım var, ancak XFS'ye 800 GB'lik bir birim sunuyorum.

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

Zvol aygıtı bölümü:
( ilk zvol için / dev / zd0; sonraki zvols için / dev / zd16, / dev / zd32, vb. Olmalıdır )

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


Yeni oluşturulan bölümde, / dev / zd0p1 dosya sisteminde mkfs.xfs veya ext4 dosya sistemini oluşturun ve bağlayın.

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

UUID'yi al blkidve değiştir /etc/fstab.

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

Yeni dosya sistemini bağlayın.

mount /ppro/

Sonuçlar...

[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

ZFS dosya sistemi listesi.

[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

ZFS zpool listesi.

[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      -      -      -         -

ZFS zvol özellikleri ( take notu referenced, compressratiovevolsize ).

[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

Neden zvol'u bölümlendiriyorsun? Sadece doğrudan kullanılamaz mı?
Michael Hampton

3
@ MichaelHampton Hizalama ve tutarlılık için. Ayrıca, temeldeki birimi genişletirsem esneklik istiyorum. Burada birkaç soyutlama katmanı var. /dev/sdbVersus kullanma argümanına benzer /dev/sdb1.
ewwhite

1
Bilgi için teşekkürler. Burada bir sürü iyi tavsiye var. Test edeceğim.
user235918

2
@MichaelHampton BTW, bu günlerde, artık sanal makinelerle bölümlere ayrılmıyorum.
beyaz

1
Bu kurulumda ZFS katmanı için ek kaynak maliyetlerinden bahseder misiniz (RAM, CPU)?
Sz.

4

Ayrıca ext4 dosya sisteminde atmayı etkinleştirmeniz gerekir. Atma olmadan, zfs dosyalar kaldırıldığında alanı geri kazanmaz. Bu, ext4 dosya sisteminin raporladığı ve zfs birimi raporları arasında büyük boşluk tutarsızlıklarına yol açabilir.


4
Red Hat, bir performans etkisi olduğundan, bunu atma montaj seçeneğiyle (ext4 veya xfs ile) çevrimiçi olarak önermemektedir. fstrimKomutu periyodik olarak çalıştırmak daha temiz .
ewwhite,

atma hakkındaki yorum, performansı etkileyen bağlar: Bu eski, düşük kaliteli SSD'ler için geçerlidir. Yeni olanlar için doğru değil.
Stoat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.