Главная >> Система >> Автоматическое монтирование fstab и systemd

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

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

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


Содержание статьи

 Как происходит монтирование?

Файловая система Linux очень сильно отличается от Windows, здесь нет дисков. Есть только корневая файловая система, которая строится путем монтирования всех нужных разделов в подкаталоги корня.

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

Все эти задачи выполняет система инициализации, независимо от того используете ли вы OpenRC или Systemd. Но сама система инициализации не знает куда монтировать тот или иной раздел. Для получения этой информации она использует конфигурационные файлы.

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

В этой статье мы рассмотрим как настроить автомонтирование разделов fstab, так и новый способ, с помощью systemd.

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

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

Сначала давайте рассмотрим синтаксис одной строчки fstab:

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

Теперь подробнее рассмотрим что означает каждый пункт:

  • Устройство - это раздел диска, который вам нужно примонтировать. Его можно указать в формате файла устройства Linux в каталоге /dev/, например, /dev/sda1 или с помощью уникального идентификатора UUID, тогда формат записи будет таким UUID="XXXX-XXXX-XXXX-XXXX", также возможна запись с помощью метки, например, LABEL=home;
  • Файловая система указывает в какой файловой системе нужно монтировать это устройство, например, ext4, ext3, ext2, btrfs;
  • Точка монтирования - куда нужно примонтировать это устройство, например, /home, /boot, /mnt;
  • Опции - параметры монтирования файловой системы, рассмотрим подробнее ниже;
  • Проверка - указывает в какой очереди нужно проверять устройство на ошибки, 1 - в первую очередь, 2 - вторую, 0 - не проверять;
  • Резерв - указывает нужно ли делать резервную копию раздела, может принимать значения только 0 и 1.

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

Начнем с общих для всех файловых систем опций:

  • sync - записывать на диск все изменения сразу после того, как они были выполнены, не использовать кэширование для записываемых данных. Может понадобится для извлечения флешки без размонтирования, но сильно снижает производительность;
  • async - использовать кэш при записи данных, увеличивает производительность, используется по умолчанию;
  • atime - сохранять время последнего доступа к файлу;
  • noatime - не сохранять время последнего доступа, полезно для ssd и флешек;
  • relatime - обновлять время доступа только при изменении файла, необходимо для работы многих программ;
  • norelatime - отключить relatime;
  • strictatime - обновлять время доступа всегда, отключает действие предыдущих опций;
  • auto - автоматически монтировать при загрузке, действие по умолчанию;
  • noauto - не монтировать при загрузке;
  • defaults - использовать опции монтирования fstab по умолчанию - rw,suid,dev,exec,auto,nouser,async;
  • dev - интерпретировать блочные устройства;
  • nodev - не интерпретировать блочные устройства;
  • diratime - аналогично atime только для каталогов;
  • dirnoatime - аналогично noatime, для каталогов;
  • exec - разрешить выполнять программы на этом разделе;
  • noexec - запретить выполнять программы на этом разделе;
  • group - разрешить другим пользователям кроме root монтировать этот раздел, если их группа совпадает с указанной, обычно используется вместе с noauto;
  • nofail - не сообщать об ошибках;
  • mand - разрешить блокирование файловой системы, нужно для некоторых антивирусов;
  • nomand - запретить блокирование файловой системы;
  • suid - разрешить выполнение программ с флагом suid от имени другого пользователя;
  • nosuid - игнорировать флаг suid;
  • owner - разрешить указанному пользователю монтировать устройство;
  • ro - монтировать только для чтения;
  • rw - монтировать для чтения и записи;
  • users - разрешить монтирование любому пользователю;
  • umask - установить права доступа к файлам и папкам на этом разделе;
  • uid - задает владельца каталога, по умолчанию root;
  • gid - задает группу владельца каталога.

Когда мы рассмотрели всю теорию, настройка fstab не вызовет у вас проблем. Теперь давайте рассмотрим стандартное содержимое файла fstab, а также как выполняется монтирование. Вот так выглядит монтирование корня:

/dev/sda2 / ext4 defaults 0 1

Здесь в качестве корневой файловой системы будет монтироваться раздел /dev/sda2 с файловой системой ext4 и опциями по умолчанию defaults. Резервная копия не используется, и вообще, этот параметр не читается системой инициализации и сейчас нас не интересует. Для домашнего раздела все будет выглядеть очень похоже:

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

Только тут мы указали, что его нужно проверить вторым, а в опциях еще добавили, что программы оттуда выполнять нельзя. Более интересен пункт для дополнительного диска, на котором хранятся файлы:

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

