Файловые системы Linux

  Дмитрий Бушуев  | 

  Обновл. 28 Июл 2021  | 

 10051

 ǀ   3 

Файловая система — это набор стандартов и соответствующих процессов, которые определяют и управляют тем, в каком виде ваши данные хранятся на носителе информации и каким образом они могут быть из него извлечены.

Способ организации файловой системы в Linux

В качестве способа повышения эффективности ОС, в Linux применяется следующая модель файловой системы:

Благодаря такому подходу, добавление поддержки какой-нибудь новой файловой системы не потребует вносить соответствующих изменений в само ядро ОС.

Виртуальная файловая система (сокр. «VFS» от англ. «Virtual File System») — это специальный слой абстракции, предоставляющий программный интерфейс (единый набор команд) для взаимодействия между ядром и конкретной реализацией файловой системы.

Ядро Linux поддерживает различные типы файловых систем (ext3, ext4, ReiserFS, Btrfs, XFS и многие другие). На сегодняшний день наиболее часто используемой файловой системой является ext4, поэтому в данной статье основной упор будет сделан именно на нее.

Примечание: В Linux практически все объекты представлены в виде файлов (например, каталоги, принтеры, разделы диска, устройства и т.д.). Это делает еще более важным изучение того, как работает файловая система Linux.

Эволюция файловой системы ext в Linux


Давайте детально рассмотрим эволюцию файловой системы ext в Linux:

Файловая система Minix

Файловая система Minix — это первая файловая система, являющаяся прообразом современных файловых систем в Linux, которая была представлена в 1987 году Эндрю С. Таненбаумом в составе одноименной ОС Minix.

Операционная система Minix и её файловая система использовались в виде наглядного пособия для студентов, изучающих основы строения ОС (одним из таких студентов был сам Линус Торвальдс). Из-за того, что Minix была, прежде всего, учебной системой, её файловая система обладала множеством недостатков: производительность файловой системы оставляла желать лучшего; длина имени файла была ограничена 14 символами, а размер разделов — 64 МБ. Для сравнения, жесткие диски того времени имели размер вплоть до 140 МБ.

Файловая система ext

ext или extfs (сокр. от англ. «Extended File System») — это первая файловая система, предназначенная специально для Linux, которая была представлена в апреле 1992 года. Используемая структура метаданных была разработана Реми Кардом, на создание которой его вдохновила Unix File System. Максимальная длина имени файла составляла 255 символов, а размер раздела — до 2 ГБ.

Хотя ext и удалось решить проблемы, присутствовавшие в файловой системе Minix, у нее был один серьезный недостаток — временная метка. Сейчас, когда каждый файл в Linux имеет три временные метки (доступа к файлу, изменения содержимого файла, изменения свойств и метаданных файла (например, разрешений)), файловая система ext поддерживала только одну временную метку.

Файловая система ext2

В январе 1993 года, менее чем через год после выхода ext, Реми Кард разрабатывает новую файловую систему — ext2.

В ext2 были расширены функциональные возможности ext:

   увеличена производительность файловой системы;

   данные файлов хранились в блоках данных одинаковой длины;

   поддерживался максимальный размер файла в 2 тебибайта;

   длина имени файла была ограничена 255 байтами (а не количеством символов, как раньше).

Высокая скорость работы ext2 объяснялась тем, что система не поддерживала механизм ведения логов (или «журналируемости»). С одной стороны, данный аспект можно отнести к преимуществу ext2, так как при работе с имеющими ограниченный ресурс использования накопителями (например, SSD-дисками или USB-устройствами), нет избыточных циклов перезаписи данных, следовательно, ресурс накопителя расходуется медленнее. С другой стороны, отсутствие системы ведения логов в ext2 часто приводило к двум очень неприятным проблемам:

   Повреждение файлов, если в момент записи данных на диск отключалось питание или возникал сбой системы.

   Потеря производительности из-за фрагментации данных: происходит, когда один файл разбивается на части (фрагментируется) и распределяется по нескольким местам на диске. В результате чтение и запись файлов занимают больше времени, что приводит к снижению производительности файловой системы.

Система ext2 использовалась по большей части до начала 2000-х годов, когда была представлена файловая система ext3.

Файловая система ext3

