# mount и /etc/fstab - подключение ФС _Файловая система · LinuxLab Knowledge Base_ **TL;DR:** `mount` подключает блочное устройство или ФС к точке монтирования в дереве. `/etc/fstab` - список того что монтировать при загрузке. ## Что значит «смонтировать» Linux имеет одно дерево каталогов с корнем `/`. Чтобы получить доступ к [block-devices](/kb/block-devices.md), его надо «вставить» в дерево - выбрать **точку монтирования** (пустой каталог) и сказать ядру «дальше под этим путём будет содержимое такого-то устройства». ```bash sudo mkdir /mnt/data sudo mount /dev/sdb1 /mnt/data # ext4 определится автоматически sudo mount -t xfs /dev/sdb1 /mnt/data # явно указать тип ``` ## Просмотр текущих маунтов ```bash mount # все смонтированные ФС (полный формат) findmnt # дерево маунтов (читаемее) findmnt / # инфа про конкретную точку cat /proc/mounts # сырой формат, всегда актуальный df -hT # размеры + типы ФС ``` ## Опции монтирования Через `-o` или 4-я колонка в fstab. Самые важные: | опция | что | |---|---| | `ro` / `rw` | read-only / read-write | | `noexec` | запретить запуск бинарей с этой ФС (защита от malware) | | `nosuid` | игнорировать setuid/setgid биты ([file-permissions](/kb/file-permissions.md)) | | `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: ``` # 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` = остальные Применить изменения без ребута: ```bash sudo mount -a # смонтировать всё что в fstab и ещё не смонтировано sudo systemctl daemon-reload # systemd генерит .mount unit'ы из fstab ``` `nofail` - обязательно для опциональных дисков: при отсутствии не блокирует boot. ## tmpfs - ФС в RAM ```bash sudo mount -t tmpfs -o size=512M tmpfs /mnt/ramdisk ``` Полезно для: - `/tmp` (быстрее, очищается при ребуте) - `/run` - runtime state systemd, всегда tmpfs - `/dev/shm` - POSIX shared memory - сборок где много временных файлов (CI) ## Bind mount - тот же контент в двух местах ```bash 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` ## Размонтирование ```bash 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](/kb/cmd-lsof.md): кто держит файлы там sudo fuser -vm /mnt/data # альтернатива ``` ## NFS / CIFS ```bash # 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». ## Команды ```bash findmnt ``` Дерево маунтов в читаемом виде (заменяет голый mount) ```bash sudo mount -a ``` Применить изменения в /etc/fstab без ребута ```bash sudo mount -o remount,rw / ``` Перемонтировать корень в rw без размонтирования (для recovery) ```bash sudo mount --bind /var/data /mnt/d ``` Bind mount: тот же контент в другом пути (как Docker volume) ```bash sudo umount -l /mnt/busy ``` Lazy unmount - снять с дерева сейчас, освободить позже ## См. также - [Block devices - диски в Linux](/kb/block-devices.md) - [lsblk и blkid - block-устройства и UUID](/kb/cmd-lsblk-blkid.md) - [ext4 - рабочая лошадь Linux-ФС](/kb/ext4.md) - [XFS - extents и параллельный I/O](/kb/xfs.md) - [tmpfs и overlayfs - RAM-disk и слои](/kb/tmpfs-overlayfs.md) - [NFS - сетевая файловая система](/kb/nfs.md) - [Kubernetes storage - PV, PVC, StorageClass, CSI](/kb/kubernetes-storage.md)