Що станеться, якщо в розділі ext4 було перевищено ліміт 4 мільярди файлів?


46

Що станеться, якщо в розділі ext4 було перевищено ліміт 4 мільярди файлів, наприклад, при передачі 5 мільярдів файлів?

Відповіді:


79

Імовірно, ви побачите деякий аромат помилки "Не залишається місця на пристрої":

# 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).


1
Дякую за вашу відповідь, колись я хвилююся, у мене в головному розділі є понад 400 мільйонів файлів (RAID 50), у мене є багато сховищ git, це було для безпеки, якби це сталося
— Bensuperpc

5
@ensuperpc: Якщо багато файлів не використовуються регулярно - просто там для резервного копіювання - ви можете розглянути можливість створення кожного проекту у власному файлі tar. Це значно скорочує кількість файлів, а також займає простір, якщо використовується опція стиснення.
— jamesqf

27
@jamesqf Якщо ви ще цього не зробили, спробуйте запустити git repackв кожному сховищі git, щоб об'єднати всі окремі об'єкти у файл пакету.
— користувач253751

13
+1 Оскільки ви просто використовуєте touch, не маючи фантазії echo, ви також показуєте важливий момент і часто помилкове уявлення: Можна заповнити диск порожніми файлами.
— rexkogitans

6
@jamesqf git repackне втрачає жодної функціональності, він все ще функціонально той же git repo, tarробить його нечитабельним для багатьох програм, які очікують на проект чи сховище git
— Ferrybig

52

Після досягнення межі подальша спроба створити файли не вдасться ENOSPC, що вказує на те, що цільова файлова система не має місця для нових файлів.

В описуваному сценарії це, як правило, призводить до того, що передача буде перервана після досягнення межі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.