Ядро Linux 7.3 избавляется от EFS и FreeVxFS и получает FailFS
Среди первых pull-запросов, принятых Линусом Торвальдсом для цикла разработки ядра Linux 7.3, — удаление нескольких устаревших файловых систем и добавление одной новой псевдо-ФС с необычным назначением.
Прощание с реликтами
Как и ожидалось, из ядра убрали драйвер FreeVxFS — открытую реализацию только для чтения файловой системы Veritas VxFS, некогда применявшейся в HP-UX и SCO UnixWare. По словам авторов патча, обеспечивать совместимость со «староукладными» Unix-системами 1990-х годов было увлекательно четверть века назад, а сегодня код служит в основном пищей для автоматических анализаторов ошибок. За последние 15 лет у драйвера нашёлся лишь один известный пользователь, он же контрибьютор.
Отдельным запросом удалён и EFS — дисковый формат только для чтения, который SGI использовала в IRIX до появления XFS. Этот драйвер оставался без сопровождения более 20 лет. В сумме удаление EFS и FreeVxFS убрало из ядра около 3,7 тысячи строк кода.
FailFS: файловая система, которая ничего не умеет
Взамен в Linux 7.3 появился новый драйвер FailFS, дополняющий недавно принятую NULLFS. Если NULLFS предоставляет постоянно пустой неизменяемый каталог, поиск в котором завершается ошибкой ENOENT, но который можно открыть, прочитать, получить о нём stat и смонтировать поверх, то FailFS доводит идею до предела: любая операция, дошедшая до этой файловой системы, возвращает EOPNOTSUPP («операция не поддерживается»). Сам корень нельзя даже открыть.
Смысл в том, чтобы процесс мог полностью сбросить своё состояние в файловой системе. Разработчик Кристиан Браунер поясняет: задача с корневым или рабочим каталогом в FailFS обязана привязывать каждый поиск пути к явному файловому дескриптору. Абсолютные пути, абсолютные символические ссылки и поиск относительно AT_FDCWD просто завершаются неудачей. Единственный экземпляр FailFS монтируется на раннем этапе загрузки через kern_mount(), что делает его логически отделённым от всех пространств имён монтирования.
Вместе с драйвером добавлен новый системный вызов fchroot(), превращающий смену корня через файловый дескриптор в полноценную концепцию. Выполнить chroot в FailFS может даже непривилегированный пользователь — при условии, что у задачи установлен флаг «no new privileges». Весь FailFS вместе с документацией занимает всего 931 строку кода.
И немного о NILFS2
В рамках той же серии VFS-запросов обновилась и редко упоминаемая файловая система NILFS2: чтения с флагом O_DIRECT переведены на инфраструктуру IOmap.
Источник: Phoronix
Комментарии
Войдите, чтобы комментировать.