Тут мы указываем, что раздел не нужно монтировать во время загрузки, но его могут подключить любые пользователи в режиме для чтения и записи. Ни проверка ни резервная копия не выполняются. Для раздела подкачки файловая система указывается swap, а точка монтирования none:

/dev/sda5 none swap defaults 0 0

Также вы можете примонтировать немножко оперативной памяти:

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

Таким образом, мы примонтировали оперативную память в /tmp и теперь система будет работать немного быстрее. Вот что получилось:

/dev/sda2 / ext4 defaults 0 1
/dev/sda3 /home ext4 defaults,noexec 0 2
/dev/sda4 /media/files/ ext4 noauto,users,rw 0 0
/dev/sda5 none swap defaults 0 0
tmpfs /tmp tmpfs nodev,nosuid,noexec,size=100M 0 0

А теперь, как я и обещал рассмотрим как выполняется монтирование с помощью systemd.

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

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

Вы можете посмотреть все созданные в systemd точки монтирования такой командой:

systemctl -l --type mount

fstab

Но нам ничего не мешает самим создать такой файл точки монтирования. Это очень просто, давайте рассмотрим синтаксис:

[Unit]
Description=описание

[Mount]
What=адрес_раздела
Where=точка монтирования
Type=файловая система
Options=опции монтирования

[Install]
WantedBy=multi-user.target

Например, для той же домашней папки автоматическое монтирование fstab будет выглядеть вот так, имя обязательно должно состоять из точки монтирования, в которой слеши заменены на дефис:

sudo vi /etc/systemd/system/home.mount

[Unit]
Description=Mount System Home Directory

[Mount]
What=/dev/sda3
Where=/home
Type=ext4
Options=defaults,noexec

[Install]
WantedBy=multi-user.target

Точно такой же файл может быть создан для любого устройства. Теперь для монтирования достаточно набрать:

sudo systemctl start home.mount

А чтобы добавить эту точку монтирования в автозагрузку выполните:

sudo systemctl enable home.mount

Вот и все теперь вы знаете не только как выполняется монтирование fstab, но и автоматическое монтирование в systemd.

Выводы

Как видите, редактирование fstab не так уж сложно, как может показаться на первый взгляд. С этим справиться даже новичок в Linux если изучить параметры fstab и синтаксис самого файла. Если у вас остались вопросы, спрашивайте в комментариях!

