Чому таблиця inode зазвичай не змінюється?


19

У файлових системах Unix зазвичай є таблиця inode, і кількість записів у цій таблиці зазвичай фіксується під час створення файлової системи. Іноді це призводить до того, що люди з великою кількістю дискового простору отримують заплутані повідомлення про помилку про відсутність вільного місця, і навіть після того, як вони з'ясують, у чому проблема, немає простого рішення, що з цим робити.

Але мені здається, що дуже хотілося б уникнути цілого безладу, розподіляючи нутри на вимогу, повністю прозоро для користувачів та системних адміністраторів. Якщо ви потрапляєте в симпатичні хаки, ви навіть можете зробити таблицю inode самим файлом і, таким чином, повторно використати вже наявний у вас код, який знайде вільний простір на диску. Якщо вам пощастить, ви, можливо, навіть укладете вкладені файли біля самих файлів, не намагаючись явно досягти цього результату.

Але ніхто (що я знаю) насправді цього не робить, тому, мабуть, є улов, якого я пропускаю. Будь-яка ідея, що це може бути?


4
Ви щойно винайшли головний каталог файлів та індекс файлів-11 у VMS, попередник таблиці головних файлів у NTFS.
JdeBP

Я винаходив попередник для MFT? Класно!
Марк VY

Відповіді:


26

Скажіть, ви зробили таблицю inode файлом; то наступне питання - де ви зберігаєте інформацію про цей файл? Таким чином, вам знадобляться "справжні" входи та "розширені" входи, як таблиця розділів MS-DOS. Враховуючи, вам знадобиться лише одне (а може бути декілька - наприклад, щоб ваш журнал також був файлом). Але у вас насправді є спеціальні випадки, інший код. Будь-яке пошкодження цього файлу теж було б згубним. І врахуйте, що до журналу це було звичайним для файлів, які писалися, наприклад, коли потужність сильно пошкодилася. Ваші файлові операції повинні бути набагато більш надійними, порівняно з відключенням електроенергії / збоєм / тощо. ніж вони були, наприклад, ext2.

Традиційні файлові системи Unix знайшли більш просте (і більш надійне) рішення: поставити блок inode (або групу блоків) кожні X блоки. Тоді ви знаходите їх за простою арифметикою. Звичайно, тоді більше неможливо додати більше (без реструктуризації всієї файлової системи). І навіть якщо ви втрачаєте / пошкоджуєте блок inode, про який ви писали, коли живлення не вдалося, це втрачає лише кілька входів - набагато краще, ніж значна частина файлової системи.

Більш сучасні конструкції використовують такі речі, як варіанти B-дерева . Сучасні файлові системи, такі як btrfs, XFS та ZFS, не страждають від обмежень inode.


2
Коли ви говорите "не страждають від обмежень inode", чи означає це, що нові введення виділяються повністю за кадром, чи комусь потрібно виконати команду типу "розширити таблицю-зараз-будь ласка"?
Марк VY

3
@MarkVY повністю поза кадром (якщо взагалі справді взагалі використовуються).
дероберт

Гаразд, тож мої знання явно відстають від часів. Дякую за детальну відповідь. Я ніколи не замислювався над тим, що буде у випадку втрати електроенергії чи подібного. Тож мій симпатичний злом досить небезпечний, якщо "додавання до файлу" вже не є атомною операцією у файловій системі. Про які ви стверджуєте, були досить рідкісними давніми часами.
Марк VY

Я пам'ятаю, XFS та btrfs дуже часто страждали від легкої пошкодження файлової системи - також zfs? Це не є ризиком для деяких, але це може бути ризиком для важливих даних та вартості динамічного розподілу. Для XFS в цьому магазині його вирішальним питанням було повне неможливість скорочення файлової системи будь-якими способами.
користувач2066657

Btrfs може не страждати від обмежень inode, але він страждає від зовсім іншої помилки, яка викликає аналогічно заплутані симптоми (в основному, він закінчується з простору метаданих, хоча все ще має достатньо простору даних, через неефективне використання груп блоків). Це не тільки призводить до того, що він повідомляє про помилки, заповнені дисками, коли у dfзвітах є достатньо місця, але його неможливо виправити, видаляючи файли, оскільки для видалення файлу потрібно виділити простір метаданих.
Марк

17

Багато файлових систем мають динамічно розподілену таблицю inode (або її моральний еквівалент) (XFS, BTRFS, ZFS, VxFS ...)

Оригінальний Unix UFS, хоча мав іноди, які були зафіксовані на час створення файлової системи, і файлові системи, отримані з неї (Linux EXT, Solaris UFS), часто продовжували схему. Це надійний і простіший в реалізації. Тож багато випадків використання добре підходять, що розробка нової файлової системи просто для того, щоб уникнути однієї проблеми непросто виправдати.


Хоча стільки прогресу в обчисленні було досягнуто людьми, що вирішують непрості в обґрунтуванні вирішення проблем.
користувач253751

2
Але також великий прогрес у непростих рішеннях :) Ранні "складні" файлові системи - NT епоха NTFS, reiserfs - мали катастрофічний вихід, коли вони не змогли ....
rackandboneman

6

Є файлові системи, які динамічно виділяють вставки: працюють вгорі голови, принаймні, Veritas VxFS (= файлова система HP-UX за замовчуванням, і один із варіантів, доступних у Solaris) та XFS (стандартний тип файлової системи в RHEL 7) цей шлях. Btrfs та JFS IBM також.

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