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

Целевая аудитория - начинающие пользователи линукса, которые командой mount даже не пользовались.

Что конкретно мы изучим:

  1. Основные понятия, связанные с монтированием

  2. Аналитика

  3. Ручное монтирование и размонтирование на примере флешки.

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

  5. Флаги монтирования.

Важно: в этой статье не будет таких тем, как Bind Mount, Remount, и других видов монтирования. Однако в конце я оставил на очень хорошее руководство, которым я пользовался во время работы над статьёй. Я бы даже сказал, что создал просто упрощённую версию.


Основные понятия

Монтирование — это операция, которая делает файловую систему (ext4, btrfs и тд) или другой объект (источник монтирования) доступным в виде отдельного каталога (точки монтирования) во всём дереве каталогов. Монтирование выполняется командой mount.

Источник монтирования — это объект, который привязывается к точке монтирования. Им может быть: устройство (флешки, диски), файловая система, ISO-образы, разделы диска, LVM-тома и даже другие папки.

Точка монтирования — это каталог, к которому привязывается источник монтирования. Через него мы взаимодействуем с источником монтирования (закидываем файлы на флешку, например). Традиционно для ручного монтирования используется каталог /mnt, а для автоматического (в графических оболочках) /run/media.

Block Devices (блочное устройство) — это специальный файл, который предоставляет доступ к аппаратному или виртуальному устройству. При взаимодействии с блочным устройством обеспечивается обмен данными блоками равной величины: от 512 байт до 4 кб. Примеры: жёсткие диски (/dev/sda), SSD-накопители (/nvme0n1).

Файловая система (ФС) — это способ организации, хранения и именования данных на блочном устройстве. То есть, флешка, которую мы собираемся примонтировать - это не сырая железка, а устройство с собственной ФС. Примеры: ext4, btrfs, xfs, zfs, ntfs.

UUID (Universally Unique Identifier) — уникальный 128-битный идентификатор конкретного раздела, файловой системы или устройства. Имена устройств (/dev/sda) могут меняться, если вы переставите флешку в другой USB-порт или добавите новый диск. UUID же не меняется никогда. Пример: 4a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d

Раздел диска (партиция) — это логически выделенная область на физическом накопителе, которая создаётся делением общего объёма диска на отдельные самостоятельные пространства. Каждый раздел воспринимается ОС как отдельная зона и работает как отдельный накопитель. У каждого раздела своя ФС.

Опции монтирования (Mount Options) — это правила и ограничения, с которыми источник подключается к точке монтирования. Примеры: ro (Read-Only — только чтение), rw (Read-Write — чтение и запись), noexec (запрет на запуск программ с этого диска).

Таблица монтирования (fstab) — это конфигурационный файл /etc/fstab, который содержит инструкции по автоматическому подключению источников к точкам монтирования. После включения компьютера именно благодаря fstab наш диск и его разделы автоматически монтируются в /, /boot избавляя нас от ручной работы.

Помимо fstab также есть файлы /etc/mtab или /proc/self/mountinfo. Они динамически отображают то, что уже реально смонтировано в системе прямо сейчас.

! Помимо блочных устройств есть и символьные устройства, но монтирование (то есть ключевая тема этой статьи) к ним не имеет никакого отношения.


Аналитика