34 комментария к “Автоматическое монтирование fstab и systemd”

  1. Про fstab - после опций идет резерв, потом проверка. Небольшая опечаточка автора в самом начале статьи. Хотя в примерах параметры стоят правильно.

    Ответить
  2. В списке опций не нашел nouser - запрещает монтировать/отмонтировать устройство простым пользователям (входит в набор опций по умолчанию).

    Ответить
  3. "Сначала давайте рассмотрим одну синтаксис одной строчки fstab:

    устройство файловая_система точка_монтирования"

    А в примерах ниже указано "устройство точка_монтировния файловая_система"

    Ответить
  4. "Файловая система Linux очень сильно отличается от Windows, здесь нет дисков. Есть только коневая файловая система,..."

    Я бы даже сказал "конская" 🙂

    Ответить
  5. Если честно, здесь и речи нет об автоматическом монтировании. Под автоматическим монтированием многие понимают так: подключил любой диск к системе и пошёл гулять по разделам и файлам, без лишних приседаний, как это в винде происходит к примеру. Для этого надо было рассмотреть работу udev и правил автомонтирования через systemd в статье.

    Ответить
  6. стоит отметить , что файл точки монтирования должен называется в соответсвии с точкой монтирования.

    Mount units must be named after the mount point directories they control. Example: the mount point /home/lennart must be configured in a unit file home-lennart.mount.

    Ответить
  7. Хорошая статья, спасибо! Подскажите опция noatime для диска SSD, на котором расположена база данных mysql, может ли повлиять на работу самого сервиса MySQL? Мониторинг ли он дату изменения фалов БД?

    Ответить
  8. Как не работала ни одна из схем схема так и не работает)))) после перезагрузки только ручками монтировать(((

    Ответить
  9. Все супер, пашет... вопрос вот в чем... чем больше пользователей работает в файловой помойке, тем сильнее тупит эта сетевая помойка, что делать

    Ответить
  10. Линукс ГАВНО.... лишний раз убедился, то что в винде просто сделать в пару кликов, тут хрен знает чего надо сотворить и не дай бог какую букву пропустиь

    Ответить
    • Неважный: Всё бы тебе как побыстрее, полегче, побольше, да послаще, не прилогая никаких усилий. По щучьему велению, без труда и без науки бывает только в русских народных сказках.

      Вы обычные заурядный, диванный КРИТИКАН.

      Ответить
  11. Как по мне лучше монтировать все по UUID
    [Mount]
    What=/dev/disk/by-uuid/6028c127-5d95-4360-981f-2986b4c20fd9
    Where=/mnt/sdb1
    а иначе когда втыкаешь еще доп диск нумерация сьезжает

    Ответить
    • Sergey: А по мне так привязка к устройству (/dev/sd*n) гараздо понятнее и имформативнее ниочем не говорящей и не информативной привязки по UUID. (imho: imho:). Дело вкуса.

      PS Автор забыл упомянуть о привязке по lebel диска, хотя все виды привязок ОДИНАКОВЫ :так как что привязка по UUID, что по Lebel и. т. д. всего лишь директория с жёсткими ссылками на /dev/sd*n то есть файл устройства в директории /dev.

      Ответить
  12. у меня после монтирования через fstab для пользователя все равно примонтированные диски в RO, что делаю не так ?
    в fstab:
    /dev/sda1 /media/PROJECT ntfs,rw,umask,users 0 2
    /dev/sdc1 /media/DATA ntfs,rw,umask,users 0 2

    Ответить
  13. Так у тебя ntfs, а линуха их читать умеет, а вот писать... Слышал были костыли, но... Так что либо на дисках файловая система vfat или ext4. А так с нтфс онли чтение

    Ответить
  14. Какой же бред
    У меня стоит manjaro xfce и я спокойно и пишу и читаю с диска.
    Не вводи людей в заблуждение:)
    Там по-моему какой то командой исправить нужно и все будет и ЧИТАТЬ и ПИСАТЬ...
    Учитесь искать в интернете, граждане (пока он есть)

    Ответить
  15. Похоже есть ошибка в статье
    Последний параметр Резерв (принимает значения 0 или 1)
    Ошибка здесь
    /dev/sda3 /home ext4 defaults,noexec 0 2

    Ответить
  16. Делаю unit для монтирования дополнительной флешки для контроллера умного дома, чтобы складывать на нее бэкапы, имея возможность взаимодействовать с флешкой тем пользователям, что состоят в группе backups. Юнит работает, но от имени простого пользователя я ничего не могу на флешке сделать, ибо прав нет, а точка монтирования приобретает владельца и группу root. Как можно сменить владельца и группу на точке монтирования, чтобы пользователь и/или группа могли взаимодействовать с носителем?

    Ответить
    • Вот тот же вопрос. У себя на минте сделал так (может оно и неверно, но исправно работает уже не один год), два жестких диска и три сетевых по nfs:
      1. примонтировал все вручную (жесткие по клику в ФМ, а nfs через терминал)
      2. открыл etc с правами администратора прямо через ФМ
      3. нашел mtab и в нем примонтированое
      4. скопировал построчно в ftab
      5. сохранил файл ftab и отмонтировал все
      6. mount -a
      После перезагрузки все само монтируется.

      Ответить
  17. что произойдет если стоит автоматическое монтирование в
    /dev/sdc1 /media/diskforUsb ntfs defaults 0 0
    при этом диск вытащить, и линукс перезагрузить, ошибка ведь будет?

    Ответить
  18. Не получается:
    OS - Debian11
    файл - mnt-usbhdd.mount
    ---
    [Unit]
    Description=Mount USBHDD
    [Mount]
    What=/dev/sdb1
    Where=/mnt/usbhdd
    Type=ntfs
    Options=defaults,noexec,nofail 0 0
    [Install]
    WantedBy=multi-user.target
    --------------------------------
    systemctl start mnt-usbhdd.mount
    Job failed. See "journalctl -xe" for details.
    ---
    в "journalctl -xe" такое : ...
    Начат процесс запуска юнита mnt-usbhdd.mount.
    мая 19 18:56:19 mdscity mount[748]: mount: /mnt/usbhdd: unknown filesystem type 'ntfs'.
    мая 19 18:56:19 mdscity systemd[1]: mnt-usbhdd.mount: Mount process exited, code=exited, status=32/n/a
    Subject: Unit process exited
    Defined-By: systemd
    .....
    -------
    Направьте где может быть мой косяк
    Спасибо

    Ответить
  19. Не важный: :А тебе бы все как полегче, побольше, послаще, при этом не прилогая никаких усилий. По щучьему велению, без труда и без науки это только в русских народных сказках.

    Вы самый обычный заурядный КРИТИКАН.

    Ответить

Оставьте комментарий