Linux. Автоматическое монтирование

26.08.2023

Теги: CLILinuxSystemd

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

Сведения о том, что и куда монтировать, система инициализации получает из файла /etc/fstab. Новая система инициализации Systemd сохранила поддержку /etc/fstab для совместимости, но на самом деле работает с файлами юнитов типа mount. Во время загрузки файлы юнитов автоматически генерируются для всех записей /etc/fstab.

Автоматическое монтирование fstab

Файл /etc/fstab

Каждая строчка в файле /etc/fstab описывает раздел, который нужно примонтировать к определенной точке монтирования. Можно указать файловую систему, опции монтирования, а также нужно ли проверять файловую систему на ошибки.

устройство  точка_монтирования  файловая_система  опции_монтирования  резерв{0,1} проверка{0,1,2}

устройство — это раздел диска с файловой системой, который нужно примонтировать. Можно указать в формате файла устройства /dev/sda1 или с помощью уникального идентификатора UUID=XXX-XXX-XXX-XXX-XXX.

точка_монтирования — куда нужно примонтировать это устройство — например /home, /boot, /mnt.

файловая_система — тип файловой системы раздела диска — например ext4, ext3, ext2, btrfs.

опции_монтирования — опции монтирования файловой системы — например ro, rw, auto, defaults.

резерв{0,1} — нужно ли делать резервную копию раздела, может принимать значения только 0 и 1. В настоящее время практически не используется и всегда указывается ноль.

проверка{0,1,2} — задает порядок, в котором операционная система проверяет файловые системы при загрузке: 0 — не проверять, 1 — проверять первой в очереди (используется только для корневого раздела) и 2 — проверять после проверки корневого раздела.

Примеры монтирования

Монтирование раздела диска /dev/sda2 с файловой системой ext4 в качестве корневой файловой системы

/dev/sda2  /  ext4  defaults  0  1

Монтирование раздела диска /dev/sda3 с файловой системой ext4 в качестве директории для каталогов пользователей

/dev/sda3  /home  ext4  defaults,noexec  0  2

Раздел диска /dev/sda4 с файловой системой ext4 не монтируется во время загрузки, но его могут подключить любые пользователи в режиме для чтения и записи

/dev/sda4  /media/files  ext4  noauto,users,rw  0  0

Для раздела подкачки тип файловой системы указывается как swap, а точка монтирования — как none

/dev/sda5  none  swap  defaults  0  0

Можно примонтировать оперативную память в /tmp — тогда система будет работать быстрее

tmpfs  /tmp  tmpfs  nodev,nosuid,noexec,size=100M  0  0

Автоматическое монтирование Systemd

Система инициализации Systemd анализирует /etc/fstab при загрузке и автоматически генерирует все нужные файлы юнитов на основе описанных там точек монтирования, а уже потом их загружает. Можно посмотреть все созданные точки монтирования с помощью команды.

$ systemctl -l --type mount

Вместо добавления записи в файл /etc/fstab можно создать mount-юнит. У меня виртуальная машина с двумя дисками /dev/sda и /dev/sdb. На диске /dev/sdb созданы четыре раздела с разными файловыми системами.

$ lsblk -o NAME,FSTYPE,UUID,MOUNTPOINTS /dev/sdb
NAME   FSTYPE UUID                                 MOUNTPOINTS
sdb
├─sdb1 ext4   62e721b4-cf83-4e8c-8b7e-76e88d8148ff
├─sdb2 vfat   A43F-0489
├─sdb3 xfs    356d58a4-2788-4eca-84a5-4663d2cb5aa7
└─sdb4 btrfs  82bd5a25-7aa5-4a16-a35c-db7661f1e95a

Давайте создадим юнит, который при загрузке системы примонтирует раздел /dev/sdb1 в точку монтирования /mnt/sdb1.

$ sudo mkdir /mnt/sdb1
$ sudo nano /etc/systemd/system/mnt-sdb1.mount
[Unit]
Description=Монтирование при загрузке раздела /dev/sdb1 в директорию /mnt/sdb1

[Mount]
What=/dev/sdb1
Where=/mnt/sdb1
Type=ext4
Options=defaults

[Install]
WantedBy=multi-user.target

Обратите внимание, что имя файла юнита должно совпадать с точкой монтирования, только вместо слэша используется дефис. Сообщаем системе про новый unit-файл И добавляем в новую службу в автозагрузку.

$ sudo systemctl daemon-reload
$ sudo systemctl enable mnt-sdb1.mount

Кроме того, смонтировать и размонтировать /dev/sdb1 в /mnt/sdb1 можно с помощью команд

$ sudo systemctl start mnt-sdb1.mount
$ sudo systemctl stop mnt-sdb1.mount

Постоянные имена

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

Чтобы избежать этой проблемы, в набор компонент Systemd в ​​Linux был добавлен модуль udev для управления как постоянными, так и непостоянными именами устройств. Во многих дистрибутивах Linux каталог /dev является временной файловой системой, которая создается udev при каждой загрузке системы.

В дополнение к непостоянным именам виртуальных устройств, таким как /dev/sda, модуль udev создает постоянные имена устройств, такие как /dev/disk/by-id или /dev/disk/by-uuid. Это могут быть уникальные UUID-номера или строки, сгенерированные из комбинаций названия производителя жесткого диска и серийных номеров.

Обращаясь к устройствам, использующим постоянные имена устройств, можно избежать проблем с загрузкой и настройкой операционной системы при перезагрузке серверов и смене непостоянных имен. Важный момент — UUID назначаются при создании файловой системы, то есть UUID не существует до момента форматирования.

Так что при редактировании файла /etc/fstab или создании mount-юнита — следует всегда использовать постоянные имена.

# файл /etc/fstab
# <device>                                              <dir>      <type> <options> <dump> <fsck>
/dev/disk/by-uuid/62e721b4-cf83-4e8c-8b7e-76e88d8148ff  /mnt/sdb1  ext4   defaults  0      2
# файл /etc/fstab
# <device>                                 <dir>      <type> <options> <dump> <fsck>
UUID=62e721b4-cf83-4e8c-8b7e-76e88d8148ff  /mnt/sdb1  ext4   defaults  0      2
[Unit]
Description=Монтирование при загрузке раздела /dev/sdb1 в директорию /mnt/sdb1

[Mount]
What=/dev/disk/by-uuid/62e721b4-cf83-4e8c-8b7e-76e88d8148ff
Where=/mnt/sdb1
Type=ext4
Options=defaults

[Install]
WantedBy=multi-user.target

Чтобы узнать UUID файловой системы можно использовать команду blkid или lsblk с опцией -f.

Поиск: CLI • Linux • Systemd • fstab • монтирование • загрузка • Файловая система • Блочное устройство

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.