Ext4 bölümündeki 4 milyar dosya sınırı aşıldığında ne olur?


46

Örneğin, 5 milyar dosya aktarımıyla ext4 bölümündeki 4 milyar dosya limiti aşıldığında ne olur?

Yanıtlar:


79

Muhtemelen, "Cihazda yer kalmadı" hatasını gösteren bir lezzet göreceksiniz:

# truncate -s 100M foobar.img
# mkfs.ext4 foobar.img
Creating filesystem with 102400 1k blocks and 25688 inodes
---> number of inodes determined at mkfs time ^^^^^
# mount -o loop foobar.img loop/
# touch loop/{1..25688}
touch: cannot touch 'loop/25678': No space left on device
touch: cannot touch 'loop/25679': No space left on device
touch: cannot touch 'loop/25680': No space left on device

Ve pratikte bu sınıra "4 milyar dosya" dan çok daha erken vardınız. Dosya sistemlerinizi her ikisiyle de kontrol edin df -hve df -ine kadar boşluk kaldığını bulmak için.

# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       93M  2.1M   84M   3% /dev/shm/loop
# df -i loop/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/loop0      25688 25688     0  100% /dev/shm/loop

Bu örnekte, dosyalarınız ortalama olarak 4K boyutunda değilse, inode-space'sini depolama alanından çok daha erken bitirdiniz. Başka bir oranını belirtmek mümkündür ( mke2fs -N number-of-inodesveya -i bytes-per-inodeya -T usage-typetanımlandığı gibi /etc/mke2fs.conf).


1
Cevabınız için teşekkür ederim, bazen endişeliyim, ana
bölümümde

5
@ensuperpc: Dosyaların çoğu düzenli olarak kullanılmazsa - sadece yedekleme amacıyla var - her projeyi kendi tar dosyasına koymayı düşünebilirsiniz. Bu, dosya sayısını önemli ölçüde azaltır ve ayrıca bir sıkıştırma seçeneği kullanıyorsanız, kullanılan alanı da azaltır.
jamesqf

27
@jamesqf Henüz yapmadıysanız, git repacktüm ayrı nesneleri bir paket dosyasına birleştirmek için her git deposunda çalıştırmayı deneyin .
user253751

13
+1 touchFantezi kullanmayacağınız için sadece bir fantezi kullanmıyorsunuz , echoayrıca önemli bir noktayı ve sık sık yapılan bir yanılgıyı da gösteriyorsunuz: Bir diski boş dosyalarla doldurmak mümkündür.
rexkogitans

6
@jamesqf git repackhiçbir işlevselliği kaybetmez, yine de işlevsel olarak aynı git repo'dur , tarbir proje veya git deposu bekleyen birçok program için okunamaz kılar
Ferrybig

52

Sınıra ulaşıldığında, daha sonra dosya yaratma denemeleri başarısız olur ve ENOSPCbu da hedef dosya sisteminin yeni dosyalar için yer olmadığını gösterir.

Tarif ettiğiniz senaryoda, bu genellikle sınıra ulaşıldığında devir iptaline neden olur.

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.