Наконец погода стала улучшаться, зимняя депрессия сменяется задорным весенним обострением, даруя новые силы писать статьи. Я уже накидал кучу теории про устройство жестких дисков и про 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)
- Либо через ls -l /dev/nvme* (для NVME дисков)
Суперблок
Суперблок — это структура данных, хранящая метаинформацию о файловой системе:
- Размер блоков.
- Количество свободных блоков и inode.
- Время последнего монтирования.
- Сигнатура файловой системы (например, «ext4»).
Важно: Суперблок дублируется в нескольких местах диска. Если основной суперблок повреждается, система использует резервную копию для восстановления. Проверить суперблок можно утилитой dumpe2fs:
sudo dumpe2fs /dev/sda1 | grep "Superblock"
Файловая система ext4
Чуть-чуть истории
Ext4 — четвертое поколение расширенной файловой системы (Extended File System), представленное в 2008 году. Она унаследовала стабильность ext3, добавив:
- Поддержку томов до 1 эксабайта (против 16 ТБ в ext3).
- Устранение ограничений на количество подкаталогов и файлов.
- Улучшенное журналирование.
Давайте простыми словами: термин "файловая система" можно интерпретировать двумя способами:
- Это структура данных, описывающая метод хранения данных на устройстве.
- Это структура каталогов.
В теории, данные можно хранить на диске и без файловой системы, но, зачастую, это чревато последствиями, если файлы будут записаны с ошибками.
Создание ext4
Для примера возьмем наш диск /dev/sda, который никак не размечен.
- С помощью команды fdisk создадим раздел на диске:
fdisk /dev/sda
- Теперь на первом разделе диска мы можем создать файловую систему ext4:
mkfs.ext4 /dev/sda1
- На этом моменте наш диск автоматически определится системой, мы сможем примонтировать его в нужную нам папку, либо просто записывать на него информацию.
mkdir /home/nightfear/new_disk
Команда создаст новую папку
mount -rw /dev/sda1 /home/nightfear/new_disk/
Команда примонтирует наш новый диск в эту папку с параметрами read/write (доступно и чтение, и запись)
Журналирование файловой системы
Журнал (журналирование) — это механизм, который записывает все изменения метаданных (например, структуру каталогов, inode) в специальную область («журнал») перед их применением к основной файловой системе.
Этапы записи файла:
- Операция (например, создание файла) регистрируется в журнале.
- Журнал помечает запись как «готовую к выполнению».
- Изменения применяются к файловой системе.
- После успешного выполнения запись удаляется из журнала.
Преимущества:
- При сбое (например, отключение питания) система проверяет журнал и завершает незавершенные операции, избегая повреждений.
- Уменьшает время проверки файловой системы (fsck) с часов до секунд.
Типы журналирования в ext4
- writeback: Журналируются только метаданные. Данные файлов записываются напрямую. Баланс между скоростью и риском.
- ordered (по умолчанию): Метаданные журналируются, но данные записываются до отметки операции в журнале. Безопаснее, чем writeback.
- journal: Журналируются и метаданные, и данные. Максимальная надежность, но низкая производительность.
Работа с ext4
- Полную информацию о файловой системе можно запросить командой:
tune2fs -l /dev/sda1
- При повреждении суперблока, его можно восстановить, используя его резервную копию:
fsck.ext4 -b 32768 /dev/sdb1
Где 32768 - номер резервного суперблока (найти можно в выводе команды dumpe2fs)
- Также можно проверить журнал файловой системы:
mount -o remount,ro /dev/sda1
Монтируем файловую систему в режим read-only.
fsck.ext4 -f /dev/sda1
Запускаем проверку.