Перейти до вмісту

ext4

Очікує на перевірку
Матеріал з Вікіпедії — вільної енциклопедії.
Ext4
РозробникЕндрю Мортонd, Мінмін Цаоd і Теодор Цаоd
Структура
Структура директорійЗв'язаний список, B-дерево[1]
Структура файлівExtents/bitmap
Збійні секториTable
Обмеження
Максимальний розмір файлу16 тебібайт (розмір кластера 4 кібібайта)
Максимум файлів4 мільярда (задається під-час створення ФС)
Максимальна довжина імені файлу255 байт
Максимальний розмір тому1 ексбібайт (обмеження до 16 тебибайт через обмежений e2fsprogs)
Допустимі символи в назвахВсі символи окрім NULL і '/'
Можливості
Властивостіmodification (mtime), attribute modification (ctime), access (atime), delete (dtime), create (crtime)
Діапазон дат14 грудня 1901 - 10 травня 2446[2]
Точність збереження датиНаносекунда
Потоки метаданихНі
Атрибутиextents, noextents, mballoc, nomballoc, delalloc, nodelalloc, data=journal, data=ordered, data=writeback, commit=nrsec, orlov, oldalloc, user_xattr, nouser_xattr, acl, noacl, bsddf, minixdf, bh, nobh, journal_dev
Права доступуPOSIX
Фонова компресіяНі
Фонове кодуванняНі
Підтримується ОСLinux, Windows (тільки читання)

ext4, або Четверта версія розширеної файлової системи, — журнальована файлова система, котра використовується в ОС з ядром Linux. Заснована на файловій системі ext3, котра є файловою системою за замовчуванням в багатьох дистрибутивах.

Вперше експериментальна підтримка ext4 була випущена у вигляді патчу для Linux версій 2.6.19-rc1-mm1 та 2.6.19-rc1-git8 10 жовтня 2006 року програмістом Ендрю Мортоном (англ. Andrew Morton)[3].

11 жовтня 2008 року код був доданий до стабільної версії репозиторію ядра Linux. Версія ядра 2.6.28 вже мала підтримку ext4, та була випущена 25 грудня 2008.

Властивості

[ред. | ред. код]

Розміри та обмеження

[ред. | ред. код]
  • розмір файлу до 16 ТБ;
  • розмір ФС до 1024 ПБ;
  • кількість файлів 4 мільярди;
  • необмежена кількість підкаталогів;
  • дозволені всі знаки, окрім NUL та /;
  • межі дат 14 грудня 1901 — 10 травня 2446;
  • мінімальна зміна часу — наносекунда.

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

В загальному сенсі ext4 зворотно сумісна з ext3 та ext2[4]. Деякий функціонал несумісний з попередніми версіями, наприклад опції: ^extent, ^flex_bg, ^huge_file, ^uninit_bg, ^dir_nlink, та ^extra_isize[5].

У зв'язку з тим що linux все частіше використовується в інформаційних системах для широкого спектра застосунків, в тому числі там де потрібна висока гранулярність часу, більша ніж 1 секунда, в часових позначках з'явилась підтримка наносекунд. Для реалізації точності структура часу була збільшена на 32 біти, 30 з яких використовується під наносекунди, а ще 2 біти під секунди, таким чином секунди мають 36 біт, і проблема їх переповнення настане у 2446 році[2].

Підтримка квот для проєктів

[ред. | ред. код]

Підтримку квот на проєкти було додано до ядра Linux 4.4 8 січня 2016 року. Ця функція дозволяє призначати обмеження квоти на диск для певного ідентифікатора проєкту. Ідентифікатор проєкту файлу – це 32-бітне число, яке зберігається в кожному файлі та успадковується всіма файлами та підкаталогами, створеними під батьківським каталогом із призначеним ідентифікатором проєкту. Це дозволяє призначати обмеження квоти для певного дерева підкаталогів незалежно від дозволів доступу до файлів, таких як квоти користувачів і груп, що залежать від UID і GID. Хоча це схоже на квоту каталогу, головна відмінність полягає в тому, що один і той самий ідентифікатор проєкту можна призначити кільком кореневим каталогам, і він не є строго ієрархічним[6].

Прозоре шифрування

[ред. | ред. код]

Додано в ядро 4.1 в червні 2015 року[7].

Лінива ініціалізація

[ред. | ред. код]

Цей механізм дозволяє чистити таблицю inode в фоні, пришвидшує ініціалізацію коли створюється файлова система[8]. Доступний з 2010 з версії ядра Linux 2.6.37.[9]

Бар'єри на запис

[ред. | ред. код]

ext4 за замовчуванням вмикає бар'єри запису. Це гарантує, що метадані файлової системи будуть записані на диск у правильному порядку, навіть при раптовому відключенні живлення. Це може вплинути на продуктивність, особливо для програм, які часто використовують fsync або створюють і видаляють багато маленьких файлів.

Для дисків що мають для кешу запису резервне живлення відключення бар'єрів (опція 'barrier=0') може покращити продуктивність, але в загальному випадку опція увімкнена, що підвищує надійність[10].

Підтримка ext4 включена до релізу Fedora 9, Ubuntu 9.04 (Jaunty Jackalope), openSUSE 11.2.

Див. також

[ред. | ред. код]

Примітки

[ред. | ред. код]
  1. Hashed B-tree. Архів оригіналу за 18 липня 2019. Процитовано 30 жовтня 2014. [Архівовано 2019-07-18 у Wayback Machine.]
  2. а б ext4: Fix handling of extended tv_sec. Linux-stable kernel tree. Процитовано 14 лютого 2017.
  3. Офіційна заява Ендрю Мортона про включення підтримки ext4[недоступне посилання з червня 2019](англ.)
  4. Anatomy of ext4. IMB Developer. Процитовано 27 травня 2024.
  5. Mount of ext4 (created without extents) as ext3 fails on RH6.2. www.linuxquestions.org. Архів оригіналу за 5 серпня 2023. Процитовано 8 грудня 2023.
  6. Li, Xi (12 січня 2016). ext4: add project quota support (Список розсилки). Архів оригіналу за 20 вересня 2023. Процитовано 8 грудня 2023.
  7. Ts'o, Theodore (8 квітня 2015). Ext4 encryption. Архів оригіналу за 12 жовтня 2023. Процитовано 8 грудня 2023.
  8. Ext4 Filesystem. Thomas-Krenn-Wiki. Архів оригіналу за 14 лютого 2022. Процитовано 8 грудня 2023.
  9. kernel/git/torvalds/linux.git - Linux kernel source tree. git.kernel.org.
  10. Ext4 -. ArchWiki.

Посилання

[ред. | ред. код]