← Весь справочник

mount

Подключение файловых систем — mount, umount, опции -o, /etc/fstab, findmnt, loop-устройства и bind

В Linux одно дерево каталогов, и каждая файловая система (раздел диска, образ, tmpfs, сетевой ресурс) подключается к какому-то каталогу — точке монтирования. mount подключает, umount отключает, findmnt показывает, что и куда подключено. Что подключать при загрузке, описано в /etc/fstab.

Монтировать может только root (нужна capability CAP_SYS_ADMIN). В песочнице IzzyLab это право отключено: mount и umount отвечают «permission denied» — даже для tmpfs и bind. Зато работают findmnt, findmnt --verify для проверки fstab, blkid и создание образов (см. filesystems).

Синтаксис

mount                                  # список (лучше findmnt)
mount [-t тип] [-o опции] источник каталог
mount каталог                          # взять остальное из /etc/fstab
mount -a                               # смонтировать всё из fstab
umount каталог|устройство
findmnt [опции] [устройство|каталог]

Опции mount

ОпцияЧто делает
-t типтип ФС: ext4, xfs, vfat, tmpfs, nfs… Обычно определяется сам
-o списокопции монтирования через запятую (таблица ниже)
-r / -wтолько чтение (-o ro) / чтение и запись (по умолчанию)
-aсмонтировать всё из fstab, кроме строк с noauto и уже смонтированного
-T файлдругой файл вместо /etc/fstab
-f«понарошку»: всё, кроме самого системного вызова
-vподробно
-L метка / -U uuidисточник по метке или UUID (то же, что LABEL=…, UUID=…)
-mсоздать каталог точки монтирования, если его нет
--bind / -Bподключить каталог ещё и в другое место
--rbind / -Rто же вместе со всеми вложенными точками монтирования
--move / -Mперенести точку монтирования

Опции -o

ОпцияСмысл
defaultsrw,suid,dev,exec,auto,nouser,async — стандартный набор для fstab
ro / rwтолько чтение / чтение и запись
remountпоменять опции уже смонтированной ФС без отключения: -o remount,ro /data
noexecзапрет запуска программ с этой ФС
nosuidигнорировать биты setuid/setgid
nodevигнорировать файлы устройств
noatime / relatimeне обновлять время доступа / обновлять редко (по умолчанию relatime)
loopсмонтировать файл-образ через loop-устройство
bindто же, что --bind
noautoне монтировать при mount -a и загрузке
nofailне останавливать загрузку, если устройства нет
user / usersразрешить монтировать обычному пользователю (только из fstab)
uid=, gid=, umask=владелец и права для ФС без Unix-прав (vfat, ntfs)
size=100M, mode=1777размер и права для tmpfs
_netdevсетевая ФС: монтировать после поднятия сети

Опции umount

ОпцияЧто делает
-l«ленивое» отключение: убрать из дерева сразу, освободить, когда файлы закроют
-fпринудительно (для недоступного NFS)
-Rотключить вместе со всеми вложенными
-dдля loop: заодно освободить loop-устройство
-aотключить всё, что смонтировано
-qне ругаться, если не смонтировано

/etc/fstab

Одна строка — одна файловая система, шесть полей через пробелы:

# источник                                 точка      тип   опции             dump pass
UUID=247f8868-2629-4efe-94cd-dd6ac84027cc  /data      ext4  defaults,noatime  0    2
LABEL=backup                               /backup    ext4  defaults,nofail   0    2
/srv/disk.img                              /mnt/img   ext4  loop,ro           0    0
tmpfs                                      /mnt/tmp   tmpfs size=100M,mode=1777 0  0
№ПолеСмысл
1источник/dev/sdb1, UUID=…, LABEL=…, путь к образу, tmpfs, server:/export
2точка монтированиякаталог должен существовать; для swap — none
3типext4, xfs, tmpfs, nfs, swap, auto
4опциикак в -o; минимум defaults
5dump0 почти всегда
6passпорядок проверки fsck при загрузке: 1 — корень, 2 — остальные, 0 — не проверять

