Работа с файловой системой Linux [203.1]

Рейтинг: 65.7% · 17 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Работа с файловой системой Linux [203.1]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1]
  3. Прогнозирование потребности в ресурсах
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2]
  9. Альтернативные загрузчики [202.3]
  10. Работа с файловой системой Linux [203.1] (вы здесь)
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3]
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2]
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2]
  24. Безопасность DNS-сервера [207.3]
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2]
  31. DHCP-сервер [210.1]
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1]
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3]
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 9. Работа с файловой системой Linux [203.1]

Любой раздел, флешка или сетевая шара становятся видимы системе только после того, как вы их примонтируете в какую-то точку дерева каталогов. Этот урок про то, как смонтировать вручную и как сделать так, чтобы оно поднималось при загрузке само, как правильно адресовать устройства (чтобы не сломалось при перетыкании дисков), какие опции монтирования реально влияют на безопасность и производительность, как устроен swap с приоритетами и где systemd заменил классический /etc/fstab своими unit-ами .mount и .automount. Под конец коротко разберем bind-mount, overlay и mount namespaces - то, на чем стоят контейнеры.

Изображение

Как это работает

Ядро Linux держит в памяти единое дерево каталогов начиная с корня /. Монтирование - это операция, которая берет файловую систему с блочного устройства (или из памяти, или по сети) и подвешивает ее в выбранный каталог - точку монтирования. После этого содержимое старого каталога скрывается, а сквозь него видно содержимое новой ФС. Все смонтированное живет в так называемой таблице монтирования ядра, и ее текущее состояние всегда можно прочитать из /proc/mounts (или /proc/self/mountinfo, где деталей больше).

Команда mount исторически читала /etc/fstab и /etc/mtab. В 2026 mtab - это симлинк на /proc/self/mounts, то есть источник истины один - ядро. А вот /etc/fstab остается декларативным файлом: вы описываете, что и куда монтировать, а система применяет это при загрузке.

Ключевой момент инженерного уровня - как адресовать устройство. Имена вида /dev/sda2 нестабильны: добавили диск, поменяли порядок контроллеров - и sda стал sdb, система не загрузилась. Поэтому в проде устройства адресуют по UUID (уникальный идентификатор, который пишется внутрь самой ФС при ее создании) или по LABEL (человекочитаемая метка). UUID не зависит от того, в какой слот воткнут диск.

Под капотом systemd давно не читает fstab напрямую. На загрузке генератор systemd-fstab-generator превращает каждую строку fstab в полноценный .mount unit на лету. Поэтому fstab и systemd .mount - это два лица одного механизма, и опции вроде x-systemd.* пишутся прямо в поле опций fstab.

Команды и примеры

Разовое монтирование и просмотр:

Код: Выделить всё

mount /dev/sdb1 /mnt/data        # примонтировать вручную
mount -o ro,noexec /dev/sdb1 /mnt # с опциями
umount /mnt/data                  # отмонтировать
findmnt                           # дерево монтирований, удобнее /proc/mounts
findmnt -T /home                  # какая ФС обслуживает путь
mount | column -t                 # все смонтированное
Узнать UUID и LABEL устройств - одинаково в Debian/Ubuntu и RHEL/Fedora:

Код: Выделить всё

lsblk -f                          # дерево + FS, UUID, метки
blkid /dev/sdb1                   # UUID, TYPE, PARTUUID
findmnt --real                    # без псевдо-ФС
Строка /etc/fstab состоит из шести полей: источник, точка, тип, опции, dump, fsck-pass:

Код: Выделить всё

UUID=4f8a-... /data ext4 defaults,noatime,nodev,nosuid 0 2
LABEL=backup  /backup xfs  defaults,nofail        0 0
/swap.img     none   swap  sw,pri=10              0 0
Шестое поле (pass) - порядок проверки fsck: 1 для корня, 2 для прочих, 0 - не проверять. После правки fstab НЕ перезагружайтесь вслепую:

Код: Выделить всё

mount -a                          # смонтировать все из fstab
systemctl daemon-reload           # перечитать сгенерированные .mount
findmnt --verify                  # проверить fstab на ошибки
Важные опции и что они дают:
  • noatime - не писать время доступа при каждом чтении, ощутимо снижает износ и нагрузку (relatime - компромисс, чаще включен по умолчанию).
  • nodev, nosuid, noexec - запрет устройств, suid-битов и запуска бинарников. Обязательны для разделов с данными и /tmp.
  • nofail - не валить загрузку, если устройство недоступно (внешние диски, NAS).
  • x-systemd.automount - смонтировать лениво, при первом обращении.
Swap с приоритетами. Чем выше pri, тем раньше используется область (полезно, когда SSD-своп должен идти раньше HDD):

Код: Выделить всё

