мета-данные страницы
  •  

Это старая версия документа!


Глава 4: Диски и файловые системы

Разделы являются более мелкими частями всего диска. В Linux они обозначаются цифрой после блочного устройства, поэтому у них есть такие имена, как /dev/sda1 и /dev/sdb3. Ядро представляет каждый раздел как блочное устройство, как представляло бы весь диск. Разделы определяются на небольшой области диска, называемой таблицей разделов (также метка диска).

Следующий уровень разбиения на разделы - это файловая система, база данных файлов и каталогов, с которыми вы привыкли взаимодействовать в пользовательском пространстве. Файловая система находиться в разделе. Таким образом есть следующая иерархия: диск → раздел → ФС

Для доступа к данным на диске ядро Linux и применяет систему слоев, показанную на рис.4.2 Подсистема SCSI и все остальное, описанное в разделе 3.6, представлены одним блоком. Обратите внимание: вы можете работать с диском как через 104 Глава 4. Диски и файловые системы файловую систему, так и непосредственно через дисковые устройства.

Рис.4.2: Схема ядра с доступом к диску

4.1 Разбиение дисков на разделы

Таблица разделов - это набор данных о разделении блоков на диске.

Основные типы таблиц:

Тип Описание
MBR традиционная, с ограничением на 4 основных раздела
GPT современная, с уникальными идентификаторами (GUID)

Инструменты:

  • parted - текстовый, поддерживает MBR и GPT (используется для просмотра)
  • fdisk - традиционный, интерактивный (используется для создания/изменения)

4.1.1 Просмотр таблицы разделов

# parted -l

Пример вывода:

# parted -l
Model: ATA KINGSTON SM2280S (scsi)
Disk /dev/sda: 240GB ❶
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 223GB 223GB primary ext4 boot
2 223GB 240GB 17.0GB extended
5 223GB 240GB 17.0GB logical linux-swap(v1)
106 Глава 4. Диски и файловые системы
Model: Generic Flash Disk (scsi)
Disk /dev/sdf: 4284MB ❷
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1050MB 1049MB myfirst
2 1050MB 4284MB 3235MB mysecond

Различия MBR и GPT:

  • MBR: нет столбца Name, традиционная нумерация разделов
  • GPT: поддержка произвольных имён разделов (myfirst, mysecond)

Основы MBR

Структура разделов:

  • Основной - обычный раздел (макс. 4 штуки в MBR)
  • Расширенный - контейнер для логических разделов
  • Логический - раздел внутри расширённого

Пример: раздел 2 (расширённый) содержит раздел 5 (логический).

Примечание: тип ФС в parted может отличаться от MBR-идентификатора (83 - Linux, 82 - swap). Для идентификаторов используйте:

$ fdisk -l

Разделы LVM

Если видны разделы с флагом lvm (код 8e) или устройства /dev/dm-* - система использует менеджер LVM. Вместо прямого разделения диска используется слой абстракции (подробнее в разделе 4.4).

Пример вывода в системе с LVM:

# parted -l
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 10.7GB
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 10.7GB 10.7GB primary boot, lvm
 
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/ubuntu--vg-root: 9672MB
Partition Table: loop
Number Start End Size File system Flags
1 0.00B 9672MB 9672MB ext4

Логические разделы LVM отделены от таблицы разделов и отображаются как отдельные «диски» (/dev/mapper/\*).

Первичное чтение ядром

При загрузке ядро читает таблицу MBR и выводит отладку (просмотр: `journalctl -k`):

sda: sda1 sda2 < sda5 >

Обозначение sda2 < sda5 > указывает, что /dev/sda2 - расширённый раздел, содержащий логический /dev/sda5. Сам расширённый раздел игнорируется (важны логические разделы).

4.1.2 Редактирование таблиц разделов

Основные риски и предосторожности

Изменение таблицы разделов затрудняет восстановление данных. Требует резервной копии важных данных. Разделы не должны быть примонтированы во время изменений.

Выбор инструмента

Утилита Особенности
fdisk Создает таблицу в памяти, применяет изменения только при выходе. Один системный вызов ядру.
parted Применяет изменения сразу при выполнении команд. Сигнализирует ядру для каждого раздела отдельно.
gparted Графический интерфейс для parted.

Отслеживание изменений (parted)

  • udevadm monitor –kernel - показывает удаление/добавление устройств
  • /proc/partitions - полная информация о разделах
  • /sys/block/device/ или /dev - измененные интерфейсы разделов