В ноябре 2001 года, благодаря усилиям программиста Стивена Твиди, вместе с релизом ядра Linux 2.4.15 увидела свет и новая файловая система — ext3.

Файловая система ext3 — это улучшенная версия файловой системы ext2, в которой появилась возможность ведения логов. Она, как и ext2, поддерживает файлы размером в 2 тебибайта, а имена файлов ограничены 255 байтами.

Благодаря логам, система сохраняет в специальном лог-файле (или «журнале») всю информацию об изменениях в данных, которые еще предстоит внести. В случае потери питания или сбоя системы, информация о файлах, хранящаяся в логах, может быть восстановлена в течение нескольких секунд, благодаря чему снижается риск повреждения или потери данных.

Ядро Linux поддерживает три уровня ведения логов:

   Journal — состоит из записи метаданных и содержимого файлов в лог-файл до внесения изменений в основную файловую систему, тем самым обеспечивая наиболее полное логирование данных. Если случится какая-нибудь аварийная ситуация, то можно перечитать лог-файл и восстановить потерянную информацию. Недостатком данного уровня ведения логов является то, что он снижает производительность системы.

   Ordered — процесс сохранения данных выполняется в определенном порядке: сначала в лог-файл записываются метаданные, затем содержимое файла записывается в основную файловую систему и уже тогда метаданные соединяются с основной файловой системой. В случае сбоя, основная файловая система не будет повреждена; риску повреждения подвергаются только те файлы, которые находятся во время сбоя непосредственно в процессе записи.

   Writeback — уровень ведения лог-файла, при котором в него заносятся только метаданные, а содержимое файла записывается непосредственно в основную файловую систему. Из-за отсутствия синхронизации метаданных и содержимого файлов, в случае сбоя системы они, скорее всего, окажутся поврежденными.

Файловая система ext4

Файловая система ext4 была представлена в октябре 2008 года вместе с ядром Linux 2.6.28. Она поддерживает максимальный размер файла в 16 тебибайт и ограничивает максимальную длину имени файла 255 байтами.

Особенности файловой системы ext4

Давайте рассмотрим основной функционал файловой системы ext4:

   Обратная совместимость. Файловая система ext4 поддерживает обратную совместимость с файловыми системами ext3 и ext2. Дополнительной функцией является автоматическое монтирование файловой системы ext3 в режиме ext3 с помощью драйвера ext4.

   Улучшения распределения. Файловая система ext4 более эффективно распределяет блоки данных перед их записью на диск. Это повышает производительность как чтения, так и записи.

   Расширение диапазона временных меток. Файловая система ext4 добавляет еще 408 лет к диапазону значений временных меток и поддерживает даты вплоть до 10 мая 2446 года. Также улучшилась точность временных меток — теперь они измеряются в наносекундах.

   Экстенты (Последовательные блоки). Устаревшие версии файловой системы ext отслеживают каждый блок, который связан с хранением данных файла (данный подход называется методом «непрямого сопоставления»). Но этот процесс перестает быть эффективным, когда речь заходит о больших файлах, требующих большого количества блоков. Экстенты решили эту проблему: с их помощью уменьшается объем метаданных, необходимых для сопоставления блоков каждого файла. Система сохраняет адрес только первого и последнего блока некоторого довольно большого файла, сообщая таким образом, что данные находятся в следующих n блоках. Благодаря этому, файл, например, размером в 500 МБ, может храниться в единственном экстенте сопоставимого размера, а не быть разбитым на 128 000 4-килобайтных блоков, как при непрямом сопоставлении.

   Многоблочное распределение. Особый механизм распределения блоков ищет свободные блоки, которые можно использовать для записи данных на диск. Файловая система ext4 задействует многоблочное распределение, позволяющее распределять несколько блоков всего лишь одним вызовом. Это уменьшает фрагментацию диска.

   Отложенное распределение. Функция отложенного распределения выделяет блоки только при записи файла на диск. Благодаря этой функции кэш-память не заполняется ненужными данными, а производительность системы повышается.

   Неограниченное количество подкаталогов. Ядро Linux версии 2.6.23 поддерживает неограниченное количество подкаталогов. Файловая система ext4 ввела древовидную структуру данных HTree, чтобы избежать снижения производительности. HTree представляет собой специализированную версию B-дерева.

   Подсчет контрольных сумм. Файловая система ext4 использует подсчет контрольной суммы файлов. Данный механизм был введен для снижения риска повреждения файлов. Система ведения логов является наиболее используемой частью диска. Когда происходит сбой оборудования, блоки становятся непригодными для использования и происходит повреждение файлов. Используя подсчет контрольной суммы, система постоянно проверяет, не поврежден ли блок. Этот процесс также повышает производительность, поскольку сокращает время работы с лог-файлом.

   Быстрая проверка файловой системы. Файловая система ext4 помечает нераспределенные группы блоков. Время, необходимое для выполнения команды проверки диска fsck, значительно сокращается, поскольку отмеченные группы пропускаются. Это повышает общую производительность.

   Онлайн-дефрагментация. Фрагментация диска приводит к снижению производительности файловой системы, что было серьезной проблемой для ext2 и ext3. Файловая система ext4 поддерживает утилиту e4defrag, которая позволяет пользователям дефрагментировать отдельные файлы или всю файловую систему.

