温馨提示×

什么是linux mount原理

小樊
50
2026-10-02 09:41:51
栏目: 智能运维

Linux 的 mount(挂载)原理本质上是:把一个文件系统(file system)关联到目录树的某一个目录上,使得用户可以通过这个目录访问该文件系统中的内容。

下面从概念 → 内核机制 → 关键数据结构 → mount 过程 → 示例逐步说明。


一、基本概念

在 Linux 中:

  • 一切皆文件
  • 文件系统必须先 mount 才能被访问
  • mount 点(mount point)必须是一个已存在的目录
mount /dev/sdb1 /mnt/data

含义:

把设备 /dev/sdb1 上的文件系统,挂到 /mnt/data 目录

之后:

  • /mnt/data 不再是普通目录
  • 访问 /mnt/data/xxx 实际访问的是 /dev/sdb1 中的文件

二、为什么需要 mount?

Linux 使用 统一的目录树(VFS):

/
├── bin
├── etc
├── home
├── mnt
│   └── data   <-- mount point

不同设备 / 分区 / 网络存储:

  • ext4
  • xfs
  • tmpfs
  • NFS
  • overlayfs

都需要通过 mount 统一接入 VFS


三、核心原理:VFS(虚拟文件系统)

1. VFS 是什么?

VFS(Virtual File System) 是 Linux 内核的抽象层:

用户程序
   ↓
系统调用 (open/read/write)
   ↓
VFS
   ↓
具体文件系统 (ext4/xfs/nfs...)

VFS 不关心:

  • 磁盘格式
  • 存储介质

只提供统一接口:

  • open
  • read
  • write
  • lookup

四、mount 在内核中做了什么?

简化流程

1. 用户执行 mount()
2. 内核解析:
   - 设备 / 镜像
   - 文件系统类型
3. 调用对应文件系统的 mount 函数
4. 创建 super_block
5. 将文件系统 root 目录关联到 mount point
6. 更新 VFS 目录树

五、关键内核数据结构(面试/原理重点)

1. super_block

表示一个已挂载的文件系统

struct super_block {
    struct file_system_type *s_type;
    struct dentry *s_root;
    ...
};

2. inode

文件的元数据

  • 权限
  • 大小
  • 时间
  • 数据块位置

3. dentry(目录项)

路径解析缓存

/  ->  mnt  ->  data

4. vfsmount

表示一个 mount 实例

struct vfsmount {
    struct dentry *mnt_root;
    struct super_block *mnt_sb;
    ...
};

六、mount 的“覆盖”原理(重点)

mount 后:

  • 原目录内容被隐藏
  • 不是删除,而是被覆盖
ls /mnt/data   # 原来内容
mount /dev/sdb1 /mnt/data
ls /mnt/data   # 新文件系统内容

umount 后:

  • 原目录内容恢复

七、bind mount 和 overlay(进阶)

1. bind mount

把一个目录挂到另一个目录

mount --bind /a /b

原理:

  • 共享同一个 inode
  • VFS 层重定向

2. overlayfs(Docker 常用)

upperdir
lowerdir
merged

写时复制(COW)


八、常见 mount 类型示例

# 磁盘
mount /dev/sda1 /mnt

# 镜像
mount iso.img /mnt -o loop

# 内存
mount -t tmpfs tmpfs /mnt

# 网络
mount -t nfs server:/path /mnt

九、一句话总结

Linux mount 的本质是:通过 VFS,把具体文件系统的根目录“嫁接”到目录树的某个节点上,从而统一访问不同存储设备。

如果你愿意,我也可以:

  • 画一张 mount 原理图
  • 结合 源码(fs/namespace.c)
  • 或讲 容器中的 mount namespace

0 踩