В этой статье собрана вся необходимая база по работе с монтированием. Мы рассмотрим ключевые понятия, разберём инструменты анализа подключённых устройств, отработаем ручное монтирование с ограничивающими флагами, научимся корректно размонтировать занятые разделы и узнаем, что такое /etc/fstab и зачем он нужен.
Целевая аудитория — начинающие пользователи линукса, которые командой mount даже не пользовались.
Что конкретно мы изучим:
-
Основные понятия, связанные с монтированием
-
Аналитика
-
Ручное монтирование и размонтирование на примере флешки.
-
Автоматическое монтирование — fstab
-
Флаги монтирования.
Важно: в этой статье не будет таких тем, как 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. Они динамически отображают то, что уже реально смонтировано в системе прямо сейчас.
! Помимо блочных устройств есть и символьные устройства, но монтирование (то есть ключевая тема этой статьи) к ним не имеет никакого отношения.
Аналитика
Суть: разберём четыре ключевые команды, чтобы посмотреть, какие блочные устройства подключены к системе, а также какие файловые системы смонтированы в принципе.
-
lsblk— выводит список всех БЛОЧНЫХ УСТРОЙСТВ в виде наглядного дерева. Показывает жесткие диски, SSD, флешки и их разделы, а также их размер и точки монтирования. Работает без рута.# Достаточно написать просто lsblk[user:~] lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSnvme0n1 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— куда этот раздел сейчас примонтирован (если поле пустое — раздел «отдыхает» и к нему нет доступа).
-
-
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.
-
-
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 ext4TARGET SOURCE FSTYPE OPTIONS/ /dev/pool/root ext4 x-initrd.mount,defaults# Файловые системы можно перечислить через запятую[soundwave:~] findmnt -t proc,vfatTARGET 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 -sTARGET FSTYPE/ ext4/usr/bin envfs/bin none/boot vfatnone swap# Параметр -O позволяет отсортировать вывод по специальным параметрам монтирования, в нашем случае - ro (read-only). НЕ ПУТАТЬ С -o !!![soundwave:~] findmnt -O ro -o TARGET,OPTIONSTARGET 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/testflashcd /mnt/testflash
Отлично, а теперь попробуем отмонтировать:
[soundwave:/mnt/testflash] sudo umount /dev/sda1umount: /mnt/testflash: target is busy.
Что случилось? Устройство занято, а это значит, что какая-та программа или процесс держит файл на флешке открытым или, в нашем случае, мы сами в терминале находимся внутри папки /mnt/testflash.
Давайте поступим по-взрослому и выясним, кто держит нашу точку монтирования. У нас есть несколько вариантов: lsod, fuser
[soundwave:/mnt/testflash] lsof +f -- /mnt/testflashCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEzsh 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 — это конфигурационный файл, который определяет:
-
Какие источники монтирования должны монтироваться (например, раздел-загрузчик)
-
В какие точки монтирования (
/boot) -
С какими параметрами (например,
ro,autoи тд)
Без этого файла нам после каждой загрузки системы пришлось бы заново подключать все разделы через mount.
Выглядит он так:
# This is a generated file. Do not edit!## # Filesystems./dev/pool/root / ext4 x-initrd.mount,defaults 0 1none /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— это источник монтирования (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-reloadsudo findmnt --verify --verbose # Проверяет синтаксис /etc/fstabsudo 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. Айноды: ссылка
Источники
-
https://docs-python.ru/other/montirovanie-razdelov-linux/
-
https://hackware.ru/?p=zalinuxru_4793
-
DeepSeek — консультация
-
Gemini — консультация, редактура
Источник: habr.com