Суть: разберём четыре ключевые команды, чтобы посмотреть, какие блочные устройства подключены к системе, а также какие файловые системы смонтированы в принципе.

  1. lsblk - выводит список всех БЛОЧНЫХ УСТРОЙСТВ в виде наглядного дерева. Показывает жесткие диски, SSD, флешки и их разделы, а также их размер и точки монтирования. Работает без рута.

    # Достаточно написать просто lsblk
    [user:~] lsblk
       
    NAME            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
    nvme0n1         259:0    0 476,9G  0 disk  
    ├─nvme0n1p1     259:1    0   500M  0 part  /boot
    └─nvme0n1p2     259:2    0 476,5G  0 part  
      └─crypted     254:0    0 476,4G  0 crypt 
        ├─pool-swap 254:1    0     8G  0 lvm   [SWAP]
        └─pool-root 254:2    0 468,4G  0 lvm   /nix/store
                                               /

    Значение каждого поля:

    • NAME — имя устройства (например, sda — сам диск, sda1 — первый раздел на нем).

    • MAJ:MIN — внутренние номера для ядра (можно игнорировать).

    • RM — съемное ли устройство (1 — да/флешка, 0 — нет/встроенный диск).

    • SIZE — объем накопителя.

    • TYPE — тип (disk — физический диск, part — раздел на диске, lvm - lvm-том, crypt - luks-шифрование).

    • MOUNTPOINTS — куда этот раздел сейчас примонтирован (если поле пустое — раздел «отдыхает» и к нему нет доступа).

  2. blkid - выводит более подробную информацию о блочных устройствах (их атрибуты), такую как ФС, . В отличие от lsblk требует рута.

    # Можно вывести информацию обо ВСЕХ блочных устройствах
    [soundwave:~] sudo blkid 
    
    /dev/nvme0n1p1: SEC_TYPE="msdos" UUID="2AC4-E38F" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="disk-main-boot" PARTUUID="15ab75ef-63e7-4cf6-a4f0-0f70d247489e"
    /dev/mapper/pool-swap: UUID="de4bfdf1-5804-4143-aff7-a9ddaccd01bf" TYPE="swap"
    /dev/nvme0n1p2: UUID="7414b949-395c-4432-9733-07c30a235258" TYPE="crypto_LUKS" PARTLABEL="disk-main-luks" PARTUUID="291c1064-adc0-4cb6-8796-718eaeb54526"
    /dev/mapper/pool-root: UUID="445cbfab-663f-43a2-b084-b773534d4e8f" BLOCK_SIZE="4096" TYPE="ext4"
    /dev/mapper/crypted: UUID="ghvpmQ-VPDU-9dGc-F20C-UbIU-fNyz-WaqUQs" TYPE="LVM2_member"
    # Или о конкретном:
    [soundwave:~] sudo blkid /dev/nvme0n1p1
    
    /dev/nvme0n1p1: SEC_TYPE="msdos" UUID="2AC4-E38F" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="disk-main-boot" PARTUUID="15ab75ef-63e7-4cf6-a4f0-0f70d247489e"

    Значения полей:

    • UUID — уникальный идентификатор файловой системы.

    • TYPE — тип файловой системы (например, ext4, ntfs, swap, vfat).

    • LABEL — метка (имя) раздела или диска, если она задана.

    • PARTUUID и PARTLABEL — идентификаторы и метки самих разделов (в таблице разделов GPT)

    • SEC_TYPE — указывает на обратно совместимый тип файловой. Это маркер для ядра ОС, который показывает, что система может быть смонтирована более старым драйвером. В моём случае SEC_TYPE="msdos" значит, что vfat обратно совместима со старым msdos.

  3. findmnt - утилита для просмотра ВСЕХ смонтированных файловых систем или поиска информации в /etc/fstab, /etc/mtab и /proc/self/mountinfo. Является альтернативой старому mount (именно mount без параметров).

    Рассмотрим наиболее популярные и основные сценарии использования:

    # Вывод ВСЕХ смонтированных файловых систем, включая псевдофайловые (proc, sysfs).
    [soundwave:~] findmnt  
    
    TARGET                      SOURCE       FSTYPE   OPTIONS
    /                           /dev/mapper/pool-root
    │                                        ext4     rw,relatime
    ├─/dev                      devtmpfs     devtmpfs rw,nosuid,size=804804k,nr_inodes=1997639,mode=755
    │ ├─/dev/hugepages          hugetlbfs    hugetlbf rw,nosuid,nodev,relatime,pagesize=2M
    │ ├─/dev/mqueue             mqueue       mqueue   rw,nosuid,nodev,noexec,relatime
    │ ├─/dev/pts                devpts       devpts   rw,nosuid,noexec,relatime,gid=3,mode=620,ptmxmode=666
    │ └─/dev/shm                tmpfs        tmpfs    rw,nosuid,nodev
    ├─/proc                     proc         proc     rw,nosuid,nodev,noexec,relatime
    ├─/sys                      sysfs        sysfs    rw,nosuid,nodev,noexec,relatime
    │ ├─/sys/kernel/security    securityfs   security rw,nosuid,nodev,noexec,relatime
    ...
    # Вывести файловые системы определённого типа (например, ext4)
    [soundwave:~] findmnt -t ext4
    
    TARGET SOURCE         FSTYPE OPTIONS
    /      /dev/pool/root ext4   x-initrd.mount,defaults
    
    
    # Файловые системы можно перечислить через запятую
    [soundwave:~] findmnt -t proc,vfat
    
    TARGET SOURCE       FSTYPE OPTIONS
    /proc  proc         proc   rw,nosuid,nodev,noexec,relatime
    /boot  /dev/nvme0n1p1
                        vfat   rw,relatime,fmask=0022,dmask=0022,codepage=437,...
    [
    # Вывести только РЕАЛЬНЫЕ разделы без виртуальных ФС
    [soundwave:~] findmnt --real 
    
    TARGET SOURCE                           FSTYPE OPTIONS
    /      /dev/mapper/pool-root            ext4   rw,relatime
    ├─/nix/store
    │      /dev/mapper/pool-root[/nix/store]
    │                                       ext4   ro,nosuid,nodev,relatime
    └─/boot
           /dev/nvme0n1p1                   vfat   rw,relatime,fmask=0022,dmask=0022,codepage=437,...
    # Вывести информацию исключительно из файла /etc/fstab
    [soundwave:~] findmnt -s
              
    TARGET   SOURCE                               FSTYPE OPTIONS
    /        /dev/pool/root                       ext4   x-initrd.mount,defaults
    /usr/bin none                                 envfs  bind-mount=/bin,fallback-path=/nix/store/y462zy51ldym05mz36mwrq27
    ...
    
    
    # Благодаря параметру -o можно вывести только конкретные поля
    [soundwave:~] findmnt -o TARGET,FSTYPE -s
    
    TARGET   FSTYPE
    /        ext4
    /usr/bin envfs
    /bin     none
    /boot    vfat
    none     swap
    
    
    # Параметр -O позволяет отсортировать вывод по специальным параметрам монтирования, в нашем случае - ro (read-only). НЕ ПУТАТЬ С -o !!!
    [soundwave:~] findmnt -O ro -o TARGET,OPTIONS
    TARGET                           OPTIONS
    /nix/store                       ro,nosuid,nodev,relatime
    /run/credentials/systemd-journald.service
                                     ro,nosuid,nodev,noexec,relatime,nosymfollow,size=1024k,nr_inodes=1024,mode=700,noswap
    /run/credentials/getty@tty1.service
    ...
    # Узнать, где смонтировано устройство
    [soundwave:~] findmnt -S /dev/sda1
      
    TARGET         SOURCE    FSTYPE OPTIONS
    /mnt/testflash /dev/sda1 exfat  rw,relatime,fmask=0022,dmask=0022,iocharset=utf8,errors=remount-ro

    Больше информации о команде findmnt вы сможете найти тут: ссылка


Ручное монтирование и размонтирование

Работать будем с флешкой в качестве источника монтирования. Сразу после подключения к usb-порту через lsblk выясняем её название: /dev/sda. А интересует нас конкретно раздел флешки: /dev/sda1.

В чём разница? Объясняю:

/dev/sda — это весь физический жесткий диск целиком (вместе с таблицей разделов, служебной информацией и всеми секторами). На него нельзя напрямую записать обычную файловую систему (ext4, NTFS и т.д.), если диск размечен на разделы.

/dev/sda1 — это первый логический раздел на диске sda. Именно на нем создается файловая система (mkfs.ext4, mkfs.ntfs), в которой хранятся файлы флешки.

Шаг 1. Подготовка точки монтирования

Нельзя примонтировать источник в никуда. Нам нужна точка монтирования - каталог, к которому мы привяжем нашу флешку. Для этого создадим чистую папку в каталоге /mnt:

sudo mkdir /mnt/testflash

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

Шаг 2. Обычное монтирование

В 90% случаев ядро само понимает, какая ФС находится на флешке и применяет нужные драйверы автоматически:

Синтаксис: sudo mount [ИСТОЧНИК] [ТОЧКА_МОНТИРОВАНИЯ]

sudo mount /dev/sda1 /mnt/testflash

Проверить, что монтирование прошло успешно, можно через lsblk или findmnt --real. А чтобы проверить, сколько места осталось на флешке, можно использовать df -h /mnt/testflash:

[soundwave:~] df -h /mnt/testflash


Файловая система Размер Использовано  Дост Использовано% Cмонтировано в
/dev/sda1          3,8G         965M  2,8G           26% /mnt/testflash

ЕСЛИ тип ФС не определяется автоматически или необходимо задать его явно через параметр -t:

sudo mount -t exfat /dev/sda1 /mnt/testflash

Явное указание ФС бывает полезно при диагностике, нестандартных случаях. Проверять результаты советую через findmnt.

В любом случае, сейчас наша флешка примонтирована, и мы со спокойной душой можем зайти туда через cd, посмотреть содержимое или создать новые файлы.

Шаг 3. Монтирование с флагами

Бывают ситуации, когда нам нужно ограничить права монтируемой флешки. Например, если мы подозреваем, что флешка вирусная. В этом случае нам помогут опции монтирования (или флаги).

Синтаксис: mount -o [опция1],[опция2],[опция3] [ИСТОЧНИК] [ТОЧКА_МОНТИРОВАНИЯ]

sudo mount -o ro,noexec /dev/sda1 /mnt/testflash

Наши флаги значат:

  • ro - только чтение (мы не можем создавать файлы на флешке)

  • noexec - запрет на запуск исполняемых файлов с флешки.

ВАЖНО! Когда мы делаем mount без указания опций монтирования, ОС автоматически применяет стандартный набор параметров (defaults). Подробнее о конкретных параметрах монтирования я расскажу в конце статьи.

Шаг 4. Размонтирование

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

sudo umount /dev/sda1
# ИЛИ
sudo umount /mnt/testflash

Ошибка "Device is busy"

Давайте заново примонтируем нашу флэшку и войдём в её папку через cd:

sudo mount /dev/sda1 /mnt/testflash
cd /mnt/testflash

Отлично, а теперь попробуем отмонтировать:

[soundwave:/mnt/testflash] sudo umount /dev/sda1

umount: /mnt/testflash: target is busy.

Что случилось? Устройство занято, а это значит, что какая-та программа или процесс держит файл на флешке открытым или, в нашем случае, мы сами в терминале находимся внутри папки /mnt/testflash.

Давайте поступим по-взрослому и выясним, кто держит нашу точку монтирования. У нас есть несколько вариантов: lsod, fuser

[soundwave:/mnt/testflash] lsof +f -- /mnt/testflash

COMMAND   PID      USER  FD   TYPE DEVICE SIZE/OFF NODE NAME
zsh     39887 soundwave cwd    DIR    8,1    32768    1 /mnt/testflash


[soundwave:~] fuser -vm /mnt/testflash
                     ПОЛЬЗ-ЛЬ    PID ДОСТУП КОМАНДА
/mnt/testflash:      root     kernel mount /mnt/testflash
                     soundwave  39887 ..c.. zsh

Как мы видим, всё дело в zsh (то есть в том, что мы через cd вошли в /mnt/testfash и остались там по сей момент). В нашем домашнем случае это дело легко исправляется обычным cd ~, после которого umount пройдёт успешно.

Принудительное и ленивое размонтирование

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

В этом случае и помогают принудительное и ленивое размонтирование.

Ленивое размонтирование (lazy)

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

Все новые попытки обратиться к этому пути завершатся ошибкой, а сама ФС физически и окончательно отмонтируется только тогда, когда последний процесс закроет все файлы на ней.

Синтаксис: umount -l [ТОЧКА_МОНТИРОВАНИЯ или ИСТОЧНИК]

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

Принудительное размонтирование (force)

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

Синтаксис: umount -f [ТОЧКА_МОНТИРОВАНИЯ или ИСТОЧНИК]

Чаще всего применяется для «зависших» сетевых дисков. Для обычных локальных дисков принудительное отключение в разгар записи может привести к повреждению файловой системы и потере данных.

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

/etc/fstab — это конфигурационный файл, который определяет:

  1. Какие источники монтирования должны монтироваться (например, раздел-загрузчик)

  2. В какие точки монтирования (/boot)

  3. С какими параметрами (например, ro, auto и тд)

Без этого файла нам после каждой загрузки системы пришлось бы заново подключать все разделы через mount.

Выглядит он так:

# This is a generated file.  Do not edit!
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>

# Filesystems.
/dev/pool/root / ext4 x-initrd.mount,defaults 0 1
none /usr/bin envfs bind-mount=/bin,fallback-path=/nix/store/y462zy51ldym05mz36mwrq274x1r2snf-fallback-path,nofail 0 0
/usr/bin /bin none bind,nofail 0 0
/dev/disk/by-partlabel/disk-main-boot /boot vfat defaults 0 2

Классическая строка состоит из 6 полей:

<fs_spec> <fs_file> <fs_vfstype> <fs_opts> <fs_freq> <fs_pass>
  • fs_spec - это источник монтирования (UUID=..., /dev/..., server:/export, //server/share, tmpfs, proc, none).

  • fs_file - это точка монтирования.

  • fs_vfstype - это тип файловой системы.

  • fs_opts - параметры монтирования. Указываются через запятую без пробела.

  • fs_freq - флаг для утилиты dump. Определяет, нужно ли делать резервную копию данной ФС.

  • fs_pass - отвечает за проверку целостности диска утилитой fsck (0 — не проверять, 1 — проверять первым для корневого раздела, 2 — проверять после).

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

Но я упомяну, что после любых правок в /etc/fstab следует выполнить эту цепочку команд:

sudo systemctl daemon-reload
sudo findmnt --verify --verbose # Проверяет синтаксис /etc/fstab
sudo mount -a                   # Монтирует все источники из /etc/fstab, которые не были подключены
sudo swapon -a                  # Монтирует все swap-разделы (mount -a этого не делает)

Самые важные опции монтирования

  • defaults — исторически включает в себя набор вроде rw,suid,dev,exec,auto,nouser,async, но фактический набор зависит и от ядра, и от конкретной файловой системы. Поэтому для важных сценариев лучше писать значимые опции явно, а не надеяться на "подразумеваемое".

  • ro — Read Only («Только чтение»). Файл, папку, диск или раздел можно только просматривать или открывать, но нельзя изменять, удалять или создавать новые данные внутри.

  • rw — Read/Write («Чтение и запись»). Даёт полный доступ: данные можно просматривать, редактировать, сохранять новые и удалять существующие.

  • auto / noauto — автоматически монтировать при загрузке (команда mount -a) или только вручную.

  • exec / noexec — разрешить или запретить запуск исполняемых файлов с этого раздела.

  • suid / nosuid — разрешить или запретить работу битов SUID/SGID (позволяют запустить исоплняемый файл с правами их владельцев).

  • dev / nodev — разрешить или запретить интерпретацию файлов устройств на этом источнике.

  • user / nouser —- разрешает (user) или запрещает (nouser) обычным пользователям монтировать источник. Размонтировать его сможет только тот пользователь, который его подключил (или root).


  • Углублённый обзор монтирования - ссылка

  • Архитектура VFS. Файловые дескрипторы: ссылка

  • Архитектура VFS. Айноды: ссылка

Источники

  1. https://docs-python.ru/other/montirovanie-razdelov-linux/

  2. https://hackware.ru/?p=zalinuxru_4793

  3. DeepSeek - консультация

  4. Gemini - консультация, редактура