Ограничения файловой системы ext4

Хотя файловая система ext4 считается лучшей файловой системой для дистрибутивов Linux, есть несколько ограничений, которые следует учитывать в вашей дальнейшей работе:

   Восстановление поврежденных данных. Файловая система ext4 не может обнаружить или восстановить поврежденные данные, уже записанные на диск.

   Максимальный размер тома установлен в 1 эксбибайт. Однако файловая система не может обрабатывать более 100 тебибайт данных без значительной потери производительности и увеличения фрагментации диска.

Альтернативные файловые системы


Существует несколько альтернативных файловых систем, поддерживаемых ядром Linux.

XFS

XFS — это 64-разрядная файловая система, которая впервые была представлена в 1994 году и встроена в ядро Linux с 2001 года. XFS поддерживает максимальный размер файла в 8 эксбибайт и ограничивает длину имени файла 255 байтами. Она поддерживает ведение логов и, как и ext4, сохраняет изменения в лог-файле до того, как они будут зафиксированы в основной файловой системе. Это снижает вероятность повреждения файлов.

Данные структурированы в виде B+-деревьев, что обеспечивает эффективное распределение пространства и, следовательно, повышение производительности.

Основным недостатком этой системы является сложный процесс изменения размера существующей файловой системы XFS.

OpenZFS

OpenZFS — это платформа, которая объединяет функционал традиционных файловых систем и диспетчера томов. Впервые была представлена в 2013 году. OpenZFS поддерживает максимальный размер файла в 16 эксбибайт и ограничивает максимальную длину имени файла 255 символами. В качестве особенностей данной системы можно выделить защиту от повреждения данных, шифрование данных, поддержку накопителей увеличенного объема, копирование при записи и RAID-Z.

Основным недостатком OpenZFS является юридическая несовместимость между лицензиями CDDL (OpenZFS) и GPL (ядро Linux). Эта проблема решается путем компиляции и загрузки кода ZFS в ядро Linux.

Btrfs

Btrfs (сокр. от англ. «Btree file system») — это файловая система, которая была разработана компанией Oracle и выпущена вместе с ядром Linux 2.6.29 в 2009 году. Btrfs поддерживает максимальный размер файла в 16 эксбибайт и ограничивает максимальную длину имени файла 255 символами.

Некоторые особенности Btrfs включают в себя:

   онлайн-дефрагментацию;

   добавление и удаление блочных устройств в режиме онлайн;

   поддержка RAID;

   настраиваемое для каждого файла или тома сжатие;

   клонирование файлов;

   контрольные суммы и возможность создания файлов подкачки и разделов подкачки.

JFS

JFS (сокр. от англ. «Journaled File System») — это файловая система, которая была разработана компанией IBM для AIX Unix в 1990 году. Она является альтернативой файловой системе ext. Она также может быть использована вместо ext4 там, где требуется стабильность при небольшом количестве затрачиваемых ресурсов.

ReiserFS

ReiserFS — это альтернатива файловой системе ext3, которая обладает улучшенной производительностью и расширенным функционалом. Ранее, ReiserFS использовалась в качестве файловой системы по умолчанию в SUSE Linux. ReiserFS поддерживает динамическое изменение размеров файловой системы. К недостаткам можно отнести относительно низкую производительность.