mkswap /swap.img && swapon --priority 10 /swap.img
swapon --show                     # активные области и приоритеты
swapoff -a                        # отключить весь своп
systemd-mount без правки fstab - современный способ для съемных носителей:

Код: Выделить всё

systemd-mount /dev/sdb1 /mnt/usb  # создает transient .mount
systemctl list-units --type=mount # все mount-юниты
systemctl status data.mount       # имя юнита = экранированный путь
Имя .mount unit получается экранированием пути: /data -> data.mount, /var/lib -> var-lib.mount. Преобразовать вручную - systemd-escape -p --suffix=mount /var/lib.

bind-mount подвешивает существующий каталог в другое место (один и тот же набор inode виден дважды), а overlay объединяет нижний слой только для чтения и верхний для записи - это база контейнеров и live-систем:

Код: Выделить всё

mount --bind /srv/www /var/www    # тот же каталог в двух точках
mount --rbind /srv /mnt           # рекурсивно, с вложенными ФС
mount -t overlay overlay -o lowerdir=/base,upperdir=/up,workdir=/wk /merged
Частые грабли
  • Прописали /dev/sdX в fstab, добавили диск - порядок имен поехал, система ушла в emergency mode. Лечится переходом на UUID и опцией nofail для некритичных томов.
  • Отредактировали fstab, но забыли systemctl daemon-reload. systemd работает по старой сгенерированной версии, а ваши правки как будто игнорируются.
  • umount пишет target is busy. Кто-то сидит в каталоге. Ищите процесс через lsof +D /mnt или fuser -vm /mnt, и только в крайнем случае umount -l (ленивый umount, отвязывает позже).
  • Забыли nofail на внешнем NAS - при его недоступности загрузка зависает на минуту-полторы (таймаут юнита), а то и падает в аварийный режим.
  • Своп в файле на Btrfs или на CoW-ФС без специальной подготовки ведет себя непредсказуемо - файл должен быть без сжатия и без CoW.
  • noatime молча ломает софт, которому реально нужен atime (редкие почтовые агенты mbox). Это исключение, но знать о нем стоит.
  • Путаница с экранированием имен .mount: пытаются systemctl start /data вместо data.mount.
Мини-лаба
  • Создайте файл-образ под ФС: fallocate -l 1G /lab.img, затем mkfs.ext4 -L labvol /lab.img.
  • Узнайте UUID образа через blkid и смонтируйте его вручную в /mnt/lab с опциями noatime,nosuid,nodev. Проверьте через findmnt.
  • Пропишите его в /etc/fstab по UUID с опцией nofail, выполните mount -a и findmnt --verify.
  • Сделайте автомонтирование: замените строку на x-systemd.automount, выполните daemon-reload, отмонтируйте и обратитесь к каталогу - убедитесь, что он смонтировался лениво.
  • Создайте swap-файл на 256M, активируйте с приоритетом 5 и проверьте swapon --show.
  • Сделайте bind-mount любого каталога в /mnt/bind и убедитесь, что изменения видны в обоих местах.
  • Соберите overlay из двух каталогов (lower + upper) и проверьте, что запись уходит только в upperdir.
Контрольные вопросы
  • Чем UUID отличается от PARTUUID и в каких случаях стоит использовать LABEL вместо UUID?
  • Что произойдет при загрузке, если устройство из fstab без опции nofail окажется недоступным, и как это изменит systemd?
  • Как из пути /var/log/audit получить имя соответствующего .mount unit и почему так?
  • Зачем нужен daemon-reload после правки fstab и какой компонент systemd за это отвечает?
  • Какие три опции монтирования усиливают безопасность раздела с пользовательскими данными и что именно каждая запрещает?
  • Чем bind-mount отличается от overlay по числу слоев и по тому, куда уходит запись?
👍3 ❤️1 🔥3 😄 🤔1
Аватара пользователя
emacs9
Сообщения: 1
Зарегистрирован: 14 май 2026, 05:54

Re: Работа с файловой системой Linux [203.1]

Сообщение emacs9 »

А почему у меня после правки fstab монт не подхватился, хотя mount -a отработал без ошибок? Оказалось, забыл daemon-reload - systemctl показывал старую сгенерированную версию юнита. Теперь делаю reload рефлекторно.
👍 ❤️1 🔥 😄 🤔
Аватара пользователя
maddog66
Сообщения: 1
Зарегистрирован: 12 май 2026, 09:44

Re: Работа с файловой системой Linux [203.1]

Сообщение maddog66 »

Поставил nofail на внешний NAS и время загрузки сократилось с минуты до пары секунд, когда шара недоступна. Раньше думал, что виснет сеть, а это таймаут mount-юнита добивал.
👍1 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Альтернативные загрузчики [202.3]
Следующая глава →
Обслуживание файловых систем [203.2]

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость