Что произойдет, если в разделе ext4 было превышено ограничение в 4 миллиарда файлов, например, при передаче 5 миллиардов файлов?
46
Предположительно, вы увидите некоторое сообщение об ошибке «Нет места на устройстве»:
# 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
И на практике вы достигаете этого предела намного раньше, чем «4 миллиарда файлов». Проверьте ваши файловые системы с обоими df -h
и df -i
выясните, сколько места осталось.
# 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
В этом примере, если ваши файлы в среднем не имеют размера 4 КБ, у вас заканчивается пространство inode намного раньше, чем пространство хранения. Можно указать другое соотношение ( mke2fs -N number-of-inodes
или -i bytes-per-inode
или -T usage-type
как определено в /etc/mke2fs.conf
).
git repack
в каждом репозитории git, чтобы объединить все отдельные объекты в файл пакета.touch
, ничего особенногоecho
, вы также показываете важный момент и часто ошибочное представление: возможно заполнить диск пустыми файлами.git repack
не теряет никакой функциональности, он все еще функционально тот же git-репо,tar
делает его нечитаемым для многих программ, ожидающих проекта или git-репозиторияКак только предел достигнут, последующие попытки создания файлов будут неудачными
ENOSPC
, указывая, что в целевой файловой системе нет места для новых файлов.В описываемом вами сценарии это обычно приводит к прерыванию передачи после достижения предела.
источник