Примечание: Такие файловые системы, как NTFS, FAT и HFS могут использоваться в Linux, но корневая файловая система Linux на них не устанавливается, поскольку они для этого не предназначены. Swap — это файл подкачки, служащий источником дополнительной памяти в тех случаях, когда для выполнения программы требуется больше оперативной памяти, чем имеется в компьютере, — он не является отдельной файловой системой.

Как узнать, какая у меня файловая система?

Способ №1: Использование команды df

Команда df отображает информацию об использовании дискового пространства файловой системы. Для указания того, что нам нужно вывести тип файловой системы, используйте следующую команду:

$ df -Th

или

$ df -Th | grep "^/dev"

Как вы можете видеть, у меня используется файловая система ext4 (см. раздел /dev/sda1).

Примечание: Имена дисков в Linux расположены в алфавитном порядке. /dev/sda — это первый жесткий диск (основной), /dev/sdb — второй и т.д. Цифры относятся к разделам, поэтому /dev/sda1 — это первый раздел первого диска.

Способ №2: Использование команды fsck

Команда fsck применяется для проверки и, при необходимости, восстановления файловых систем Linux. При этом она также может отображать и тип файловой системы на указанных разделах диска, например:

# fsck -N /dev/sda1


Способ №3: Использование команды lsblk

Команда lsblk отображает информацию о блочных устройствах. Добавив опцию -f, мы также получим и информацию о типе файловой системе:

$ lsblk –f


Способ №4: Использование команды mount

Команда mount применяется для монтирования файловой системы в Linux. Её также можно использовать для монтирования ISO-образа, удаленной файловой системы Linux и многого другого. Чтобы узнать тип файловой системы, используйте следующую комбинацию:

$ mount | grep "^/dev"


Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (14 оценок, среднее: 4,79 из 5)
Загрузка...

Комментариев: 3

  1. Григорий:

    Дополнение к ФС btrfs (пользуюсь ей уже почти год):

    — поддержка RAID
    И не только! Кроме RAID есть дедупликация данных, когда просто создается еще одна копия файла при его создании и в метаданные добавляется информация о том, что эта копия есть (в точную реализацию я не углублялся). Именно это делает систему почти не убиваемой, и если насильно пытаться ФС ломать, то она таки восстановиться, хотя и не на 100% если повредились оба экземпляра файлов.

    На SSD редко встречается случай, когда дедупликации не происходит, потому как сам SSD делает ссылку на оригинал одинакового файла.

    — бесплатные бекапы (резервные копии)
    Можно создавать бекапы, которые ничего не весят до тех пор, пока в оригинале не появятся изменения (инкрементальные бекапы на уровне ФС!), при этом их можно настраивать

    — подразделы (subvolume)
    BTRFS дает возможность поделить ее на разные части, которые можно подключать к Linux с различными параметрами (сжатие и прочее) и делать бекапы для каждого из них (для этого удобно разбить систему на подразделы home, etc, usr или другие)

    — клонирование файлов
    Которое ничего не весит! Можно копировать файлы хоть до бесконечности, но они свободное место будет уменьшаться очень медленно, так как на уровне ФС происходит просто создание ссылки на файл (CoW)

    — контрольные суммы и возможность создания файлов подкачки и разделов подкачки.

    С первым согласен. А вот возможность создания файлов подкачки и разделов подкачки есть, но я сильно не рекомендую так поступать, скорее всего будут проблемы если делать подкачку на этой системе, самое лучшее — отдельный раздел swap.

    Встретился с минусами, такими как неадекватный подсчет свободного места, если есть бекапы. Но на OpenSUSE я встретил самую лучшую поддержку этой ФС из коробки — тут тебе и автоматизация бекапов с удалением старых и больших при условии их ненужности, и выбор бекапов из меню загрузчика, и разбиение системы на подразделы, и баг со свободным местом починили, и в целом есть очень удобный yast для управления этой ФС

    1. Фото аватара Юрий:

      Спасибо за содержательный комментарий)

    2. fortran:

      Насчет создания разделов, а какую файловую систему нельзя на разделы разбить? Или вы что-то другое имели в виду?

Добавить комментарий для Юрий Отменить ответ

Ваш E-mail не будет опубликован. Обязательные поля помечены *