мета-данные страницы
Глава 4: Диски и файловые системы
Разделы являются более мелкими частями всего диска. В Linux они обозначаются цифрой после блочного устройства, поэтому у них есть такие имена, как /dev/sda1 и /dev/sdb3. Ядро представляет каждый раздел как блочное устройство, как представляло бы весь диск. Разделы определяются на небольшой области диска, называемой таблицей разделов (также метка диска).
Следующий уровень разбиения на разделы - это файловая система, база данных файлов и каталогов, с которыми вы привыкли взаимодействовать в пользовательском пространстве. Файловая система находиться в разделе. Таким образом есть следующая иерархия: диск → раздел → ФС
Для доступа к данным на диске ядро Linux и применяет систему слоев, показанную на рис.4.2 Подсистема SCSI и все остальное, описанное в разделе 3.6, представлены одним блоком. Обратите внимание: вы можете работать с диском как через 104 Глава 4. Диски и файловые системы файловую систему, так и непосредственно через дисковые устройства.
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
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.
4.4 Менеджер логических томов LVM
Прямое управление разделами затруднено при изменении конфигурации после установки. Добавление диска требует переразбиения, переноса данных и перезагрузок. LVM (Logical Volume Manager) решает эту проблему добавлением слоя абстракции между физическими устройствами и файловыми системами.
Компоненты LVM
| Компонент | Описание |
|---|---|
| Physical Volume (PV) | Физический блочный диск или раздел (/dev/sda1, /dev/sdb и т. д.) |
| Volume Group (VG) | Общий пул, созданный из одного или нескольких PV |
| Logical Volume (LV) | Виртуальный блочный диск, выделяемый из VG. На LV размещаются ФС или swap |
Логические тома действуют аналогично разделам на физическом диске, но размещение управляет LVM, а не пользователь.
4.6 Что находится внутри традиционной файловой системы
Традиционная ФС Unix состоит из двух компонентов:
- Пул блоков данных - хранилище информации
- Система БД на основе inode - управление пулом данных
inode - структура данных, описывающая файл: тип, права доступа, расположение в пуле. Идентифицируются номерами в таблице inode.
Каталоги - тоже inode, содержащие список имен файлов и ссылки на другие inode.
Пример структуры:
mkdir dir_1 dir_2 echo a > dir_1/file_1 echo b > dir_1/file_2 echo c > dir_1/file_3 echo d > dir_2/file_4 ln dir_1/file_3 dir_2/file_5 # жесткая ссылка
Разрешение пути (например dir_1/file_2):
| Шаг | Действие |
|---|---|
| 1 | Парсинг пути: компоненты dir_1 и file_2 |
| 2 | Переход по корневому inode (2) к данным каталога |
| 3 | Поиск dir_1 в inode 2 → указывает на inode 12 |
| 4 | Проверка inode 12: это каталог |
| 5 | Переход по inode 12 к его данным каталога |
| 6 | Поиск file_2 в inode 12 → указывает на inode 14 |
| 7 | Проверка inode 14: это файл, доступ разрешен |
Специальные записи каталогов:
.- текущий каталог (ссылка на себя)..- родительский каталог (кроме корневого)
4.6.1 Сведения о дескрипторе и количество ссылок
Для просмотра дескриптора используйте ls -i или stat.
Link count - общее количество записей каталога, указывающих на дескриптор.
| Операция | Действие |
| Создание файла | Новая запись каталога + новый дескриптор |
| Жесткая ссылка | Вручную созданная запись на существующий дескриптор (ln без -s) |
| Удаление файла | Удаление ссылки: счетчик −1, при 0 дескриптор удаляется |
При удалении rm file: ядро находит запись каталога, уменьшает счетчик. Если rm dir_1/file_3, счетчик inode 15 = 2→1 (т.к. dir_2/file_5 еще указывает на него) - дескриптор остается.
Для каталогов: счетчик включает саму папку (.), родительскую (..) и все подкаталоги. Корневой inode имеет +1 ссылку в суперблоке.
4.6.2 Распределение блоков
Block bitmap (битовая карта) - каждый бит = один блок:
- 0 = свободен
- 1 = используется
Проблемы возникают при рассинхронизации дескрипторов и распределения блоков (некорректное выключение). Программа fsck:
# Проверяет и восстанавливает fsck /dev/device
Процесс: сканирование таблицы дескрипторов → генерация новых счетчиков и битовой карты → сравнение с диском → исправление → «осиротевшие» файлы в lost+found.
4.6.3 Работа с файловыми системами в пользовательском пространстве
Процессы доступ получают через системные вызовы ядра (stat() возвращает inode и счетчики).
Данные доступны в основном для обратной совместимости. Не все ФС имеют inode:
| Файловая система | Жесткие ссылки | Примечание |
| ext4 | Да | Традиционная UNIX ФС |
| VFAT | Нет | ln не работает |
| VFS (абстракция) | Условно | Возвращает значения, не всегда значимые |
Системные вызовы Linux обеспечивают достаточную абстракцию - знать о дескрипторах не обязательно. Поддержка ФС может быть в ядре или пользовательском пространстве (FUSE).