Принудительная перезагрузка таблицы разделов

Используйте команду для повторного чтения ядром таблицы разделов:

# blockdev --rereadpt /dev/sdf

4.1.3 Создание таблицы разделов

Условия примера

  • Диск: 4 ГБ (USB-флеш)
  • Таблица: MBR
  • Разделы: ext4 (200 МБ + 3.8 ГБ)
  • Устройство: /dev/sdd

Процесс с fdisk

# fdisk /dev/sdd

Просмотр таблицы:

Command (m for help): p

Удаление существующего раздела:

Command (m for help): d
Selected partition 1

Создание первого раздела (200 МБ):

Command (m for help): n
Partition type: p (primary)
Partition number: 1
First sector: 2048 (default)
Last sector: +200M

Создание второго раздела (остаток): Используйте все значения по умолчанию (команда `n`, затем Enter для всех параметров).

Просмотр результата:

Command (m for help): p
Device Boot Start End Sectors Size Id Type
/dev/sdd1 2048 411647 409600 200M 83 Linux
/dev/sdd2 411648 8368127 7956480 3.8G 83 Linux

Сохранение таблицы:

Command (m for help): w

Диагностика

Просмотрите логи ядра (только для fdisk):

journalctl -k

4.1.4. Геометрия дисков и разделов

Физическая структура жесткого диска

Компонент Описание
Пластина Вращающийся магнитный диск на шпинделе
Головка Считывает данные с пластины, прикреплена к коромыслу
Коромысло Движущийся рычаг для позиционирования головки
Цилиндр Фиксированный круг данных при одном положении головки
Сектор Доля цилиндра
Дорожка Часть цилиндра для одной головки

Адресация типа CHS (cylinder-head-sector) - старая схема.

CHS vs LBA

CHS - Устаревшая, значения на современных дисках неправдивы

LBA - Логическая блочная адресация, номер блока (современный стандарт)

Таблица разделов MBR содержит оба формата, но LBA игнорирует границы цилиндров.

Границы цилиндров больше не важны

Старые программы разбиения предупреждали о невыравнивании цилиндров. Игнорируйте это предупреждение - модернизированная логика LBA и новые утилиты гарантируют эффективное расположение разделов независимо от CHS границ.

4.1.5 Чтение твердотельных дисков (SSD)

Выравнивание разделов - критический фактор

SSD читают данные страницами (4096–8192 байт), начиная с границы, кратной размеру страницы. Невыравненный раздел требует двух операций чтения вместо одной.

Современные утилиты выравнивают разделы по границе 1 МБ (2048 блоков × 512 байт), что совместимо со всеми размерами страниц.

Проверка выравнивания раздела

$ cat /sys/block/sdf/sdf2/start
1953126

Результат - смещение в единицах (512 байт). Для проверки выравнивания раздела на 4096-байтовые страницы (8 секторов):

  • Разделите порядковый номер раздела на 8
  • Если делится нацело - раздел выравнен оптимально
  • Если нацело не делится - производительность снижена

Пример: 1953126 ÷ 8 = 244140.75 → не выравнен

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

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

Раньше ФС распологались только на дисках, однако древовидная структура каталогов и интерфейс ввода-вывода файловых систем довольно универсальны, поэтому файловые системы теперь выполняют множество задач, к примеру, роль системных интерфейсов, которые отображаются в каталогах в /sys и /proc.

Уровень абстракции виртуальной файловой системы (Virtual File System, VFS) завершает реализацию файловой системы. Подобно тому как подсистема SCSI стандартизирует связь между различными типами устройств и командами управления ядром, VFS гарантирует, что все реализации файловой системы поддерживают стандартный интерфейс, чтобы приложения пользовательского пространства могли одинаково обращаться к файлам и каталогам. Поддержка VFS позволила Linux поддерживать чрезвычайно большое количество файловых систем.

