Що станеться, якщо в розділі ext4 було перевищено ліміт 4 мільярди файлів, наприклад, при передачі 5 мільярдів файлів?
Що станеться, якщо в розділі ext4 було перевищено ліміт 4 мільярди файлів, наприклад, при передачі 5 мільярдів файлів?
Відповіді:
Імовірно, ви побачите деякий аромат помилки "Не залишається місця на пристрої":
# 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 repo, tar
робить його нечитабельним для багатьох програм, які очікують на проект чи сховище git
Після досягнення межі подальша спроба створити файли не вдасться ENOSPC
, що вказує на те, що цільова файлова система не має місця для нових файлів.
В описуваному сценарії це, як правило, призводить до того, що передача буде перервана після досягнення межі.