Что значит «смонтировать»
Linux имеет одно дерево каталогов с корнем /. Чтобы получить доступ
к block-devices, его надо «вставить» в дерево - выбрать точку
монтирования (пустой каталог) и сказать ядру «дальше под этим путём
будет содержимое такого-то устройства».
sudo mkdir /mnt/data
sudo mount /dev/sdb1 /mnt/data # ext4 определится автоматически
sudo mount -t xfs /dev/sdb1 /mnt/data # явно указать тип
Просмотр текущих маунтов
mount # все смонтированные ФС (полный формат)
findmnt # дерево маунтов (читаемее)
findmnt / # инфа про конкретную точку
cat /proc/mounts # сырой формат, всегда актуальный
df -hT # размеры + типы ФС
Опции монтирования
Через -o или 4-я колонка в fstab. Самые важные:
| опция | что |
|---|---|
ro / rw | read-only / read-write |
noexec | запретить запуск бинарей с этой ФС (защита от malware) |
nosuid | игнорировать setuid/setgid биты (file-permissions) |
nodev | игнорировать device-nodes |
noatime | не обновлять access-time при чтении (быстрее) |
relatime | обновлять atime только если сильно устарело (default) |
sync / async | синхронные записи vs кеширование |
defaults | rw,suid,dev,exec,auto,nouser,async |
user | разрешить обычному юзеру монтировать |
Триада noexec,nosuid,nodev - стандарт для /tmp, /home,
user-mounted'ов. Сильно снижает blast-radius эскалации.
/etc/fstab - что монтировать при загрузке
Формат - одна строка на ФС, 6 полей через whitespace:
# <source> <target> <fstype> <options> <dump> <pass>
UUID=abc-123 / ext4 defaults,errors=remount-ro 0 1
UUID=def-456 /home ext4 defaults,nodev 0 2
UUID=ghi-789 none swap sw 0 0
tmpfs /tmp tmpfs defaults,nosuid,nodev,size=2G 0 0
/dev/sdb1 /mnt/data xfs noatime,nofail 0 2
Поля:
- source - UUID/LABEL/путь устройства (UUID надёжнее, имена меняются)
- target - точка монтирования
- fstype -
ext4,xfs,tmpfs,nfs,cifs,auto... - options - через запятую без пробелов
- dump - нужно ли в
dump-бэкапы (всегда0сейчас) - pass - порядок
fsckпри загрузке:0= не проверять,1= root,2= остальные
Применить изменения без ребута:
sudo mount -a # смонтировать всё что в fstab и ещё не смонтировано
sudo systemctl daemon-reload # systemd генерит .mount unit'ы из fstab
nofail - обязательно для опциональных дисков: при отсутствии не блокирует boot.
tmpfs - ФС в RAM
sudo mount -t tmpfs -o size=512M tmpfs /mnt/ramdisk
Полезно для:
/tmp(быстрее, очищается при ребуте)/run- runtime state systemd, всегда tmpfs/dev/shm- POSIX shared memory- сборок где много временных файлов (CI)
Bind mount - тот же контент в двух местах
sudo mount --bind /var/data /mnt/duplicate
Не копирование! Это второе имя для того же дерева. Применяется в:
- chroot-окружениях (пробросить
/dev,/proc) - jail'ах
- Docker volumes (
-v /host/path:/container/path) - read-only views:
mount --bind+mount -o remount,bind,ro
Размонтирование
sudo umount /mnt/data
sudo umount -l /mnt/data # lazy: открепить от дерева сейчас, освободить когда последний fd закроется
sudo umount -f /mnt/data # force (только для NFS/userspace)
# Если "device is busy"
sudo lsof +D /mnt/data # см. [[cmd-lsof]]: кто держит файлы там
sudo fuser -vm /mnt/data # альтернатива
NFS / CIFS
# NFS
sudo mount -t nfs server:/export/path /mnt/nfs
# fstab: server:/export/path /mnt/nfs nfs defaults,_netdev 0 0
# CIFS (Samba/Windows)
sudo mount -t cifs //server/share /mnt/win -o username=user,password=pass
Опция _netdev - «требует сети, монтировать после network-online».