Linux下的tmpfs文件系统(/dev/shm)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuxiao723846/article/details/84937097

/dev/shm/是一个使用就是tmpfs文件系统的设备,其实就是一个特殊的文件系统。

tmpfs 是 linux 内核维持的虚拟文件系统(一种基于内存的文件系统),最早是在 SunOS 上实现。最初被设计用于一些短期生存的文件的存储和访问.它和虚拟磁盘ramdisk比较类似,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储。而且传统的ramdisk是个块设备,要用mkfs来格式化它,才能真正地使用它;而tmpfs是一个文件系统,并不是块设备,只是安装它,就可以使用了。tmpfs是最好的基于RAM的文件系统。

那么我们为什么要设计 tmpfs 呢?要从 Linux 的文件系统解构分析.

    ext3 文件系统主要储存两类信息,一个是数据文件的权限和属性,另一个是数据文件内容.即 linux 系统下的 inode 和 block。一些对文件系统的操作需要频繁更新文件的属性和控制等信息。由于硬盘的 I/O 需要一定的时延,这就造成了资源的浪费。然而基于内存的文件系统克服了这个缺点。它免去了频繁读写硬盘的操作,而是直接操作内存。

    tmpfs 不同于 RAM Disk,RAM Disk 使用内存的一部分来模拟硬盘,相同的文件数据分别存在于 RAM Disk 和 内核,两处的数据分别维护,要进行从内核到 RAM Disk 的数据映射来更新数据文件。而 tmpfs 是有内核直接维持的虚拟空间,它提供 RAM Disk 一样快的读写速度,而且只单一的内存到内存的访问。

1、tmpfs有以下特点:

  1. tmpfs 是一个文件系统,而不是块设备;只是安装它,它就可以使用了。
  2. 动态文件系统的大小。
  3. tmpfs 读写有闪电般的速度(因为 tmpfs 文件系统会完全驻留在 RAM 中),但是重启后会丢失数据。
  4. tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载、绑定的操作。

我们可以通过以下两个脚本来验证linux /dev/shm的性能:

[root@db1 oracle]# ls -l linux_11gR2_grid.zip
-rw-r--r-- 1 oracle dba 980831749 Jul 11 20:18 linux_11gR2_grid.zip
[root@db1 oracle]# cat mycp.sh
#!/bin/sh
echo `date`
cp linux_11gR2_grid.zip ..
echo `date`
[root@db1 oracle]# ./mycp.sh
Fri Jul 15 18:44:17 CST 2011
Fri Jul 15 18:44:29 CST 2011

[root@db1 shm]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/rootvg-lv01
                       97G  9.2G   83G  10% /
/dev/sda1              99M   15M   80M  16% /boot
tmpfs                 2.0G     0  2.0G   0% /dev/shm

[root@db1 oracle]# cat mycp1.sh
#!/bin/sh
echo `date`
cp linux_11gR2_grid.zip /dev/shm
echo `date`
[root@db1 oracle]# ./mycp1.sh
Fri Jul 15 18:44:29 CST 2011
Fri Jul 15 18:44:30 CST 2011
[root@db1 oracle]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/rootvg-lv01
                       97G  9.2G   83G  10% /
/dev/sda1              99M   15M   80M  16% /boot
tmpfs                 2.0G  937M  1.1G  46% /dev/shm

2、linux /dev/shm 默认容量
linux下/dev/shm的容量默认最大为内存的一半大小,使用df -h命令可以看到。但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节;如果它最大为1G,里头放有100M文件,那剩余的900M仍然可为其它应用程序所使用,但它所占用的100M内存,是绝不会被系统回收重新划分的。

通过df -h查看linux /dev/shm的大小:

[root@db1 shm]# df -h /dev/shm
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 1.5G     0  1.5G   0% /dev/shm

3、如何使用tmpfs?
       tmpfs默认情况下会mount到/dev/shm目录下,要使用tmpfs,需要在内核配置时,启用“Virtual memory file system support”。为了防止tmpfs使用了全部的VM,有时候要限制大小。要创建一个最大为1G的tmpfs文件系统,输入:

mount tmpfs /dev/shm -t tmpfs -o size=1G

编辑/etc/fstab文件,添加如下内容:

tmpfs /dev/shm tmpfs size=1G 00

4、扩大tmpfs:

1)查看

[root@drz ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        16G   14G  1.7G  89% /
tmpfs           996M   72K  996M   1% /dev/shm
/dev/sda1       194M   34M  151M  19% /boot

2)编辑/etc/fstab

## size大小必须是整数
[root@drz ~]# vi /etc/fstab
tmpfs                   /dev/shm                tmpfs   defaults,size=1500M        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620              0 0
sysfs                   /sys                    sysfs   defaults                       0 0
proc                    /proc                   proc    defaults                       0 0
/dev/sdb1               swap                    swap    defaults                      0 0
/home/swapfile          swap                    swap    defaults                     0 0

3)重新挂载:

[root@drz ~]# mount -o remount /dev/shm

4)验证:

[root@drz ~]# df -PH
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        17G   15G  1.8G  89% /
tmpfs           1.6G   74k  1.6G   1% /dev/shm
/dev/sda1       204M   36M  158M  19% /boot

参考:

https://blog.csdn.net/NextAction/article/details/57076924

补充:有的时候我们用df查看,会发现devtmpfs

devtmpfs 的功用是在 Linux 核心 启动早期建立一个初步的 /dev,令一般启动程序不用等待 udev,缩短 GNU/Linux 的开机时间。

猜你喜欢

转载自blog.csdn.net/liuxiao723846/article/details/84937097