在 Debian(以及所有 Linux 系统)里,mount 的本质是“把某个存储设备/文件系统,关联到目录树的某个节点上”。下面从原理、流程、内核机制、Debian 特有点几个层次说明。
Linux 只有一个统一的目录树(/),没有 Windows 的 C: D: 盘符概念。
mount 的作用是:
把该文件系统的根目录,挂到目录树中的某个目录(挂载点)
例如:
mount /dev/sda1 /mnt
之后:
/ (根文件系统)
└── mnt ← /dev/sda1 的内容出现在这里
mount /dev/sdb1 /data
mount 命令(来自 util-linux)做几件事:
/etc/mtab 或 /proc/mountsmount(source, target, fstype, flags, data)
Linux 内核有一个核心抽象:VFS(Virtual File System)
VFS 提供统一接口:
open / read / write / statmount 时内核做:
target 目录的 dentry/inodesource 对应的设备mount 函数例如:
ext4_mount()vfat_mount()如果没指定 -t:
/etc/filesystemsblkid / 内核自动探测简化理解(真实结构更复杂):
task
↓
struct mount
├── 源设备 (super_block)
├── 挂载点 dentry
└── 子挂载树
重要点:
umount 后才重新可见/etc/fstab 自动挂载开机时:
systemd 或 mount -a/etc/fstab 挂载示例:
UUID=xxxx /data ext4 defaults 0 2
在现代 Debian(>= 8):
/etc/fstab 会被转换为 .mount unitsystemctl status data.mount好处:
cat /proc/mounts
比 /etc/mtab 更可靠(mtab 可能不同步)
| 类型 | 原理 |
|---|---|
| 块设备 | 读分区 superblock |
| loop | 把文件当块设备 |
| bind | 同一文件系统挂两次 |
| overlay | 多层合并视图 |
| tmpfs | 纯内存 |
| nfs | 网络 VFS |
Debian 的 mount 原理是:通过 VFS,把某个文件系统的根,映射到目录树的某个节点,使所有文件操作透明地落到对应文件系统上。
如果你愿意,我可以:
mount --bind / overlay 原理