Що станеться, якщо в розділі 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.