4.2.1 Типы файловых систем

  • ext2 - традиционная FS Linux, вдохновленная Unix (UFS, FFS)
  • ext3 - добавила журналирование для целостности данных и ускорения загрузки
  • ext4 - текущая версия; поддерживает большие файлы и большое количество подкаталогов
  • Btrfs - новейшая FS Linux, расширяет возможности ext4
  • XFS - высокопроизводительная FS; стандарт Red Hat Enterprise Linux 7.0+
  • FAT/msdos - примитивная MS-DOS FS
  • VFAT - Microsoft FS для съемных носителей (до 4 ГБайт); стандарт для SD-карт и USB-накопителей
  • exFAT - Microsoft FS для больших файлов (4 ГБайт и более)
  • NTFS - продвинутая Windows FS
  • HFS+ - стандарт Apple для Macintosh
  • ISO9660 - стандарт CD-ROM

Обратная совместимость ext

4.2.2 Создание файловой системы

Создание файловой системы - операция в пользовательском пространстве, прямой доступ к блочному устройству.

Утилита mkfs

mkfs - интерфейс для программ mkfs.fs (где fs - тип ФС):

  • Команда `mkfs -t ext4` запускает `mkfs.ext4`
  • mkfs.ext4, mkfs.ext3, mkfs.ext2 - символические ссылки на mke2fs
  • mkfs.vfat, mkfs.msdos - ссылки на mkdosfs
  • mkfs.ntfs - ссылка на mkntfs

Смотрите man-страницы конкретных утилит (например, mke2fs(8) для ext4).

подробнее

Создание ФС

# mkfs -t ext4 /dev/sdf2

mkfs автоматически определяет количество блоков и устанавливает значения по умолчанию. Не меняйте их без необходимости.

Суперблок - критический компонент ФС. mkfs создает несколько резервных копий. Запишите номера резервных копий - они понадобятся для восстановления при сбое диска.

ВНИМАНИЕ: Создание ФС поверх существующей уничтожает все старые данные. Выполняйте только один раз на новый раздел.

4.2.3 Монтирование файловой системы

Присоединение ФС к работающей системе. Ядро монтирует корневой каталог (/) при загрузке.

Требуемые параметры монтирования

  • Устройство - раздел диска (/dev/sda1) или идентификатор ФС. Специальные ФС (proc, sysfs) не требуют
  • Тип ФС - ext4, vfat, ntfs и т.д.
  • Точка монтирования - обычный каталог в иерархии (/music, /home/extra и т.д.). Может быть в любом месте системы

Просмотр смонтированных ФС

$ mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
Элемент Пример Описание
Устройство /dev/sda1 Может быть нереальным (proc, sysfs)
on on Разделитель
Точка монтирования / Путь в системе
type type Разделитель
Тип ФС ext4 Идентификатор
Параметры (rw,errors=remount-ro) Опции монтирования (см. 4.2.6)

Команды монтирования

Монтировать:

# mount -t ext4 /dev/sdf2 /home/extra

Параметр `-t` обычно опционален, но требуется для различения похожих типов (например, FAT-варианты).

Демонтировать:

# umount /home/extra

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

4.2.4 Идентификатор UUID файловой системы

Имена устройств могут изменяться в зависимости от порядка их обнаружения ядром. Решение - использование UUID (Universally Unique Identifier) для идентификации и монтирования файловых систем. UUID генерируют программы создания файловых систем, такие как mke2fs.

Для просмотра список устройств, их файловых систем и UUID используйте blkid:

# blkid
/dev/sdf2: UUID="b600fe63-d2e9-461c-a5cd-d3b373a5e1d2" TYPE="ext4"
/dev/sda1: UUID="17f12d53-c3d7-4ab3-943e-a0a72366c9fa" TYPE="ext4" PARTUUID="c9a5ebb0-01"
/dev/sda5: UUID="b600fe63-d2e9-461c-a5cd-d3b373a5e1d2" TYPE="swap" PARTUUID="c9a5ebb0-05"
/dev/sde1: UUID="4859-EFEA" TYPE="vfat"

Раздел FAT имеет серийный номер тома вместо UUID.

Монтирование по UUID:

# mount UUID=b600fe63-d2e9-461c-a5cd-d3b373a5e1d2 /home/extra

UUID предпочтителен для автоматического монтирования в /etc/fstab при загрузке и используется дистрибутивами для съемных носителей. Ubuntu монтирует FAT-раздел в /media/user/4859-EFEA.

Изменить UUID можно через tune2fs(8) (для ext2/ext3/ext4).

4.2.5 Буферизация диска, кэширование и файловые системы

Linux буферизует запись на диск: ядро сохраняет изменения в RAM и записывает их на диск в подходящий момент. Это невидимо пользователю и повышает производительность.

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

