Linux. Автоматическое монтирование
Во время загрузки операционной системы 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 • монтирование • загрузка • Файловая система • Блочное устройство