mount/umount 是 Linux 存储管理的基石:一切皆文件,而一切设备、镜像、网络共享都通过"挂载"接入这棵文件树。本文基于 util-linux 2.39.3,覆盖 mount/umount 的全部用法、挂载选项速查、fstab 完全指南与真实应用场景,所有示例输出均采集自真实环境。
目录
挂载是什么:VFS 与挂载原理
安装、版本与帮助
mount 命令语法总览
mount 全部选项详解
-o 通用挂载选项完全手册
各文件系统专属选项(ext4/xfs/btrfs/vfat/ntfs/nfs/cifs/tmpfs/overlay/iso9660)
查看挂载状态:mount / findmnt / lsblk / df / /proc/mounts
umount 命令与选项详解
/etc/fstab 完全指南
十二大实战应用场景
安全加固:nosuid / nodev / noexec
常见问题与排错
一页速查表(Cheat Sheet)
1. 挂载是什么:VFS 与挂载原理
1.1 核心概念
Linux 用一棵单一的目录树组织所有文件。磁盘分区、U 盘、ISO 镜像、NFS 共享、内存文件系统……都必须挂载(mount)到目录树上的某个目录(称为挂载点),才能被访问。
挂载前:挂载点目录里原有的内容依然存在,只是被"遮住"了。
挂载后:访问该目录 = 访问新设备的文件系统。
卸载后:原目录内容重新可见。
这一层抽象由内核的 VFS(Virtual File System,虚拟文件系统) 提供,对上统一接口(open/read/write),对下分发到 ext4、xfs、nfs、tmpfs 等具体驱动。
1.2 一次挂载的生命周期
设备/镜像/共享 ──► mount ──► 挂载点(目录树分支)──► 读写 ──► umount ──► 断开
│ │
└─ /dev/sdb1 └─ 必须已存在(空目录最佳)
1.3 三条铁律
挂载点目录必须已存在(mkdir -p 先行),且强烈建议为空目录——非空目录挂载后原内容被遮蔽,容易造成"文件消失"的错觉。
卸载前确保无人使用:任何进程打开的文件、占用的 cwd 都会让 umount 报 target is busy。
关机前 sync:异步写默认开启,数据可能在缓存里,直接拔盘 = 数据丢失。
2. 安装、版本与帮助
mount/umount 属于 util-linux 包,所有发行版预装:
$ mount --version
mount,来自 util-linux 2.39.3(libmount 2.39.3: selinux, smack, btrfs, verity, namespaces, idmapping, statx, assert, debug)
内核支持的文件系统:cat /proc/filesystems(带 nodev 前缀的是虚拟文件系统,无需块设备)。
用户态工具:mkfs.*、mount.* 助手(如 mount.nfs、mount.cifs 由 nfs-common / cifs-utils 提供),缺什么装什么:
apt install nfs-common cifs-utils ntfs-3g sshfs exfatprogs # Debian/Ubuntu
yum install nfs-utils cifs-utils ntfs-3g sshfs # RHEL 系
3. mount 命令语法总览
mount [选项] <设备> <挂载点> # 经典形式
mount <挂载点> # 配合 /etc/fstab 简写
mount <设备>
mount -a # 挂载 fstab 中所有 auto 项
设备可以有多种写法,mount 会自动识别:
mount /dev/sdb1 /mnt/data # 设备路径
mount UUID=7EED-02AD /mnt/efi # 按 UUID
mount LABEL=backup /mnt/backup # 按卷标
mount -t nfs 192.168.1.10:/share /mnt/nfs # 网络文件系统
mount -o loop disk.iso /mnt/iso # 文件镜像
推荐用 UUID:设备名 /dev/sdb1 会随插拔顺序漂移(重启后可能变 sdc1),UUID 绑定的是文件系统本身,永远稳定。查 UUID:blkid 或 lsblk -f。
4. mount 全部选项详解
4.1 常用选项速查
选项
长选项
作用
-t
--types
指定文件系统类型(ext4/xfs/nfs/vfat/ntfs/tmpfs…)。通常可省略,mount 自动探测;探测失败时才需要
-o
--options
挂载选项列表,逗号分隔(下一章详解,本文核心)
-a
--all
挂载 /etc/fstab 中所有未挂载的 auto 项。改完 fstab 先 mount -a 验证再重启
-r
--read-only
只读挂载,等价 -o ro
-w
--rw
读写挂载(默认),等价 -o rw
-n
--no-mtab
挂载但不写入 /etc/mtab(救援环境 mtab 不可写时用)
-B
--bind
绑定挂载:把一个目录挂到另一个位置
-R
--rbind
递归绑定挂载(含子挂载)
-M
--move
移动挂载点到新位置(不停业务搬家)
-L
--label
按卷标挂载
-U
--uuid
按 UUID 挂载
-T
--fstab
指定替代的 fstab 文件
-f
--fake
演练:走完流程但不真正调用 mount(2)(配合 -n 调试用)
-v
--verbose
啰嗦模式,显示执行细节
-F
--fork
配合 -a 并行挂载(NFS 多时加速开机)
-s
容忍 sloppy 选项(忽略不识别的挂载选项而不是报错)
-i
不调用 /sbin/mount.* 助手程序
-l
--show-labels
输出中显示卷标
-c
--no-canonicalize
不规范化路径(某些自动化场景)
--mkdir
挂载点不存在时自动创建(util-linux 2.39+,免去手动 mkdir)
--target-prefix
给 fstab 中所有相对挂载点加前缀(chroot 友好)
--options-source
挂载选项来源:fstab / mtab / disable
--options-mode
选项合并模式:ignore / append / prepend / replace
-N
--namespace
在指定的挂载命名空间中执行 mount
-X
--list-propagated
列出传播类型(shared/slave/private)
4.2 三种"组织型"挂载
这三个是现代运维高频操作,单独强调:
mount --bind /data/www /var/www # 目录"分身":同一内容两个入口
mount --rbind /data/www /var/www # 连子挂载一起分身(chroot/容器必备)
mount --move /mnt/old /mnt/new # 搬家:把已挂载的内容平移到新挂载点,业务无感知
5. -o 通用挂载选项完全手册
-o 后接逗号分隔的选项,是所有文件系统通用的部分(专属选项见第 6 章)。
5.1 读写与数据一致性
选项
作用
场景
rw
读写(默认)
常规
ro
只读
取证、救援、防止误改、ISO/备份盘
sync
所有写操作同步落盘
U 盘防丢数据(速度慢);与 async 互斥
async
异步写(默认)
性能优先
dirsync
目录操作同步
高可靠元数据
flush(vfat 系)
更积极刷缓存
FAT U 盘常用
5.2 安全三兄弟(生产环境重点)
选项
作用
nosuid
忽略 suid/sgid 位——挂载盘上的 setuid 程序无法提权
nodev
不解析设备文件——挂载盘上的 /dev/sda 式文件失效
noexec
禁止执行任何程序/脚本——数据盘、上传目录标配
mount -o nosuid,nodev,noexec /dev/sdc1 /mnt/usb
/tmp、/var/tmp、/home、可移动介质都应考虑这组选项(详见第 11 章)。
5.3 访问时间(性能优化)
每次读文件都更新 atime(访问时间)会产生大量额外写操作,SSD 和数据库服务器上很浪费:
选项
行为
relatime
默认。仅当 atime 早于 mtime/ctime 或超过 24 小时才更新——兼顾兼容与性能
noatime
完全不更新 atime(含目录),性能最佳
nodiratime
只免目录 atime
strictatime
每次都更新(老 POSIX 行为)
# 数据库/高负载盘推荐
mount -o noatime /dev/nvme0n2p1 /var/lib/mysql
5.4 权限与属主
选项
作用
user
允许普通用户挂载该设备(需配合 fstab)
nouser
仅 root 可挂载(默认)
users
任何用户可挂载,且任何用户可卸载
owner
设备的属主用户可挂载
group
属组用户可挂载
uid= gid=
挂载后文件属主(vfat/ntfs/iso9660 等无权限概念的 FS 必用)
umask= fmask= dmask=
挂载后文件权限掩码(vfat/ntfs/exfat)
mode=
tmpfs/ramfs/devpts 的目录权限
# NTFS 移动硬盘挂给普通用户(uid 1000),权限 755/644
mount -t ntfs-3g -o uid=1000,gid=1000,umask=022 /dev/sdb1 /mnt/ntfs
5.5 行为控制
选项
作用
auto / noauto
是否被 mount -a 与开机自动挂载
defaults
= rw,suid,dev,exec,auto,nouser,async,fstab 里的万金油
remount
在线修改已挂载文件系统的选项,无需卸载(见场景八)
loop
通过 loop 设备挂载文件镜像(ISO/img)
_netdev
标记为网络设备:系统等网络就绪后才挂载(NFS/CIFS/iSCSI 的 fstab 必加)
nofail
挂载失败不阻断开机流程(外挂盘、U 盘的 fstab 强烈建议加)
x-systemd.automount
systemd 按需自动挂载(首次访问才触发)
x-systemd.idle-timeout=60
自动卸载空闲超时
x-systemd.device-timeout=10s
设备等待超时(配合 nofail 防开机卡死)
x-systemd.requires=...
挂载依赖的 systemd unit
comment= / x-*
注释性选项,systemd/工具可读,内核忽略
5.6 传播与命名空间(容器/高级)
选项
作用
shared
挂载事件双向传播到对等组
slave
只接收主方向的传播
private
不传播(默认,容器隔离靠它)
unbindable
禁止被 bind
mount --make-rprivate / # Docker 启动时做的隔离动作
mount --make-rshared /mnt/shared # 多容器共享挂载事件的场景
6. 各文件系统专属选项
6.1 ext4 / ext3 / ext2
选项
作用
data=ordered(默认)/ data=writeback / data=journal
日志模式:均衡 / 最快 / 最强一致性
commit=5
元数据落盘间隔(秒)
errors=remount-ro(默认)/ continue / panic
出错时的行为
barrier=1/0
写屏障(断电保护,关它提速但掉电风险)
discard / nodiscard
在线 TRIM(SSD)。多数场景建议用定期 fstrim 而非在线 discard
inode_readahead_blks=
预读调优
6.2 XFS
选项
作用
inode64
允许 inode 跨 >1TB 位置(大盘必加)
largeio / nolargeio
大 IO 优化
allocsize=
预分配大小
logbufs= logbsize=
日志缓冲
noquota / uquota / gquota / pquota
配额
nouuid
挂载克隆盘(UUID 冲突时,如 LVM 快照/XFS 复制)
6.3 Btrfs
选项
作用
subvol=@home
挂载指定子卷
compress=zstd:3 / compress=lzo
透明压缩(zstd 是当下的最优解)
ssd / nossd
SSD 优化开关
autodefrag
在线碎片整理(随机写重的数据库不建议)
space_cache=v2
空间缓存版本
degraded
降级挂载缺失盘的 RAID 阵列(救数据用)
6.4 vfat / exfat / NTFS(U 盘、移动硬盘、双系统)
选项
作用
uid= gid= umask= fmask= dmask=
模拟权限(这些 FS 本身没有 Linux 权限位)
iocharset=utf8
文件名编码
shortname=mixed
短文件名处理
flush
积极刷盘(vfat)
windows_names(ntfs-3g)
拒绝 Windows 非法文件名
big_writes(ntfs-3g)
大块写提速
remove_hiberfile(ntfs-3g)
允许挂载休眠状态的 Windows 分区(有数据风险,优先正常关机或 powercfg /h off)
知识点:Windows 快速启动/休眠会锁住 NTFS,Linux 挂载时报 "hibernated" / "unclean shutdown"。解法:Windows 里 powercfg /h off 或完整重启,Linux 侧只读挂载救数据。
6.5 NFS
mount -t nfs -o vers=4.2,hard,intr,rsize=1048576,wsize=1048576 192.168.1.10:/data /mnt/nfs
选项
作用
vers=3/4/4.1/4.2
协议版本(4.x 推荐,穿越防火墙只需 2049)
hard / soft
服务器无响应时无限重试 / 报错返回。hard+intr 是生产常用组合,soft 可能造成静默数据损坏
intr / nointr
允许信号中断挂起的调用
rsize= wsize=
读写块大小,现代网络给 1048576(1M)
timeo= retrans=
超时与重传次数
bg
挂载失败转后台重试(fstab 防卡开机)
nolock
关闭锁(老服务器兼容)
sec=sys/krb5
认证方式
noacl
关 ACL 支持(兼容性)
6.6 CIFS/SMB(Windows 共享、NAS)
mount -t cifs //192.168.1.20/share /mnt/smb \
-o username=guest,password=,vers=3.0,iocharset=utf8,uid=1000,gid=1000,file_mode=0644,dir_mode=0755,nofail,_netdev
选项
作用
username= password= / credentials=/root/.smbcred
认证。密码别写命令行(会进 history 和 /proc),用 credentials 文件并 chmod 600
vers=2.0/2.1/3.0/3.1.1
SMB 协议版本(现代 NAS 用 3.1.1;老设备可能要 2.0)
uid/gid/file_mode/dir_mode
映射到 Linux 的属主与权限
iocharset=utf8
中文文件名不乱码
noperm
客户端不检查权限
mfsymlinks
支持符号链接
cache=strict/none/loose
缓存模式
seal
强制加密(SMB3)
6.7 tmpfs / ramfs(内存文件系统)
mount -t tmpfs -o size=2G,mode=1777,nosuid,nodev,noexec tmpfs /dev/shm-work
选项
作用
size=
容量上限(默认物理内存一半),支持 K/M/G 与百分比
nr_inodes=
inode 上限
mode= uid= gid=
根目录权限与属主
mpol=
NUMA 内存策略
tmpfs vs ramfs:tmpfs 可换出到 swap、有容量上限;ramfs 不可换出、无上限(写爆会 OOM)。生产几乎只用 tmpfs。
6.8 overlayfs(Docker 同款联合文件系统)
mount -t overlay overlay \
-o lowerdir=/lower1:/lower2,upperdir=/upper,workdir=/work /merged
四层含义:lowerdir 只读层(可多个,冒号分隔,左新右旧);upperdir 可写层;workdir 工作目录(需空且与 upper 同盘);merged 呈现层。手动挂载 overlay 是理解容器镜像分层的最佳实践,也是现场改容器文件不动镜像的救急手段。
6.9 iso9660 / udf(光盘镜像)
mount -o loop,ro -t iso9660 ubuntu.iso /mnt/iso # 标准 ISO
mount -o loop -t udf bluray.iso /mnt/iso # 大文件蓝光盘镜像
6.10 sshfs(FUSE,免服务端配置的网络盘)
sshfs user@192.168.1.30:/home/user /mnt/remote -o reconnect,ServerAliveInterval=15
umount /mnt/remote # FUSE 也可用 fusermount -u /mnt/remote
7. 查看挂载状态
7.1 mount 无参数:原始全量列表
$ mount | head -5
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=14722688k,nr_inodes=3680672,mode=755,inode64)
/dev/nvme0n1p6 on / type ext4 (rw,relatime)
tmpfs on /run type tmpfs (rw,nosuid,nodev,noexec,relatime,size=3258752k,mode=755,inode64)
格式:源 on 挂载点 type 类型 (选项)。配合 grep 过滤:mount | grep /dev/sd。
7.2 findmnt:树状视图(推荐首选)
$ findmnt
TARGET SOURCE FSTYPE OPTIONS
/ /dev/nvme0n1p6 ext4 rw,relatime
├─/sys sysfs sysfs rw,nosuid,nodev,noexec,relatime
│ ├─/sys/fs/cgroup cgroup2 cgroup2 rw,nosuid,nodev,noexec,relatime,...
│ └─/sys/kernel/debug debugfs debugfs rw,nosuid,nodev,noexec,relatime
├─/proc proc proc rw,nosuid,nodev,noexec,relatime
├─/dev udev devtmpfs rw,nosuid,relatime,...
│ ├─/dev/pts devpts devpts rw,nosuid,noexec,relatime,gid=5,...
│ └─/dev/shm tmpfs tmpfs rw,nosuid,nodev,inode64
└─/boot/efi /dev/nvme0n1p1 vfat rw,relatime,...
findmnt 的杀手锏用法:
findmnt /mnt/data # 查单个挂载点详情
findmnt -S /dev/sdb1 # 反查:这个设备挂哪了
findmnt -T /some/file # 某文件实际落在哪个挂载点(穿透多层嵌套)
findmnt -t nfs,cifs # 只看网络挂载
findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS,AVAIL,USE% # 自选列
findmnt --fstab --verify # 校验 fstab 配置是否正确(强烈建议)
findmnt -R /mnt # 递归列出子挂载
7.3 lsblk:块设备视角
$ lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,UUID
NAME SIZE TYPE FSTYPE MOUNTPOINT UUID
loop0 4K loop squashfs /snap/bare/5
loop6 257.7M loop squashfs /snap/firefox/8736
nvme0n1 476.9G disk
├─nvme0n1p1 1.4G part vfat /boot/efi 7EED-02AD
└─nvme0n1p6 492G part ext4 / e0bbf986-...
lsblk 回答"盘在哪、多大、挂没挂";findmnt 回答"挂载关系什么样"。两者互补。
7.4 df:容量视角
$ df -hT
文件系统 类型 大小 已用 可用 已用% 挂载点
/dev/nvme0n1p6 ext4 492G 63G 404G 14% /
tmpfs tmpfs 16G 0 16G 0% /dev/shm
/dev/nvme0n1p1 vfat 1.4G 36M 1.4G 3% /boot/efi
overlay overlay 492G 63G 404G 14% /var/lib/docker/overlay2/.../merged
7.5 /proc/mounts 与 /etc/mtab
/proc/mounts:内核视角的权威挂载表。
/etc/mtab:现代系统是指向 /proc/mounts 的符号链接(个别老系统是普通文件,可能滞后)。
/proc/self/mountinfo:带挂载 ID、父子关系、传播类型,脚本解析用它。
8. umount 命令与选项详解
8.1 语法
umount <挂载点> # 最常用:按挂载点卸载
umount <设备> # 也可按设备卸载
umount -a # 卸载所有(/proc /sys /dev 等关键 FS 会自动跳过)
8.2 选项速查
选项
长选项
作用
-l
--lazy
惰性卸载:立即从目录树摘除,等没人用时再真正清理。NFS 服务器挂了、删不掉的挂载点救星
-f
--force
强制卸载(主要对 NFS 不可达有意义;对本地文件系统基本无效)
-R
--recursive
连同子挂载一起卸载
-a
--all
卸载所有
-t
--types
只卸载指定类型,如 umount -at nfs
-O
--test-opts
按挂载选项过滤卸载(fstab 里的选项)
-d
--detach-loop
同时释放关联的 loop 设备(umount -d /mnt/iso)
-n
--no-mtab
不写 mtab
-i
不调用 /sbin/umount.* 助手
-q
--quiet
安静模式
-v
--verbose
啰嗦模式
-N
--namespace
在指定挂载命名空间卸载
-A
--all-targets
卸载同一设备在当前命名空间的所有挂载点
-c
--no-canonicalize
不规范化路径
--fake
演练
8.3 卸载顺序与注意事项
# 嵌套挂载要从里往外卸(或 -R 一把梭)
umount /mnt/data/sub
umount /mnt/data
# 等价于
umount -R /mnt/data
卸载前 sync 一下是好习惯(尤其对 sync 选项的 U 盘)。
卸载 U 盘后再物理拔出;udisksctl unmount -b /dev/sdb1 + udisksctl power-off -b /dev/sdb 是桌面发行版的更安全姿势。
9. /etc/fstab 完全指南
fstab(File System Table)定义开机自动挂载与固定挂载配置,每行六字段:
# <设备> <挂载点> <类型> <选项>
UUID=e0bbf986-... / ext4 defaults 0 1
UUID=7EED-02AD /boot/efi vfat defaults 0 1
/swap.img none swap sw 0 0
9.1 六字段详解
#
字段
说明
1
设备
推荐 UUID=xxx(blkid 查),也可用 /dev/sdXN、LABEL=、NFS/CIFS 地址
2
挂载点
目录必须存在
3
文件系统类型
ext4/xfs/vfat/ntfs/nfs/cifs/swap/tmpfs…
4
挂载选项
同 -o,逗号分隔无空格
5
dump
老 dump 备份工具用,现代一律 0
6
pass
fsck 检查顺序:/ 为 1,其他本地盘 2,网络盘/U盘 0(不检查)
9.2 常见 fstab 配方
# 数据盘(本地 ext4,出错不阻断开机)
UUID=xxxx /data ext4 defaults,noatime,nofail 0 2
# NFS(等网络、失败不卡机、按需自动挂载)
192.168.1.10:/share /mnt/nfs nfs vers=4.2,hard,intr,_netdev,nofail,x-systemd.automount,x-systemd.idle-timeout=300 0 0
# Windows 共享(密码用 credentials 文件)
//192.168.1.20/media /mnt/media cifs credentials=/root/.smbcred,vers=3.0,iocharset=utf8,uid=1000,gid=1000,_netdev,nofail 0 0
# NTFS 移动硬盘(热插拔场景:不自动挂、允许普通用户挂)
UUID=AAAA /mnt/ntfs ntfs-3g noauto,user,uid=1000,gid=1000,umask=022,nofail,x-systemd.device-timeout=5s 0 0
# tmpfs 内存盘
tmpfs /mnt/ramdisk tmpfs size=4G,mode=1777,nosuid,nodev 0 0
9.3 改完 fstab 的验证三部曲(救命习惯)
findmnt --verify --fstab # 1. 静态校验语法与可达性
mount -a # 2. 立即生效未挂载项(验证能挂上)
systemctl daemon-reload # 3. 有 systemd 扩展选项时重载
经典事故:fstab 写错 → 重启进 emergency mode。有了 nofail + 上面三部曲,此类事故可杜绝。
10. 十二大实战应用场景
场景一:新硬盘从零到可用(完整流程)
lsblk # 1. 认出是新盘 /dev/sdb
fdisk /dev/sdb # 2. 分区(或 parted/gdisk,>2T 用 GPT)
/sbin/mkfs.ext4 /dev/sdb1 # 3. 格式化
blkid /dev/sdb1 # 4. 拿 UUID
mkdir -p /data # 5. 建挂载点
echo 'UUID=xxxx /data ext4 defaults,noatime,nofail 0 2' >> /etc/fstab
findmnt --verify --fstab && mount -a # 6. 校验 + 生效
df -hT /data # 7. 确认
场景二:挂载 U 盘 / NTFS 移动硬盘
lsblk -f # 认出 /dev/sdb1,FSTYPE 是 ntfs 还是 exfat
mkdir -p /mnt/usb
# NTFS:
mount -t ntfs-3g -o uid=1000,gid=1000,umask=022 /dev/sdb1 /mnt/usb
# exFAT:
mount -t exfat -o uid=1000,gid=1000 /dev/sdb1 /mnt/usb
# 用完:
sync && umount /mnt/usb
场景三:挂载 ISO 镜像(loop 设备)
mkdir -p /mnt/iso
mount -o loop,ro ubuntu-24.04.iso /mnt/iso
ls /mnt/iso
umount /mnt/iso # 或 umount -d 顺带释放 loop 设备
loop 不仅挂 ISO,还能挂磁盘镜像文件——自建虚拟盘的真实输出:
$ dd if=/dev/zero of=disk.img bs=1M count=32
$ /sbin/mkfs.ext4 -q disk.img
$ mount -o loop disk.img /tmp/mtdemo/loop
$ df -hT /tmp/mtdemo/loop
文件系统 类型 大小 已用 可用 已用% 挂载点
/dev/loop19 ext4 26M 24K 24M 1% /tmp/mtdemo/loop
$ echo demo-data > /tmp/mtdemo/loop/test.txt
$ ls /tmp/mtdemo/loop
lost+found test.txt
应用场景:测试文件系统行为、制作烧录镜像、取证分析 dd 出来的磁盘镜像。
场景四:tmpfs 内存盘加速(编译/临时文件/压测)
真实输出:
$ mkdir -p /tmp/mtdemo/tmpfs
$ mount -t tmpfs -o size=64M tmpfs /tmp/mtdemo/tmpfs
$ df -hT /tmp/mtdemo/tmpfs
文件系统 类型 大小 已用 可用 已用% 挂载点
tmpfs tmpfs 64M 0 64M 0% /tmp/mtdemo/tmpfs
应用:把编译目录(make -j 的中间 .o)、数据库临时表空间、压测数据集放内存盘,速度数倍于 SSD。注意:重启即失、容量受内存约束。
场景五:bind 挂载——目录分身术
真实输出:
$ echo hello > /tmp/mtdemo/bind_src/file.txt
$ mkdir -p /tmp/mtdemo/bind_dst
$ mount --bind /tmp/mtdemo/bind_src /tmp/mtdemo/bind_dst
$ ls /tmp/mtdemo/bind_dst
file.txt
两边看到的是同一份内容,改任何一边都实时同步。三大经典用途:
扩容不动配置:/var/lib/mysql 满了?新盘挂 /data,mount --bind /data/mysql /var/lib/mysql,应用配置零改动。
chroot / 容器补环境(见场景十一)。
给服务开一个"只读窗口":mount --bind /data /srv/readonly && mount -o remount,ro,bind /srv/readonly(注意:bind 挂载改选项必须 remount 一次)。
场景六:挂载 NFS 网络共享
apt install nfs-common # 客户端工具
showmount -e 192.168.1.10 # 看看服务器导出了啥
mkdir -p /mnt/nfs
mount -t nfs -o vers=4.2,hard,intr 192.168.1.10:/share /mnt/nfs
df -hT /mnt/nfs
排障口诀:不通先看 showmount -e,挂载卡住加 -v 看细节,fstab 记得 _netdev,nofail。
场景七:挂载 Windows 共享 / NAS(CIFS)
apt install cifs-utils
printf 'username=guanjia\npassword=xxx\ndomain=WORKGROUP\n' > /root/.smbcred
chmod 600 /root/.smbcred
mkdir -p /mnt/nas
mount -t cifs //192.168.1.20/public /mnt/nas \
-o credentials=/root/.smbcred,vers=3.0,iocharset=utf8,uid=1000,gid=1000,_netdev
场景八:remount 在线改挂载选项(根分区救急)
真实输出:
$ mount -o remount,ro /tmp/mtdemo/loop
$ findmnt /tmp/mtdemo/loop -o TARGET,SOURCE,FSTYPE,OPTIONS
TARGET SOURCE FSTYPE OPTIONS
/tmp/mtdemo/loop /dev/loop19 ext4 ro,relatime
$ touch /tmp/mtdemo/loop/x
touch: 无法 touch '/tmp/mtdemo/loop/x': 只读文件系统
$ mount -o remount,rw /tmp/mtdemo/loop # 改回读写
救命场景:系统日志狂报 ext4 错误、根分区被内核自动 remount 成只读。排查修复后不用重启:
mount -o remount,rw /
同样适合在线加 noexec、改 atime 策略、临时把 /tmp 锁成只读做安全响应。
场景九:"target is busy" 卸载不掉怎么办
$ umount /mnt/data
umount: /mnt/data: target is busy.
排查三板斧:
# 1. 谁在用(进程级)
fuser -mv /mnt/data
# 输出会列出 PID 与进程名;fuser -km /mnt/data 直接全杀掉(谨慎!)
# 2. 哪些文件被打开
lsof +D /mnt/data
# 或 lsof /mnt/data
# 3. 别忘了:自己 shell 的 cwd 就在里面也算占用!
cd / && umount /mnt/data
处理策略:
# 温柔:让占用者退出后再卸
kill
# 无解(NFS 服务器挂了、进程杀不干净):惰性卸载
umount -l /mnt/data
# 挂载点立即消失,内核等引用归零后自动清理——事后务必核实,别当万能药
# 连带子挂载一起卸
umount -R /mnt/data
场景十:mount --move 不停机搬家
把 /mnt/old 上挂着的盘平移到 /mnt/new,打开的文件描述符、运行中的服务全部无感知:
mkdir -p /mnt/new
mount --move /mnt/old /mnt/new
findmnt /mnt/new
场景十一:chroot / 系统救援挂载(换 root 前的标准四连)
装系统失败要进 live USB 修、或手工 chroot 排障:
mount /dev/nvme0n1p6 /mnt # 1. 根分区
mount /dev/nvme0n1p1 /mnt/boot/efi # 2. EFI 分区(如需要)
mount --rbind /dev /mnt/dev # 3. 设备树(rbind 带子挂载)
mount --rbind /sys /mnt/sys # 4. 内核接口
mount -t proc proc /mnt/proc
mount --rbind /run /mnt/run # 5. 解析 DNS 等运行时
chroot /mnt /bin/bash
# 修复 grub、改密码、重装内核……完事后
exit
umount -R /mnt # 一把全卸
场景十二:看透 Docker——overlay 挂载
df -hT 里那一排 overlay 就是容器的联合挂载:
overlay overlay 492G 63G 404G 14% /var/lib/docker/overlay2/91d0.../merged
进容器卡死或容器起不来时,可以直接在宿主机看/改容器文件:
findmnt -t overlay | head # 列出所有容器挂载
docker inspect <容器> | grep -i mergeddir # 找到对应 merged 目录
ls
11. 安全加固:nosuid / nodev / noexec
最小权限原则在挂载层的落地:
挂载点
建议选项
理由
/tmp、/var/tmp
nosuid,nodev,noexec
公开可写目录是提权与恶意程序落点重灾区
/dev/shm
nosuid,nodev,noexec
同上(注意:个别程序如某些 JVM/浏览器需要 exec,评估后决定)
/home
nosuid,nodev
防用户自放 setuid 提权程序(noexec 会影响编译型工作流,按需)
数据盘 / 上传目录
nosuid,nodev,noexec
纯数据用途,没有任何执行理由
可移动介质
nosuid,nodev,noexec
外来盘默认不信任
根文件系统 df 输出印证:本机 tmpfs 全部默认带 nosuid,nodev,noexec:
tmpfs on /run type tmpfs (rw,nosuid,nodev,noexec,relatime,size=3258752k,mode=755,inode64)
12. 常见问题与排错
Q1:mount: /mnt/xxx: must be superuser to use mount?
挂载是特权操作,加 sudo。想放开给普通用户:fstab 里写 user 选项,之后 mount /mnt/xxx(不带 sudo)即可。
Q2:wrong fs type, bad option, bad superblock...?
按序排查:① -t 类型写错或不识别(vfat 写成 fat);② 对应工具没装(ntfs 要 ntfs-3g、exfat 要 exfatprogs);③ 文件系统损坏 → fsck /dev/sdb1;④ 盘根本不是你想的那个 → lsblk -f、blkid 核对。
Q3:挂载后发现"目录里的文件不见了"?
文件没丢,被新挂载遮蔽了。umount 后就回来。教训:永远挂空目录。
Q4:为什么重启后挂载没了?
mount 是运行时操作,不持久。要开机自动挂必须写 /etc/fstab(或 systemd .mount unit)。
Q5:fstab 里写 /dev/sdb1 靠谱吗?
不靠谱。多块盘时内核枚举顺序可能变。用 blkid 拿 UUID 写 UUID=xxxx。
Q6:NFS 挂载点整个卡死,ls 都 hang 住?
服务器不可达 + hard 挂载的典型症状。处理:umount -l /mnt/nfs 先摘下来,恢复服务器,之后 fstab 用 soft,timeo=,retrans= 或 x-systemd.automount 降低影响面。
Q7:mount: unknown filesystem type 'ntfs'?
装 ntfs-3g,并且挂载类型写 ntfs-3g(或新版 ntfs3 内核驱动,用 -t ntfs3)。
Q8:umount 报 busy 但 fuser/lsof 啥都查不到?
隐藏占用源:① 某个进程的 cwd 在里面(lsof +D 能查);② 上面有子挂载(findmnt -R /mnt/data 检查,先卸子挂载或 umount -R);③ NFS/内核线程引用;④ swapfile 在该挂载上(swapoff)。实在没招:umount -l。
Q9:想挂载 Windows 休眠分区报错?
见 6.4:Windows 快速启动把 NTFS 标记为休眠态。Windows 侧关快速启动/完整重启,或 Linux 侧只读挂载。
Q10:容器里 mount 报 Operation not permitted?
容器默认无 CAP_SYS_ADMIN。要么 --privileged(重权限,慎用),要么 --cap-add SYS_ADMIN + 适当 seccomp/apparmor 放行,或用 volume/bind 在宿主机侧完成挂载。
13. 一页速查表(Cheat Sheet)
# ---------- 查看 ----------
findmnt # 树状挂载全景(首选)
findmnt /mnt/data # 单点详情;findmnt -T <文件> 穿透查归属
lsblk -f # 块设备 + 文件系统 + UUID
df -hT # 容量视角
mount | grep sdb # 原始列表过滤
blkid # 查 UUID/LABEL
cat /proc/filesystems # 内核支持的 FS 类型
# ---------- 挂载 ----------
mount /dev/sdb1 /mnt/data # 基本
mount UUID=xxxx /mnt/data # 按 UUID
mount -t ext4 -o noatime /dev/sdb1 /mnt/data # 指定类型+选项
mount -o loop,ro image.iso /mnt/iso # ISO/镜像
mount -t tmpfs -o size=2G tmpfs /mnt/ram # 内存盘
mount --bind /src /dst # 目录分身
mount --rbind /src /dst # 递归分身(chroot/容器)
mount --move /old /new # 挂载点搬家
mount -o remount,ro /data # 在线改只读
mount -o remount,rw / # 根分区只读救急
mount -a # fstab 全量生效
mount -t nfs -o vers=4.2,hard,intr S:/share /mnt/nfs # NFS
mount -t cifs //S/share /mnt/smb -o credentials=/root/.smbcred,vers=3.0 # SMB
sshfs u@host:/dir /mnt/remote # sshfs
# ---------- 卸载 ----------
umount /mnt/data # 按挂载点
umount /dev/sdb1 # 按设备
umount -l /mnt/data # 惰性卸载(busy 无解时)
umount -R /mnt/data # 连子挂载一起卸
umount -at nfs # 卸载全部 NFS
fuser -mv /mnt/data # 谁在用
lsof +D /mnt/data # 打开的文件
sync # 落盘后拔盘
# ---------- fstab 维护 ----------
findmnt --verify --fstab # 校验配置
mount -a && df -hT # 生效并确认
systemctl daemon-reload # 含 x-systemd.* 选项时
# ---------- 安全加固 ----------
mount -o remount,nosuid,nodev,noexec /tmp
参考资料
man 8 mount、man 8 umount、man 5 fstab、man 8 findmnt、man 8 lsblk
内核文档:Documentation/filesystems/(overlayfs、btrfs、tmpfs 等)
util-linux 源码:https://github.com/util-linux/util-linux
本文示例输出采集自真实 Ubuntu 24.04(内核 6.x,util-linux 2.39.3)环境。