Ядро кэширует прочитанные блоки в RAM, предотвращая повторные обращения к диску при повторном доступе к файлам.

Параметры монтирования файловой системы

Параметры монтирования изменяют поведение команды mount. Делятся на две категории: общие (работают со всеми ФС) и специфичные для конкретной ФС.

Основные короткие параметры

Параметр Описание
-r Монтировать в режиме только для чтения
-n Не обновлять /etc/mtab (критично при загрузке)
-t Указать тип файловой системы

Длинные параметры

Активируются через -o с ключевыми словами, разделенными запятыми:

# mount -t vfat /dev/sde1 /dos -o ro,uid=1000
Параметр Описание
exec/noexec Разрешить/запретить выполнение программ
suid/nosuid Разрешить/запретить setuid
ro Режим только для чтения
rw Режим чтения-записи

Примечание: Unix использует \n для конца строки, DOS - \r\n. Текстовые редакторы (vim) автоматически определяют стиль.

4.2.7 Повторное монтирование файловой системы

Чтобы изменить параметры монтирования смонтированной ФС, используйте опцию remount. Пример - переключение корневого раздела в режим чтения-записи:

# mount -n -o remount /

Параметр -n необходим, чтобы не обновлять /etc/mtab, когда / доступен только для чтения. Команда предполагает наличие устройства в /etc/fstab.

4.2.8 Таблица файловой системы /etc/fstab

Постоянный список ФС для автоматического монтирования при загрузке хранится в /etc/fstab:

UUID=70ccd6e7-6ae6-44f6-812c-51aab8036d29 / ext4 errors=remount-ro 0 1
UUID=592dcfd1-58da-4769-9ea8-5f412a896980 none swap sw 0 0
/dev/sr0 /cdrom iso9660 ro,user,nosuid,noauto 0 0
Поле Описание
Устройство/UUID Идентификатор ФС (UUID предпочтителен)
Точка монтирования Куда присоединить ФС
Тип ФС ext4, swap, iso9660 и т.д.
Параметры Опции через запятую
Dump Всегда 0 (dump устаревшая)
fsck порядок 1 для /, 2 для других локальных ФС, 0 для остальных

Специальные параметры

Параметр Назначение
defaults Стандартные опции (rw, dev, exec, suid)
errors Поведение при ошибках ext2/3/4: continue, remount-ro, panic
noauto Исключить из mount -a (для съемных носителей)
user Позволить обычным пользователям монтировать (автоматически добавляет nosuid, noexec, nodev)

Монтирование через ярлык: mount /cdrom (если ФС в fstab).

Монтирование всех ФС: mount -a (кроме помеченных noauto).

4.2.9 Альтернативы файлу /etc/fstab

Вместо единого файла /etc/fstab возможны:

  • /etc/fstab.d - каталог с отдельными конфиг-файлами ФС
  • systemd units - конфигурация через systemd (часто генерируется из /etc/fstab)

4.2.10 Емкость файловой системы

Используйте df для просмотра размера и использования смонтированных ФС:

$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 214234312 127989560 75339204 63% /
/dev/sdd2 3043836 4632 2864872 1% /media/user/uuid
Поле Описание
Filesystem Устройство
1K-blocks Общая емкость в 1024-байтных блоках
Used Занято
Available Свободно
Use% Процент использования
Mounted on Точка монтирования

Команда df dir ограничивает вывод ФС конкретного каталога.

Расхождение в расчетах

Разница между используемым и свободным пространством объясняется зарезервированными блоками (~5% на ext*). Только суперпользователь может использовать их - это защита от паники при переполнении диска.

Опции df

  • -h - читаемый формат (K, M, G, T)
  • -m - в мегабайтах
  • -k - в килобайтах (по умолчанию)

Поиск крупных файлов

Команда du показывает использование диска по каталогам:

du -s *              # Итог для каждого элемента текущего каталога
du -s                # Итог для текущего каталога
cd /; du             # Весь диск (длинный список)

4.2.11 Проверка и восстановление файловых систем

Файловые системы Unix требуют периодической проверки на ошибки, возникающие из-за физических проблем оборудования и некорректного выключения системы (отключение питания). При неправильном отключении кэш ФС в памяти может не совпадать с данными на диске. Несмотря на поддержку журналирования, правильное завершение системы критично.