UUID и метку покажет blkid. Имена /dev/sdb1 могут поменяться после перезагрузки, UUID — нет.

findmnt

ОпцияЧто делает
(без опций)дерево всех точек монтирования: TARGET, SOURCE, FSTYPE, OPTIONS
каталог / устройствотолько эта точка монтирования; код 1, если такой нет
-T путьна какой ФС лежит этот файл или каталог
-t тип[,тип]только указанные типы
-O опциятолько с указанной опцией монтирования (-O ro)
-lплоский список вместо дерева
-nбез заголовка
-o столбцывыбрать столбцы: TARGET,SOURCE,FSTYPE,OPTIONS,SIZE,USED,AVAIL,UUID,LABEL
-Dвывод в стиле df
-J / -P / -rJSON / пары KEY="value" / сырой вывод — для скриптов
-sчитать /etc/fstab, а не текущие монтирования
-F файлс -s: другой файл вместо fstab
-x (--verify)проверить fstab; --verbose — подробно; --tab-file файл — другой файл

Примеры

# что смонтировано и куда; на какой ФС лежит каталог
findmnt
findmnt -T /var/log
findmnt -n -o FSTYPE,OPTIONS /

# все реальные диски в стиле df
findmnt -D -t ext4,xfs

# смонтировано ли что-то в каталог (для скриптов)
mountpoint -q /data && echo смонтировано

# подключить раздел и образ (нужен root на настоящей машине)
mkdir -p /data /mnt/img
mount /dev/sdb1 /data
mount -o loop,ro /srv/disk.img /mnt/img

# tmpfs в памяти и bind-монтирование каталога в другое место
mount -t tmpfs -o size=100M tmpfs /mnt/tmp
mount --bind /srv/www /var/www

# сделать ФС только для чтения на лету и вернуть обратно
mount -o remount,ro /data
mount -o remount,rw /data

# проверить fstab ДО перезагрузки (работает и без права монтировать)
findmnt --verify
findmnt --verify --verbose --tab-file ./fstab.new

# смонтировать всё из fstab и отключить
mount -a
umount /data

# loop-устройство вручную
losetup -f --show /srv/disk.img     # печатает, например, /dev/loop0
losetup -l
losetup -d /dev/loop0

Подводные камни

  • «target is busy» при umount. В каталоге кто-то работает — в том числе твоя же оболочка, если ты в нём стоишь. Выйди (cd /) и найди процессы: fuser -vm /data (пакет psmisc, в песочнице его нет) или вручную: ls -l /proc/*/cwd /proc/*/fd 2>/dev/null | grep /data. Крайний случай — umount -l.
  • Ошибка в fstab ломает загрузку. Строка с несуществующим UUID без nofail отправит систему в аварийный режим. После правки всегда запускай findmnt --verify и mount -a.
  • mount -f ничего не проверяет: он сообщит «successfully mounted» даже для несуществующего устройства и неверного типа. Для проверки fstab используй findmnt --verify.
  • Монтирование скрывает содержимое каталога. Файлы, которые лежали в /data до mount, не пропали, просто их не видно, пока ФС подключена. Так «теряются» гигабайты: du их не видит, df учитывает.
  • Точка монтирования должна существовать — mount её не создаёт (кроме -m). Каталог из fstab создай заранее.
  • Изменения не сохраняются. mount из командной строки действует до перезагрузки; чтобы ФС подключалась всегда, нужна строка в /etc/fstab.
  • /etc/mtab и mount без аргументов показывают то же, что /proc/self/mounts; findmnt выводит это понятнее и умеет фильтровать.
  • В контейнере (Docker, песочница IzzyLab) монтирование запрещено без --privileged или CAP_SYS_ADMIN, а /dev/loop* нет совсем: «cannot find an unused loop device». Содержимое образа без монтирования можно посмотреть через debugfs (см. filesystems).

См. также

filesystems · df-du · proc · dd · truncate · capabilities