Apa yang terjadi jika batas 4 miliar file terlampaui di partisi ext4, dengan transfer 5 miliar file misalnya?
46
Agaknya, Anda akan melihat beberapa kesalahan "Tidak ada ruang tersisa di perangkat":
# 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
Dan dalam praktiknya Anda mencapai batas ini jauh lebih cepat dari "4 miliar file". Periksa filesystem Anda dengan keduanya df -h
dan df -i
untuk mengetahui seberapa banyak ruang yang tersisa.
# 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
Dalam contoh ini, jika file Anda tidak berukuran 4K rata-rata, Anda kehabisan ruang inode lebih cepat daripada ruang penyimpanan. Ini mungkin untuk menentukan rasio lain ( mke2fs -N number-of-inodes
atau -i bytes-per-inode
atau -T usage-type
sebagaimana didefinisikan dalam /etc/mke2fs.conf
).
git repack
di setiap repositori git untuk menggabungkan semua objek yang terpisah ke dalam file paket.touch
, tidak sukaecho
, Anda juga menunjukkan poin penting dan kesalahpahaman yang sering dibuat: Dimungkinkan untuk mengisi disk dengan file kosong.git repack
tidak kehilangan fungsionalitas apa pun, masih fungsional git repo yang sama,tar
membuatnya tidak dapat dibaca untuk banyak program yang mengharapkan proyek atau repositori gitSetelah batas tercapai, upaya selanjutnya untuk membuat file akan gagal dengan
ENOSPC
, menunjukkan bahwa sistem file target tidak memiliki ruang untuk file baru.Dalam skenario yang Anda jelaskan, ini biasanya akan mengakibatkan transfer dibatalkan setelah batas tercapai.
sumber