fsck - инструмент для проверки ФС. Для каждого типа ФС существует своя версия (e2fsck для ext2/ext3/ext4 распознается автоматически).

# fsck /dev/sdb1

Никогда не используйте fsck на смонтированной ФС - ядро может модифицировать данные, вызывая несоответствия и сбои. Исключение: корневой раздел в режиме read-only в однопользовательском режиме.

Проход Описание
Pass 1 Проверка inodes, блоков и размеров
Pass 2 Проверка структуры каталогов
Pass 3 Проверка связанности каталогов
Pass 4 Проверка счетчиков ссылок
Pass 5 Проверка сводной информации групп

При ошибках fsck останавливается и запрашивает разрешение на исправление. Потерянные файлы размещаются в lost+found с номером в качестве имени.

Параметр -p (или -a) автоматически исправляет типичные ошибки без запроса. Дистрибутивы Linux используют fsck -p при загрузке.

При подозрении на серьезные ошибки используйте fsck -n для проверки без изменений. Если проблема с суперблоком: fsck -b num - восстановление из резервной копии. Для просмотра номеров резервных суперблоков: mkfs -n /dev/device.

Проверка ext3 и ext4

Журнал обеспечивает целостность данных, поэтому ручная проверка обычно не требуется. Для сброса журнала:

# e2fsck -fy /dev/disk_device

Повреждённую ФС можно смонтировать в режиме ext2.

Наихудший случай

При серьезных проблемах:

  • dd - экстракция образа ФС на другой диск
  • Монтирование в read-only режиме и сохранение данных
  • debugfs - просмотр и копирование файлов (режим read-only по умолчанию)

Команда fsck -y автоматически ответит на все вопросы (крайний случай).

Если резервных копий нет - обратитесь к профессиональным сервисам восстановления данных.

4.2.12 Файловые системы специального назначения

Не все ФС хранят данные на физических носителях. Многие служат системными интерфейсами, предоставляя информацию о процессах, ядре и оборудовании. Эта идея восходит к /dev и /proc механизмам Unix.

ФС Точка монтирования Назначение
proc /proc Информация о процессах и ядре. Нумерованные каталоги соответствуют PID, /proc/self — текущему процессу. Содержит /proc/cpuinfo и прочие данные оборудования (передаются в /sys)
sysfs /sys Системная информация устройств (см. глава 3)
tmpfs /run и др. Временное хранилище в памяти и swap. Параметры: size, nr_blocks. Осторожно: переполнение памяти вызовет сбои
squashfs /snap и др. Read-only ФС со сжатым содержимым, извлекаемым по требованию. Используется snap-пакетами
overlay контейнеры Объединяет каталоги в составную систему. Применяется в контейнеризации (глава 17)

4.3 Область подкачки swap

Раздел диска используется не только для ФС, но и для расширения оперативной памяти. Система виртуальной памяти Linux автоматически перемещает неактивные страницы памяти на диск (подкачка). Область диска для этого называется swap (подкачка).

Просмотр использования swap:

$ free
total used free
Swap: 514072 189804 324268

Раздел диска как область подкачки

Шаг Команда Описание
1 Убедиться, что раздел пуст
2 mkswap /dev/xxx Поместить сигнатуру swap на раздел
3 swapon /dev/xxx Активировать область в ядре

Для автоматической активации при загрузке добавьте в /etc/fstab:

/dev/sda5 none swap sw 0 0

Или с UUID:

UUID=xxxx-xxxx none swap sw 0 0

Файл как область подкачки

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

# dd if=/dev/zero of=swap_file bs=1024k count=num_mb
# mkswap swap_file
# swapon swap_file

Для деактивации используйте swapoff (требуется свободная память в других областях).

Определение размера области подкачки

Классическое правило: swap = 2 × RAM. Однако это зависит от использования:

  • Многопользовательские системы: swap = 2 × RAM — перемещение памяти неактивных пользователей
  • Однопользовательские системы: зависит от количества одновременно активных процессов
  • Серверы с высокой нагрузкой: swap минимален или отсутствует (избежать дисковых операций)

Частое обращение к swap вызывает критическое падение производительности (диск медленнее памяти).

На компьютере общего назначения swap необходима. Без неё при исчерпании памяти ядро запускает OOM Killer, убивая процессы. На серверах с мониторингом и балансировкой нагрузки это предотвращается архитектурно.

Подробнее о виртуальной памяти — глава 8.