在 Linux 中,**mount(挂载)**的本质是:把一个文件系统(file system)关联到目录树的某个目录上,使得用户可以通过这个目录访问该文件系统中的内容。
下面从原理 → 内核机制 → 关键概念 → 示例逐步说明。
mount 不是“把磁盘放到目录里”,而是把“文件系统的根”挂到目录树的某个节点上。
挂载前:
/ (根文件系统)
└── mnt/
挂载后(例如挂载 /dev/sdb1 到 /mnt):
/
└── mnt/ ← 现在是 /dev/sdb1 的根
此后对 /mnt 的访问,实际访问的是 /dev/sdb1 里的数据。
Linux 支持很多文件系统(ext4、xfs、ntfs、tmpfs…),但用户态看到的是统一的目录树。
核心是 VFS(Virtual File System):
用户程序
↓
系统调用 (open/read/write)
↓
VFS(统一接口)
↓
具体文件系统 (ext4 / xfs / fat ...)
↓
块设备 / 内存 / 网络
mount 的作用就是:在 VFS 中建立“目录 → 文件系统”的映射关系。
当你执行:
mount /dev/sdb1 /mnt
内核主要做几件事:
/dev/sdb1blkid / superblock 自动识别内核中关键结构:
struct super_block:文件系统实例struct mount:一次挂载关系struct dentry:目录项struct inode:文件元数据/mnt 的 dentry 被“覆盖”/mnt → 实际走到新文件系统的 root dentrymount /dev/sdb1 /mnt
/mnt 是目录/mnt/
a.txt ← 原来就有
mount 后访问 /mnt → 看不到 a.txt
卸载后恢复。
mount /dev/sdb1 /mnt
mount /dev/sdb2 /mnt/data
启动流程:
initramfs
↓
mount rootfs
↓
switch_root
/ 本身也是某个设备的文件系统。
mount /dev/sdb1 /mnt
mount -t tmpfs tmpfs /tmp
mount -t proc proc /proc
mount -t sysfs sysfs /sys
这些没有真实磁盘。
mount --bind /home /mnt
同一个目录树,挂到另一个地方
mount -t nfs server:/data /mnt
umount /mnt
内核:
如果设备忙:
device is busy
说明还有进程在使用。
Linux 的 mount 本质是在 VFS 中建立“目录节点 → 文件系统实例”的映射,让用户通过统一目录树访问不同存储系统。
如果你愿意,我也可以: