inode, birçok küçük dosya için tüketilen alan karşılaştırması (xfs, btrfs, ext4)


9

Ben 3-4 ayda bir uzatmak zorunda büyük miktarda küçük dosyaları ile bir ext4 bölüm (bir VM üzerinde LVM) var.

Düğümlerin kullandığı alan miktarı ile ilgili.

Xfs, btrfs veya ext4 dosya sistemlerinden biri daha az yer kullanıyor mu?

Başka bir deyişle, btrfs veya xfs'ye geçmek, bir bölümü inotlarla daha yavaş doldurup ext4 ile doldurur mu?


ext4 kullanıyorsanız ve çoğunlukla küçük türleri depolamayı bekliyorsanız, mkfs.ext4 -t newsen iyi sonucu elde etmek için bunu oluşturmalısınız . Ayrıca, test etmenizi öneririm - sırayla dosya öğelerinin her birini (örneğin lvm veya geri döngü aygıtında) oluşturun ve dolana kadar gerçek dosyalarınızı kopyalamaya başlayın. Doldurulduğunda, hangisinin dosyalarınızın çoğunu depolamayı başardığını bulmak için df -i(veya find | wc -l) yapın - bu şekilde kesin olarak bileceksiniz.
Matija Nalis

1
@MatijaNalis, -Tbüyük harf T ile. Yapılandırma dosyasında başka kullanışlı görünümlü seçenekler de var
ilkkachu

@ilkkachu doğru, teşekkürler. O olmalımkfs.ext4 -T news
Matija Nalis

Dosyalar ne kadar küçük?
drudru

Yanıtlar:


6

İlk sorunuzla başlamak için: evet, bu dosya sistemlerinden biri daha az yer kaplıyor. Daha fazla ayrıntı olmasa bile, farklı uygulamalara sahip oldukları göz önüne alındığında, hepsinin aynı miktarda alan kullanması olası değildir. Bu nedenle, bir kişi diğerlerinden daha az yer kullanmaya bağlıdır.

Btrfs dinamik inode tahsisine sahiptir, bu nedenle ext4 (in ext4 dosya sistemi oluşturma zamanında ayarlanan boyut) için inode tablolarında olduğu gibi doldurma yoktur.

XFS benzer bir şekilde dinamiktir, ancak bir limite sahiptir (inode için kullanılabilecek dosya sisteminin yüzdesi), bu nedenle, inode izninizi doldurup doldurmamanız, ayarlanan yüzdeye ve dosya sayısına / dosya boyutlarına bağlıdır


Hızlı cevap için teşekkürler! Şimdilik XFS en güvenli seçim gibi görünüyor. Bu inode kullanım yüzdesi dinamik olarak değiştirilebilir mi? ve eğer değilse, ne kadarın gerekli olacağını tahmin etmenin bir yolu var mı?
abadys

1
Bunu şu şekilde yapabilmelisinizxfs_growfs -m XX
Anthon

3

Evet ve her şeyin ihtiyaçlarınıza bağlı olduğunu unutmayın:

Btrfs (Butter FS, Better FS veya B-Tree FS olarak telaffuz edilir)

Düşünüldüğünde btrfs birden fazla sabit disk üzerinde yayılan için mümkün olacak, bunun 16 kat daha fazla sürücü alanını destekleyebilir bu çok iyi bir poit olan ext4 . Btrfs dosya sisteminin maksimum bölüm boyutu 16 exbibyte ve maksimum dosya boyutu da 16 exbibyte'dir.

Maksimum Dosya Sayısı: 2 ** 64

XFS'in

XFS'in yüksek performanslı 64 bit günlük kaydı dosya sistemidir. XFS, 64 bit dosya sistemi için maksimum 8 exbiby dosya sistemi boyutunu destekler. Şimdi, RHEL 7.0/boot bölüm için XFS kullanma desteği de dahil olmak üzere varsayılan dosya sistemi olarak XFS kullanır .

Maksimum Dosya Sayısı: 2 ** 64

EXT4

Ext4'ün iyi çünkü ext3'te üzerinde hız artışı getirme bilinir. Ext4'ün bazı sınırları vardır. Maksimum dosya boyutu 16 tebibittir (kabaca 17,6 terabayttır). Ext4 ile sahip olabileceğiniz en büyük hacim / bölüm 1 exbibyte'dir. En modern dosya sistemlerinde olduğu gibi, günlük kaydı dosya sistemidir, bu da dosyaların esas olarak diskte nerede bulundukları ve diske yapılan diğer değişikliklerin günlüğünü tutacağı anlamına gelir. Tüm özelliklerinden bağımsız olarak, şeffaf sıkıştırmayı, şeffaf şifrelemeyi veya veri tekilleştirmesini desteklemez. Anlık görüntüler teknik olarak desteklenir, ancak bu özellik en iyi ihtimalle deneyseldir.

