Найти в Дзене
Записки сисадмина

Linux. Файловые системы на примере ext4.

Наконец погода стала улучшаться, зимняя депрессия сменяется задорным весенним обострением, даруя новые силы писать статьи. Я уже накидал кучу теории про устройство жестких дисков и про raid массивы. Только для того, чтобы логически подвести все к теме файловых систем. В мире Linux файловые системы — это фундамент, определяющий, как данные хранятся, организуются и восстанавливаются. Среди множества вариантов ext4 остается одной из самых популярных благодаря своей надежности и совместимости. В этой статье мы разберем ключевые концепции файловых систем на примере ext4, включая блоки, major/minor номера устройств, журналирование и суперблоки. Файловая система делит диск на блоки — фиксированные по размеру участки (обычно от 1 КБ до 64 КБ). Каждый файл занимает целое число блоков, даже если его размер меньше выбранного блока. Например, файл размером 2 КБ при размере блока 4 КБ будет занимать один блок, но 2 КБ пространства останутся неиспользованными («фрагментация внутренняя»). В ext4 разм
Оглавление

Наконец погода стала улучшаться, зимняя депрессия сменяется задорным весенним обострением, даруя новые силы писать статьи. Я уже накидал кучу теории про устройство жестких дисков и про raid массивы. Только для того, чтобы логически подвести все к теме файловых систем.

В мире Linux файловые системы — это фундамент, определяющий, как данные хранятся, организуются и восстанавливаются. Среди множества вариантов ext4 остается одной из самых популярных благодаря своей надежности и совместимости. В этой статье мы разберем ключевые концепции файловых систем на примере ext4, включая блоки, major/minor номера устройств, журналирование и суперблоки.

Блоки и идентификация дисков

Блоки: Минимальная единица хранения

Файловая система делит диск на блоки — фиксированные по размеру участки (обычно от 1 КБ до 64 КБ). Каждый файл занимает целое число блоков, даже если его размер меньше выбранного блока. Например, файл размером 2 КБ при размере блока 4 КБ будет занимать один блок, но 2 КБ пространства останутся неиспользованными («фрагментация внутренняя»).

  • Влияние размера блока:
    Меньшие блоки экономят место, но увеличивают метаданные.
    Крупные блоки ускоряют доступ к большим файлам, но повышают потери пространства.

В ext4 размер блока задается при форматировании и по умолчанию равен 4 КБ.

Major и Minor номера: Идентификация устройств

В Linux каждое устройство (включая диски) имеет два идентификатора:

  • Major номер — указывает на тип устройства (драйвер). Например:
    8 — SCSI/SATA диски.
    3 — IDE диски.
    259 - NVME диски.
  • Minor номер — определяет конкретный экземпляр устройства.

Пример:

  • /dev/sda1 (первый раздел SATA-диска) может иметь major=8, minor=1.
  • Увидеть номера можно через ls -l /dev/sd* (для HDD и SSD)
-2
  • Либо через ls -l /dev/nvme* (для NVME дисков)
-3

Суперблок

Суперблок — это структура данных, хранящая метаинформацию о файловой системе:

  • Размер блоков.
  • Количество свободных блоков и inode.
  • Время последнего монтирования.
  • Сигнатура файловой системы (например, «ext4»).

Важно: Суперблок дублируется в нескольких местах диска. Если основной суперблок повреждается, система использует резервную копию для восстановления. Проверить суперблок можно утилитой dumpe2fs:

sudo dumpe2fs /dev/sda1 | grep "Superblock"

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

Чуть-чуть истории

Ext4 — четвертое поколение расширенной файловой системы (Extended File System), представленное в 2008 году. Она унаследовала стабильность ext3, добавив:

  • Поддержку томов до 1 эксабайта (против 16 ТБ в ext3).
  • Устранение ограничений на количество подкаталогов и файлов.
  • Улучшенное журналирование.

Давайте простыми словами: термин "файловая система" можно интерпретировать двумя способами:

  1. Это структура данных, описывающая метод хранения данных на устройстве.
  2. Это структура каталогов.

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

Создание ext4

Для примера возьмем наш диск /dev/sda, который никак не размечен.

-4
  • С помощью команды fdisk создадим раздел на диске:
-5
fdisk /dev/sda

  • Теперь на первом разделе диска мы можем создать файловую систему ext4:
-6
mkfs.ext4 /dev/sda1

  • На этом моменте наш диск автоматически определится системой, мы сможем примонтировать его в нужную нам папку, либо просто записывать на него информацию.
-7
mkdir /home/nightfear/new_disk

Команда создаст новую папку

mount -rw /dev/sda1 /home/nightfear/new_disk/

Команда примонтирует наш новый диск в эту папку с параметрами read/write (доступно и чтение, и запись)

Журналирование файловой системы

Журнал (журналирование) — это механизм, который записывает все изменения метаданных (например, структуру каталогов, inode) в специальную область («журнал») перед их применением к основной файловой системе.

Этапы записи файла:

  1. Операция (например, создание файла) регистрируется в журнале.
  2. Журнал помечает запись как «готовую к выполнению».
  3. Изменения применяются к файловой системе.
  4. После успешного выполнения запись удаляется из журнала.

Преимущества:

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

Типы журналирования в ext4

  • writeback: Журналируются только метаданные. Данные файлов записываются напрямую. Баланс между скоростью и риском.
  • ordered (по умолчанию): Метаданные журналируются, но данные записываются до отметки операции в журнале. Безопаснее, чем writeback.
  • journal: Журналируются и метаданные, и данные. Максимальная надежность, но низкая производительность.

Работа с ext4

  • Полную информацию о файловой системе можно запросить командой:
tune2fs -l /dev/sda1
-8
  • При повреждении суперблока, его можно восстановить, используя его резервную копию:
fsck.ext4 -b 32768 /dev/sdb1

Где 32768 - номер резервного суперблока (найти можно в выводе команды dumpe2fs)

  • Также можно проверить журнал файловой системы:
mount -o remount,ro /dev/sda1

Монтируем файловую систему в режим read-only.

fsck.ext4 -f /dev/sda1

Запускаем проверку.