一、 什么是tmpfs

tmpfs是一种基于内存的文件系统,和ramdisk比较类似,但不同的是,ramdisk只能使用RAM,但tmpfs也可以使用swap分区来存储。而且ramdisk创建后是个块设备,需要用mkfs指定文件系统格式化这个块设备,才能使用它;而tmpfs仅仅是一个文件系统,并不是块设备,直接使用mount命令就可以挂盘这个文件系统了。tmpfs是一个不错的基于RAM的文件系统。

二、 tmpfs优劣

  • 由于内存使用采用的是POD机制,所以在使用tmpfs时也是动态增长

  • 因为是基于内存读写的,所以速度特别快

  • 内存是一个非持久化存储,断电后,tmpfs数据都会丢失

三、 如何使用tmpfs

如果要启用tmpfs,需要在内核配置时,启用“Virtual memory file system support”

1.直接mount,tmpfs并不是基于块设备的 ,所以一个简单的 mount 命令就可以创建 tmpfs 文件系统了,在这里我们创建了一个目录,并挂载tmpfs到这个目录**

1
2
mkdir -p /mnt/tmpfs
mount tmpfs /mnt/tmpfs -t tmpfs

2. 使用/dev/shm ,/dev/shm/是linux下一个非常有用的目录,这个目录就是基于tmpfs的,所以这个目录不在硬盘上,而是在内存里。因此在linux下,就不需要大费周折去建ramdisk,直接使用/dev/shm/就可达到很好的优化效果。默认系统就会加载/dev/shm(需要注意的是Linux默认(CentOS)/dev/shm分区的大小是系统物理内存的50%)。

首先为了防止tmpfs使用全部内存,在这里我们使用mount命令限制/dev/shm的大小为1G,以及提高inode数量(默认的inode数量很低一般都要调高些) 命令如下:

1
mount -o size=1G -o nr_inodes=1000000  -o remount /dev/shm

然后我们在/dev/shm下建个test文件夹,然后bind到/tmp,如下

1
2
3
mkdir /dev/shm/test
chmod 1777 /dev/shm/test
mount –bind /dev/shm/test /tmp(–bind )

在使用mount –bind olderdir newerdir命令来挂载一个目录到另一个目录后,newerdir的权限和所有者等所有信息会发生变化。挂载后的目录继承了被挂载目录的所有属性

更改fstab,使/dev/shm在系统启动时默认挂载的大小为1G

1
2
3
4
5
[root@huazq ~]# vi /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=1G 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/sda1 swap swap defaults 0 0