Maksimum Dosya Sayısı: 4 milyar

XFS ve Btrfs

XFS'nin herhangi bir RAID'si yokken, Btrfs RAID henüz tamamen kararlı değil ve ilk günlerinde. XFS'in daha fazla olgun olduğunu Btrfs ama Btrfs güçlü ve iyi bir büyüyen FileSystem biz inkar edemeyiz.

Şimdilik, XFS benim tercihim - özellikle RHEL 7'deki varsayılan FS olduğu için - gerçekten Btrfs'e ihtiyacım yoksa.


1
Bu, genel olarak dosya sistemleri hakkında bazı iyi arka plan bilgilerine sahiptir, ancak burada belirtilen küçük dosyaların özel sorununu görmüyorum.
ilkkachu

@ilkkachu "büyük miktarda küçük dosya" ne anlama geliyor? Dosyaların tümü inodes aracılığıyla oluşturulduğundan ve inode bir dosya sistemi nesnesini temsil etmek için kullanılan bir veri yapısı olduğundan, hepsi inode'larla ilgilidir. Sanırım tüm yazar ihtiyaçlarını açıkladım, ayrıca maksimum sayıda dosyadan bahsetmiştim.
FarazX

2

Sanırım sorun, kendi başına inodes ile dolduran bölüm değil, dosya sistemindeki inode sayısının tükenmesi. ext4, dosya sistemi oluşturulduğunda inode'ları statik olarak ayırır, ancak seçeneklerlemkfs.ext4 sayıyı şu şekilde ayarlayabilirsiniz :

-i inode başına
bayt Bayt / inode oranını belirtin. mke2fs, diskteki her inode başına bayt başına bayt alanı için bir inode oluşturur. İnot başına bayt oranı ne kadar büyük olursa, o kadar az düğüm oluşturulur.

-N inod
sayısı Dosya sistemi için ayrılması gereken inode sayısının varsayılan hesaplamasını geçersiz kılar (blok sayısına ve inot başına bayt oranına dayalıdır). Bu, kullanıcının doğrudan istenen düğüm sayısını belirlemesini sağlar.

El kitabı, FS oluşturulduktan sonra inode başına bayt oranının değiştirilemeyeceğini açıkça belirtir, ancak FS yeniden boyutlandırılırsa toplam sayı oranı karşılamak için ölçeklenir.

Ayrıca her bir inodeun boyutunu da ayarlayabilirsiniz . Varsayılan "en" dosya sistemlerinde 256 bayttır, ancak 128'e ("küçük" dosya sistemleri için varsayılan) indirilebilir. Ek alan, genişletilmiş özellikleri (örn. SELinux etiketleri) depolamak için kullanılır, bu nedenle bunlara ihtiyacınız yoksa, boyutu en aza indirmek güvenli olmalıdır.

-I inode boyutu
Her inodeun boyutunu bayt cinsinden belirtin. İnode-boyutu değeri 2'den büyük veya 128'e eşit bir güç olmalıdır.

df -iayrılan ve kullanılan düğüm sayısını göstermelidir. Varsayılan seçeneklerle, baktığım bir 30 GB'lik bölümün her 16 kB için bir inode vardı, ancak dosyalarınız çok küçükse, -i 4096sistemdeki her veri bloğu için bir inode olmasını ayarlayabilirsiniz .

Dosyalarınız 4096'dan küçükse, tüm normal dosyalar yine de bir tam veri bloğu gerektireceğinden dosya sistemi blok boyutunu da küçültmek isteyebilirsiniz. (Yani ext4'te. Diğer mevcut dosya sistemlerinin küçük dosyaların paketlenip paketlenmediğini bilmiyorum.)

-b blok boyutu
Blokların bayt cinsinden boyutunu belirtir. Geçerli blok boyutu değerleri blok başına 1024, 2048 ve 4096 bayttır. Atlanırsa, blok boyutu sezgisel olarak dosya sistemi boyutu ve dosya sisteminin beklenen kullanımı tarafından belirlenir (-T seçeneğine bakın).

mkfs.ext4ayrıca -T <type>bunların bazıları veya tümü için bir kısayol olarak kullanılabilecek bir seçeneğe sahiptir . Ayarlar vardır /etc/mke2fs.confmesela yapar benim Debian üzerinde hangi mkfs.ext4 -T smalliçin eşdeğer

mkfs.ext4 -b 1024 -I 128 -i 4096

Bu, birçok küçük dosya için kötü bir seçenek kümesi olmayabilir (ve xattrs yok).

Dosyalarınız bir kB'den bile küçükse, bir dosya sistemi verileri kaydetmenin en iyi yolu olmayabilir, ancak veritabanı veya uygulamaya özel bir sistem gibi bir şey düşünülmelidir.

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.