人人都会AI编程

4.5 文件挂载原理:挂载点、文件系统挂载与卸载

更新时间:2026-07-12

在 Linux 的“一切皆文件”设计下,所有存储资源最终都要整合进单一的文件树才能被访问。挂载(mount) 就是将一个文件系统“附着”到目录树中某个节点上的操作。这个节点称为 挂载点(mount point),它通常是一个空目录。挂载完成后,访问该目录就等于访问那个文件系统里的内容;该目录原有的内容会被暂时“隐藏”,直到卸载文件系统后才会重新出现。

1. 挂载点:文件树的入口

挂载点只是一个普通的目录,但习惯上会使用 /mnt(临时手动挂载)或 /media(自动挂载可移动设备)下的子目录。你也可以自己在任意位置创建挂载点:

mkdir /mnt/mydisk

挂载前该目录可以是空的,也可以有文件。如果非空,挂载后原来的文件不可见,这通常不会破坏数据,但可能造成困惑,所以最好使用空目录。

2. 手动挂载与卸载

挂载基本语法

mount [选项] 设备 挂载点
  • 设备 可以是块设备文件(如 /dev/sdb1)、ISO 镜像文件(需配合 -o loop)或 UUID(通过 UUID="..." 指定)。
  • 挂载点 必须是已存在的目录。

常用实例:

# 将 /dev/sdb1 分区挂载到 /mnt/mydisk,自动检测文件系统类型
mount /dev/sdb1 /mnt/mydisk

# 明确指定文件系统类型,挂载 NTFS 移动硬盘
mount -t ntfs-3g /dev/sdc1 /mnt/win

# 以只读方式挂载,防止误写
mount -o ro /dev/sdd1 /mnt/readonly

# 挂载 ISO 镜像文件,loop 选项将文件模拟成块设备
mount -o loop ubuntu.iso /mnt/iso

# 挂载 tmpfs(内存文件系统),大小限制为 512MB
mount -t tmpfs -o size=512M tmpfs /mnt/ramdisk

卸载使用 umount(注意没有字母 n):

umount /mnt/mydisk      # 通过挂载点卸载
umount /dev/sdb1        # 或通过设备路径卸载

如果提示 target is busy,说明有进程正在使用该文件系统(比如某个 shell 的当前目录在挂载点内,或有程序打开了文件)。常用排查方法:

lsof | grep /mnt/mydisk         # 查看是哪些进程占用
fuser -m /mnt/mydisk            # 查看占用进程的 PID
fuser -km /mnt/mydisk           # 强制结束这些进程(谨慎)

确保无占用后即可正常卸载。

3. 系统挂载表 /etc/fstab

手动挂载在重启后会失效,要让系统启动时自动挂载,需将信息写入 /etc/fstab(文件系统表)。该文件每行一个条目,格式为:

设备  挂载点  文件系统类型  挂载选项  dump  fsck顺序

典型示例:

UUID=abc123-...  /data  ext4  defaults,noatime  0  2
# 注释:使用 UUID 指定设备更可靠,不会因磁盘顺序变化而混乱
  • defaults 代表常用选项(rw, suid, dev, exec, auto, nouser, async)。
  • noatime 禁止更新访问时间,可减少磁盘写入,提高性能。
  • 最后两列:0 表示不用 dump 备份,2 表示根文件系统之后检查。

配置完成后,可以先用 mount -a 测试挂载所有 fstab 中的文件系统,若有错误会立即报告,避免重启后系统进入维护模式。

4. 进阶:绑定挂载与特殊文件系统

绑定挂载(bind mount)允许将目录树的某个部分(目录甚至单个文件)映射到另一位置:

mount --bind /source/dir /target/dir

这在容器、chroot 环境和临时共享目录时非常有用。

proc、sysfs、devtmpfs 等虚拟文件系统在启动时由内核或 init 程序自动挂载,提供对内核数据结构的访问:

mount -t proc proc /proc
mount -t sysfs sys /sys
mount -t devtmpfs dev /dev

这些通常已在 fstab 中配置(类型为 proc / sysfs 等),日常管理时无需手动操作,但理解它们的存在有利于深入排查问题。

5. 查看当前挂载状态

  • mount(无参数)列出所有已挂载的文件系统。
  • df -h 显示各文件系统使用量和挂载点。
  • findmnt 以树状或列表形式更清晰地展示挂载关系。

掌握挂载与卸载是 Linux 存储管理的基本功,无论是插入 U 盘、挂载网络存储(如 NFS、SMB),还是构建容器镜像层,都离不开这一组简单而强大的操作。