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
| Опция | Смысл |
|---|---|
defaults | rw,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 |
| 5 | dump | 0 почти всегда |
| 6 | pass | порядок проверки 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 / -r | JSON / пары 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