Co się stanie, jeśli limit 4 miliardów plików zostanie przekroczony na partycji ext4, na przykład w przypadku transferu 5 miliardów plików?
46
Przypuszczalnie zobaczysz smak błędu „Brak miejsca na urządzeniu”:
# 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
W praktyce osiągasz ten limit znacznie wcześniej niż „4 miliardy plików”. Sprawdź oba systemy plików df -h
i df -i
dowiedz się, ile pozostało miejsca.
# 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
W tym przykładzie, jeśli twoje pliki nie mają przeciętnie rozmiaru 4K, zabraknie miejsca inode znacznie wcześniej niż miejsca do przechowywania. Jest to możliwe, aby określić inny stosunek ( mke2fs -N number-of-inodes
czy -i bytes-per-inode
lub -T usage-type
jak zdefiniowano w /etc/mke2fs.conf
).
git repack
w każdym repozytorium git, aby połączyć wszystkie oddzielne obiekty w plik pakietu.touch
, nie ma w tym nic dziwnegoecho
, pokazujesz także ważną kwestię i często popełniane nieporozumienia: możliwe jest wypełnienie dysku pustymi plikami.git repack
nie traci żadnej funkcjonalności, jest funkcjonalnie tym samym repozytorium git,tar
czyni go nieczytelnym dla wielu programów oczekujących projektu lub repozytorium gitPo osiągnięciu limitu kolejne próby utworzenia plików zakończą się niepowodzeniem
ENOSPC
, co oznacza, że docelowy system plików nie ma miejsca na nowe pliki.W opisanym scenariuszu zazwyczaj spowoduje to przerwanie transferu po osiągnięciu limitu.
źródło