Neden XFS dosya sistemlerim birdenbire fazla yer kaplıyor ve az miktarda dosya kullanıyor?


62

XFS dosya sistemlerini çeşitli Linux sunucularında yaklaşık 10 yıldır veri / büyüme bölümleri olarak çalıştırıyorum .

6.2+ sürümünü çalıştıran son CentOS / RHEL sunucuları ile garip bir fenomen fark ettim.

EL6.0 ve EL6.1'den daha yeni işletim sistemi revizyonuna geçtikten sonra kararlı dosya sistemi kullanımı oldukça değişken oldu. Başlangıçta EL6.2 + ile kurulan sistemler aynı davranışı sergiler; XFS bölümlerinde disk kullanımındaki vahşi sallanmaların gösterilmesi ( aşağıdaki grafikteki mavi çizgiye bakınız).

Önce ve sonra. Cumartesi günü 6.1'den 6.2'ye yükseltme yapıldı. xfs grafiği

Geçen çeyrek aynı disk kullanım grafiği, geçen haftaki dalgalanmaları gösteriyor. görüntü tanımını buraya girin

Dosya sistemlerini büyük dosyalar ve kaçak işlemler için kontrol etmeye başladım (log dosyaları, belki de?). Benim büyük dosyalar farklı değerleri rapor keşfetti duve ls. Anahtarla duve anahtarsız çalıştırma --apparent-sizefarkı gösterir.

# du -skh SOD0005.TXT
29G     SOD0005.TXT

# du -skh --apparent-size SOD0005.TXT
21G     SOD0005.TXT

Tüm dosya sisteminde ncdu yardımcı programını kullanarak hızlı bir kontrol sağladı:

Total disk usage: 436.8GiB  Apparent size: 365.2GiB  Items: 863258

Dosya sistemi, OS / çekirdeğin önceki sürümüne kıyasla yaklaşık 70 GB kaybedilen alanla seyrek dosyalarla doludur !

Red Hat Bugzilla'ya göz attım ve aynı davranış raporları veya XFS ile ilgili yeni duyuruların olup olmadığını görmek için günlükleri değiştirdim.

Nada.

Ben çekirdek sürümünden gitti 2.6.32-131.17.1.el6 için 2.6.32-220.23.1.el6 yükseltme sırasında; Küçük sürüm numarasında değişiklik yok.

Araçla dosya parçalanmasını kontrol ettim filefrag. XFS bölümündeki en büyük dosyalardan bazılarında binlerce uzantı vardı. xfs_fsr -vYavaş bir aktivite periyodunda çevrimiçi dolandırmaya çalışmak, disk kullanımını geçici olarak azaltmaya yardımcı oldu (yukarıdaki ilk grafiğe bakınız). Bununla birlikte, kullanım ağır sistem aktivitesine devam ettiği andan itibaren şişirildi.

Burada ne oluyor?


2
Mmm ... Piazza ....
Tom O'Connor,

Yanıtlar:


76

Bu konuyu Aralık 2010'dan itibaren XFS kaynak ağacına yönelik bir taahhüt hakkında tekrar tartışmaya kadar izledim . Yama Çekirdek 2.6.38'de (ve tabii ki daha sonra bazı popüler Linux dağıtım çekirdeklerinde desteklendi) tanıtıldı.

Disk kullanımında gözlenen dalgalanmalar yeni bir özelliğin sonucudur; XFS Dinamik Spekülatif EOF Preallocation .

Bu, dosya boyutları arttıkça spekülatif bir alan tahsis ederek akış yazarken dosya parçalanmasını azaltma hareketidir. Dosya başına önceden tahsis edilen alanın miktarı dinamiktir ve öncelikle dosya sisteminde mevcut olan boş alanın bir işlevidir (tamamen boş alan kalmamasını sağlamak için).

Bu programı takip eder:

freespace       max prealloc size
  >5%             full extent (8GB)
  4-5%             2GB (8GB >> 2)
  3-4%             1GB (8GB >> 3)
  2-3%           512MB (8GB >> 4)
  1-2%           256MB (8GB >> 5)
  <1%            128MB (8GB >> 6)

Bu, ele aldığım çok büyük parçalara ayrılmış dosyaların bir kısmına yardımcı olabileceği için dosya sistemine ilginç bir ektir.

Sayfa önbelleğini, dişlileri ve inode'ları serbest bırakarak ilave alan geçici olarak geri kazanılabilir:

sync; echo 3 > /proc/sys/vm/drop_caches

Bu özellik tamamen allocsizedosya sistemi montajı sırasında bir değer tanımlayarak devre dışı bırakılabilir . XFS için varsayılan allocsize=64k.

Bu değişikliğin etkisi muhtemelen izleme / eşikleme sistemleri (bu şekilde nasıl yakaladım) tarafından hissedilir, ancak aynı zamanda veritabanı sistemlerini de etkiledi ve ince hazırlanmış sanal makineler ve depolama dizileri için öngörülemeyen veya istenmeyen sonuçlara neden olabilir (kullanacaklar beklediğinizden daha fazla alan).

Sonuç olarak, beni dikkatlice yakaladı, çünkü dağıtım seviyesindeki dosya sistemi değişikliğinin ve hatta XFS posta listesinin izlenmesi konusunda net bir açıklama yapılmadı .


Düzenleme :
Bu özellik ile XFS birimlerindeki performans büyük ölçüde geliştirilmiştir. Daha önce% 50'ye kadar parçalanma gösteren birimlerde tutarlı <% 1 parçalanma görüyorum. Yazma performansı dünya çapında yükseliyor!

Aynı veri kümesinden gelen istatistikler, eski XFS'yi EL6.3'teki sürümle karşılaştırarak.

Eski:

# xfs_db -r -c frag /dev/cciss/c0d0p9
actual 1874760, ideal 1256876, fragmentation factor 32.96%

Yeni:

# xfs_db -r -c frag /dev/sdb1
actual 1201423, ideal 1190967, fragmentation factor 0.87%

4
Size bir milyon dolar ve krallığım artıyor
Joel E Salas

1
Teşekkür ederim! Az önce Debian Squeeze’den Ubuntu’ya yükselttik ve du ve ls'in niçin büyük dosyalar için bu kadar çılgınca farklı değerler gösterdiğini merak ediyorduk (örn. 50Mb vs 64Mb)
Giles Thomas

1
@wwhite Alanı geri kazanmak için bu özelliği kapattınız mı? Yoksa bu makale sadece şunu söylüyor, hey, bu özellik bildirilen boyutlarda tutarsızlığa neden olan şeydi? Kulağa "veritabanı sistemlerinde veya ince ayarlanmış VM'lerde bunu kapatmayı düşünün" gibi geliyor, ancak sonuçta ne yapmaya karar verdiğinizden emin değilim.
JDS

2
jds, bırakıyorum. Parçalanmayı ortadan kaldırıyor ve uygulamalarımı artırıyor.
ewwhite,

3
Oh, harika bul. Bu, 35 GB dosyalarda 750 GB kullanıyordu. Sonra xfs_fsro 35GB hakkında aşağı geri döndü. Bunun bir göz tutmak gerekir
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.