tmpfs是一种基于内存的文件系统,它和虚拟磁盘r amd isk比较类似像,但不完全相同,和 ram disk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储。而且传统的ramdisk是个块设备,要用mkfs来格式化它,才能真正地使用它;而tmpfs是一个文件系统,并不是块设备,只是安装它,就可以使用了。tmpfs是最好的基于RAM的文件系统。
Linux 内核的虚拟内存(virtual memory ,VM)资源同时来源于您的RAM(物理内存)和交换分区(swap)。内核中的VM子系统负责在后台管理这些资源,通常是透明地将RAM页移动到交换分区或从交换分区到RAM页。
tmpfs文件系统需要VM子系统的页面来存储文件。tmpfs自己并不知道这些页面是在交换分区还是在RAM中;做这种决定是内核中的VM子系统的工作。tmpfs文件系统所知道的就是它正在使用某种形式的虚拟内存。
不同于大多数“标准的”文件系统,如ext3、ReiserFS和其它一些系统,tmpfs并不是存在于一个底层块设备上面。因为tmpfs是直接建立在VM之上的,您用一个简单的mount命令就可以创建tmpfs文件系统了。
# mount -t tmpfs -o size=64M tmpfs /dev/shm
/mnt/tmpfs最初会只有很小的空间,但随着文件的复制和创建,tmpfs文件系统驱动程序会分配更多的 VM,并按照需求动态地增加文件系统的空间。而且,当 /mnt/tmpfs 中的文件被删除时,tmpfs 文件系统驱动程序会动态地减小文件系统并释放 VM 资源,这样做可以将 VM 返回到循环当中以供系统中其它部分按需要使用。因为 VM 是宝贵的资源,所以您一定不希望任何东西浪费超出它实际所需的 VM,tmpfs 的好处之一就在于这些都是自动处理的。
假如tmpfs的挂载点目录下什么也没有,tmpfs并不占用VM。上面的参数64M只是告诉内核这个挂载点最大可用的VM为20M,如果不加上这个参数,tmpfs默认的大小是RAM的一半,假如你的物理内存是128M,那么tmpfs默认的大小就是64M。
tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。即使用了一些交换分区,性能仍然是卓越的,当更多空闲的 VM 资源可以使用时,这部分 tmpfs 文件系统会被移动到 RAM 中去。让 VM 子系统自动地移动部分 tmpfs 文件系统到交换分区实际上对性能上是好的,因为这样做可以让 VM 子系统为需要 RAM 的进程释放空间。这一点连同它动态调整大小的能力,比选择使用传统的 RAM 磁盘可以让操作系统有好得多的整体性能和灵活性。
默认情况下,tmpfs会mount到/dev/shm目录。使用tmpfs,就是说你可以使用这个目录,这个目录就是tmpfs,如你写临时文件到此目录,这些文件实际上是在VM中。 由于它的数据是在VM里面,因此断电或者你卸载它之后,数据就会立即丢失,这也许就是它叫tmpfs的原故。
要使用tmpfs,您要在内核配置时,启用“Virtual memory file sys te m support”。
为防止tmpfs使用了全部VM,有时候要限制其大小。要创建一个最大为32 MB的tmpfs文件系统,键入:
# mount -t tmpfs -o size=32m tmpfs /dev/shm
添加到 /etc/fstab,应该是这样:
tmpfs /dev/shm tmpfs size=32m 0 0