Стаття також доступна російською (перейти до перегляду).
Призначення Inode в ОС Linux
Для ОС Linux є таке поняття, як Inode або індексний дескриптор. Індексні дескриптори у файлових системах (таких як ext4) призначені для зберігання метаданих про файли, каталоги та інші об'єкти.
Уявимо ієрархічну структуру файлової системи Лінукс в спрощеному виді:
- верхівка ієрархії — це сама файлова система;
- рівнем нижче йдуть імена файлів (папок);
- імена файлів посилаються на inode;
- inode посилаються на фізичні дані.
Таким чином, файлова система Linux містить блоки для зберігання даних та inodes. За умовчанням, в ext4, 4092 байти — це розмір одного блоку. Будь-який файл в каталозі ОС Linux має ім'я файлу і номер inode. Користувач може дізнатися метадані цього файлу, вказавши його номер inode.
Як правило, кожен Inode зберігає наступні атрибути:
- розмір;
- власник;
- дата/час;
- дозволи і контроль доступу;
- розташування на диску;
- тип файлу;
- кількість посилань;
- додаткові метадані про файл.
Таблиця з Inode розміщена на початку розділу диска, після неї вже йдуть блоки з даними. Директорії в ОС Лінукс розглядаються як Inode типу «директорія», вони містять списки імен файлів та номера їх inode.
Для ОС Лінукс також важливим є поняття посилань: символічні і жорсткі посилання.
Символічне посилання — це за своєю суттю «ярлик», воно містить адресу файлу.
Якщо ви спробуєте відкрити таке посилання, то відкриється відповідний файл (папка). Якщо видалити цей файл (папку), символічне посилання не видалиться, але при спробі відкрити його — воно приведе «в нікуди raquo;. Номер Inоdе «символічного посилання» відрізняється від номера inоde того файлу, на який воно посилається.
Якщо ж ви використовуєте «жорсткі посилання», то ваш конкретний файл знаходиться тільки у визначеному місці жорсткого диска, а вже саме на це місце і ведуть відразу декілька посилань. Кожне «жорстке посилання» представлене у вигляді окремого файлу, проте всі посилання такого виду вказують на одну і ту ж ділянку диску (навіть якщо ми переміщуємо цей файл між різними каталогами). Жорстке посилання в системі йде під таким же номером Inode, як і фaйл, на який воно посилається.
Здавалося б, тема «Inode в ОС Linux» — це сфера діяльності системних адміністраторів і не стосується пересічних користувачів, проте, у вас може статися такий випадок, коли на диску начебто є ще вільне місце, а ось нові файли ви вже створювати не можете, оскільки у вас закінчилися номери inode. У цій статті ми пояснюємо навіщо потрібний inode, а також розглянемо, як працювати з linux інод і дамо усі необхідні команди для цього.
Методи і команди для роботи c Linux inode
Усі способи роботи з linux inode будуть показані на прикладі десктопної ОС Ubuntu 20. Перед початком роботи, необхідно дізнатися, на якому диску розташована файлова система, в нашому випадку — це /dev/sda5. Номер 2 має наша коренева тека (для ext4).
Якщо вам знадобляться права користувача root для виконання деяких команд, то заздалегідь виконайте:
sudo -i
Команди ls та df
Найбільш відома команда Linux, яку можна рекомендувати для перегляду інформації про індексні дескриптори — це ls, використовувана з параметрами -i, -li. За допомогою ls ми можемо вивести на монітор відомості про вміст каталогів і файли нашої ОС.
Отже, подивимося inode для файлів нашої системи за допомогою команди:
ls -li /
Ще одна корисна команда для отримання інформації про Inode, яка дозволяє нам вивести інформацію про файлові системи, каталоги, кількість вільних Inode та їх номери:
df -hi
Ця команда буде корисна, щоб подивитися, скільки inode вже використано в системі, а який відсоток їх вільний. Ці дані дозволять вам запобігти ситуації, коли на диску вільне місце ще є, а ось нові файли вже створювати не можна.
Як працювати з налагоджувачем debugfs
Debugfs — це утиліта для роботи з файловими системами Ext2/Ext3/Ext4, працює вона в режимі налагоджувача. Для виведення списку усіх команд утиліти, скористайтеся опцією help, для виходу з режиму налагоджувача треба скористатися командою quit.
Отже, подивимося інформацію про диск, на якому розташована наша файлова система:
sudo debugfs /dev/sda5
Після цього, виконаємо таку команду:
debugfs: stat
Яку ж основну інформацію ми можемо отримати з цього скріншоту?
- Тип Inode — директорія (Directory).
- Права (Mode) — 755.
- Власник директорії (User) — група root (ідентифікатор користувача 0).
Нижче знаходяться блоки з даними для цього Inode, тут зберігається список директорій і файлів. Для перегляду блоку можна скористатися командою (результати на скриншоті нижче):
debugfs: block_dump 9308
На скриншоті ми бачимо тільки дані, записані у форматах HEX та ASCII, праворуч можна побачити імена папок.
А для того, щоб отримати номери Inode, скористаємося наступними командами:
debugfs: ls -l
У першому стовпчику (ліворуч) ми бачимо номери inode для папок або файлів, для прикладу, можна знайти папку usr c номером інод 6160385 і подивитися цей запис:
debugfs: stat
Зараз звернемо увагу на розділ EXTENTS, там міститься запис з номером блоку, в якому знаходиться вміст цієї директорії, подивимося його за допомогою команди:
debugfs: block_dump 24649760
Приклад використання команди tune2fs
Як ми вже знаємо, кількість інод в системі обмежена, подивитися цю інформацію можна за допомогою команди tune2fs. Утиліта tune2fs дає можливість користувачу змінювати різні параметри файлових систем ext2/ext3/ext4. А також вона дозволяє подивитися встановлені в системі параметри.
sudo tune2fs -l /dev/sda5
На цьому скриншоті можна побачити загальну кількість Inode в системі:
Inode count 30498816
Команда mkfs для створення нової файлової системи в Лінукс
Команда mkfs (“make file system”) використовується для форматування файлової системи Лінукс. На етапі створення нової файлової системи можна створити більшу кількість Inode, щоб в майбутньому уникнути проблеми з їх нестачею. Робиться це наступною командою (створюємо файлову систему з 10 мільйонами inode):
mkfs -t ext4 -N 10000000 /dev/sda5
Заздалегідь знаючи приблизний розмір своїх файлів, можна вказати кількість байт в одному Inode, використовуючи для цього наступний синтаксис команди:
mkfs -t ext4 -i 4K /dev/sda5
Використання альтернативних файлових систем
Для тих користувачів, хто не хоче зазнавати проблеми з нестачею Inode у файлових системах ext2/ext3/ext4, ми можемо порадити використання альтернативної файлової системи Btrfs (B-tree FS або Better Fs, Butter FS), яка базується на принципах структур B-дерев та «копіювання при записі» (copy-on-write). Основна перевага Btrfs — це використання динамічного виділення inоdе, яке виключає обмеження на максимальну кількість файлів у файловій системі, що існує в системах ext.
Висновок
У цій статті ми постаралися пояснити читачам, що таке Inode в ОС Linux, а також дали ряд корисних команд і утиліт для роботи з індексними дескрипторами. Також ми постаралися розповісти, як запобігти проблемі на диску, коли закінчилися Inode.
Сподіваємося, що цей матеріал буде корисний, як звичайним користувачам ОС Лінукс, так і системним адміністраторам початківцям.
Якщо ж у вас виникають проблеми з індивідуальним налаштуванням вашої ОС Linux на арендовані у нас сервери, то ви завжди можете звернутися за консультацією до фахівців нашої компанії FREEhost.UA.
Дата: 24.03.2021 Автор: Владислав
|
|
Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:
comments powered by Disqus