简介

ramfs和tmpfs是在内存上建立的文件系统(Filesystem)。其优点是读写速度很快,但存在掉电丢失的风险。如果一个进程的性能瓶颈是硬盘的读写,那么可以考虑在ramfs或tmpfs上进行大文件的读写操作。

ramfs和tmpfs之间的区别:

特性 tmpfsramfs
 达到空间上限时继续写入提示错误信息并终止 可以继续写尚未分配的空间
是否固定大小
 是否使用swap
 具有易失性 是

查看

通过下面的方法可以查看系统中的tmpfs和ramfs:

not@linux-numy:~> mount | grep -E "(tmpfs|ramfs)"
devtmpfs on /dev type devtmpfs (rw,relatime,size=1945280k,nr_inodes=,mode=)
tmpfs on /dev/shm type tmpfs (rw,relatime)
tmpfs on /run type tmpfs (rw,nosuid,nodev,relatime,mode=)
tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,mode=)
tmpfs on /var/lock type tmpfs (rw,nosuid,nodev,relatime,mode=)
tmpfs on /var/run type tmpfs (rw,nosuid,nodev,relatime,mode=)

或者:

not@linux-numy:~> df -h | grep -E "(tmpfs|ramfs)"
devtmpfs .9G 16K .9G % /dev
tmpfs .9G 27M .9G % /dev/shm
tmpfs .9G 4.3M .9G % /run
tmpfs .9G .9G % /sys/fs/cgroup
tmpfs .9G 4.3M .9G % /var/lock
tmpfs .9G 4.3M .9G % /var/run

我的系统(openSUSE 13.1 "Bottle", kernel version: 3.11.10-21)中,使用的都是tmpfs。我想原因可能是,当存在写溢出时,tmpfs比ramfs更加安全,因为前者会给出错误提示并禁止写操作。

创建

创建tmpfs:

linux-numy:~ # mkdir -p /mnt/tmp
linux-numy:~ # mount -t tmpfs -o size=20m tmpfs /mnt/tmp/
linux-numy:~ # df -h | grep "/mnt/tmp"
tmpfs 20M 20M % /mnt/tmp

创建ramfs:

linux-numy:~ # mkdir -p /mnt/ram
linux-numy:~ # mount -t ramfs -o size=20m ramfs /mnt/ram/
linux-numy:~ # df -ah | grep "/mnt/ram"
ramfs - /mnt/ram

这里df只使用h选项是无法显示ramfs的内容的。

df无法显示ramfs信息的原因(无-a选项)

根据superuser.com上的问答《Have I successfully created an ramfs drive?》,Sachin Divekar给出了一段资料引用:

即,tmpfs会对内存进行accounting(统计内存的使用情况),而ramfs被设计为尽可能的简单,所以不会进行accounting。因此,针对ramfs,在较新的内核中,使用df不会返回ramfs的信息。

参考资料

Overview of RAMFS and TMPFS on Linux

05-11 22:54