Linux 特殊文件系统
1. ramfs
作用:最原始的内存文件系统,所有数据都常驻内存,没有 swap-out 机制。
特点:
占用的内存不可回收,可能撑爆内存。
简单,适合测试或教学。
内核代码位置:
fs/ramfs/
典型用法:很少直接用,更常见的是被
tmpfs
替代。
2. tmpfs
作用:改进版内存文件系统,支持内存与 swap 的动态回收。
特点:
挂载点常见
/dev/shm
、/run
、临时目录。可以限制大小(
mount -t tmpfs -o size=64M tmpfs /mnt
)。
内核代码位置:
mm/shmem.c
典型用法:
/tmp
、/dev/shm
、systemd
的/run
。
3. devtmpfs
作用:内核维护的设备节点文件系统,自动为设备生成
/dev/*
。特点:
如果
CONFIG_DEVTMPFS_MOUNT=y
,内核启动时自动挂载/dev
。节省用户空间 init 脚本手动
mknod
的繁琐。
内核代码位置:
drivers/base/devtmpfs.c
典型用法:现代系统
/dev
的基础,udev/systemd 再补充管理权限与符号链接。
4. procfs
作用:进程信息和内核参数的虚拟文件系统。
特点:
/proc/<pid>/
目录:进程状态、映射、文件句柄等。/proc/sys/
下的sysctl
接口:可运行时调整内核参数。
内核代码位置:
fs/proc/
典型用法:
cat /proc/cpuinfo
、echo 1 > /proc/sys/net/ipv4/ip_forward
。
5. sysfs
作用:设备驱动和内核对象(kobject)信息的导出接口。
特点:
每个内核对象(如设备、驱动、总线)都映射到
/sys/
。通过
sysfs
+udev
完成设备发现。
内核代码位置:
fs/sysfs/
典型用法:
/sys/class/net/eth0
查看网络接口属性。
6. debugfs
作用:内核调试文件系统,用于导出调试信息。
特点:
非生产环境使用,因为暴露了很多内核内部信息。
/sys/kernel/debug/
默认挂载点。
内核代码位置:
fs/debugfs/
典型用法:
/sys/kernel/debug/gpio
、/sys/kernel/debug/tracing
。
7. tracefs
作用:专门为内核跟踪系统(ftrace、perf、eBPF)提供的文件系统。
特点:
原本依附于
debugfs
,后来独立出来。挂载点
/sys/kernel/tracing
。
内核代码位置:
fs/tracefs/
典型用法:内核 trace,
cat /sys/kernel/tracing/trace
。
8. configfs
作用:用户空间配置内核对象的接口(和 sysfs 相反,sysfs 是只读信息导出)。
特点:
sysfs:内核导出 → 用户读/写属性。
configfs:用户创建对象 → 内核动态感知。
内核代码位置:
fs/configfs/
典型用法:USB gadget 子系统、pcie ep 配置。
9. initramfs
作用:取代 ramdisk 的新机制,基于
cpio
打包内存文件系统。特点:
内核直接解压到内存,不需要块设备。
内容直接变成
rootfs
。
内核代码位置:
init/initramfs.c
典型用法:现代 Linux 的 initramfs 启动流程。
10. initrd / initramdisk
作用:早期机制,挂载一个临时 ramdisk 作为根文件系统,然后再 pivot_root 到真实 rootfs。
特点:
较老,已逐步被 initramfs 取代。
使用方式:
root=/dev/ram0 initrd=...
内核代码位置:
init/do_mounts_initrd.c
典型用法:早期发行版的启动过渡方案。
11. overlayfs
作用:联合挂载文件系统,支持 只读层 + 可写层。
特点:
底层有 lowerdir(只读),upperdir(可写),合成后对外呈现统一视图。
docker、容器、LiveCD 常用。
内核代码位置:
fs/overlayfs/
典型用法:
mount -t overlay overlay -o lowerdir=/ro,upperdir=/rw,workdir=/work /merged