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