Örneğin, 5 milyar dosya aktarımıyla ext4 bölümündeki 4 milyar dosya limiti aşıldığında ne olur?
Örneğin, 5 milyar dosya aktarımıyla ext4 bölümündeki 4 milyar dosya limiti aşıldığında ne olur?
Yanıtlar:
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 -h
ve df -i
ne 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-inodes
veya -i bytes-per-inode
ya -T usage-type
tanımlandığı gibi /etc/mke2fs.conf
).
git repack
tüm ayrı nesneleri bir paket dosyasına birleştirmek için her git deposunda çalıştırmayı deneyin .
touch
Fantezi kullanmayacağınız için sadece bir fantezi kullanmıyorsunuz , echo
ayrı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.
git repack
hiçbir işlevselliği kaybetmez, yine de işlevsel olarak aynı git repo'dur , tar
bir proje veya git deposu bekleyen birçok program için okunamaz kılar
Sınıra ulaşıldığında, daha sonra dosya yaratma denemeleri başarısız olur ve ENOSPC
bu 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.