tmpfs挂载必须指定-t tmpfs和size选项,否则报错或占满内存;正确命令为sudo mount -t tmpfs -o size=2G,mode=1777 tmpfs /mnt/ramdisk;开机挂载需在fstab中添加x-systemd.automount;扩容用remount,禁用/dev/ram0。

tmpfs挂载命令必须带 -t tmpfs 且指定 size 选项
不加 size 会默认用掉物理内存一半,容易误占满 RAM;不写 -t tmpfs 会导致 mount 报错 “unknown filesystem type”,因为内核不会自动推断类型。实际命令就是一条:
sudo mount -t tmpfs -o size=2G,mode=1777 tmpfs /mnt/ramdisk
-
size=2G是硬限制,写满后报No space left on device,不是 OOM,不会杀进程 -
mode=1777确保/mnt/ramdisk支持粘滞位,避免不同用户互相删文件(尤其用于/tmp类场景) - 目录必须提前创建:
sudo mkdir -p /mnt/ramdisk,否则 mount 直接失败 - 挂载后用
df -h | grep tmpfs验证,看到对应行且大小匹配才算成功
/etc/fstab 开机挂载要加 x-systemd.automount
直接写静态挂载行(如 tmpfs /mnt/ramdisk tmpfs size=2G 0 0)在 systemd 启动早期可能失败:依赖的 local-fs.target 尚未就绪,/mnt/ramdisk 路径可能不可写或被占用。
正确写法是:
tmpfs /mnt/ramdisk tmpfs size=2G,mode=1777,defaults,x-systemd.automount 0 0
-
defaults包含rw,exec,dev,suid等基础选项,保持可用性 -
x-systemd.automount让 systemd 延迟到第一次访问该路径时才挂载,避开 race condition - 改完必须运行
sudo systemctl daemon-reload,再用sudo systemctl restart local-fs.target测试,不能只靠重启 - 别加
noatime:tmpfs 本身不记录 atime,加了无效,还可能干扰某些监控工具
临时扩容或调整已挂载的 tmpfs 只能用 mount -o remount
比如 /tmp 已挂为 tmpfs,但当前只有 512M,想临时扩到 1.5G,不能 umount 再 mount —— 多数进程正往里写临时文件,强制卸载会出错甚至卡死。
正确操作是:
sudo mount -o remount,size=1.5G /tmp
- remount 不中断现有文件句柄,所有正在读写的程序无感知
- 新
size值立即生效,df -h /tmp能立刻看到变化 - 这个操作不持久,重启后恢复原大小,所以仅适合调试或应急
- 如果 remount 失败,大概率是原挂载没用
defaults或缺少rw,得先查findmnt /tmp看原始选项
别碰 /dev/ram0,它和 tmpfs 完全是两套机制
网上有些教程还在教 modprobe brd rd_nr=1 rd_size=2097152 && mkfs.ext4 /dev/ram0,这套方案在现代发行版上基本走不通。
- brd 模块默认不加载,
lsmod | grep brd很可能为空 - 即使加载成功,
/dev/ram0占用的是刚性内存:分配 2GB 就锁死 2GB,哪怕只存 1KB 文件也不会释放 - fstab 里写
/dev/ram0极易因设备节点生成时机问题导致启动卡住 - tmpfs 基于页缓存,可 swap、可回收、无需格式化——这才是你真正需要的“超高速临时分区”
唯一需要 /dev/ram0 的场景是:你要做 loop 设备测试、dd 镜像烧录、或者兼容某个强依赖块设备的老旧驱动。其他所有情况,坚持用 tmpfs。


















