1. 程式人生 > >Linux下的tmpfs檔案系統(/dev/shm)

Linux下的tmpfs檔案系統(/dev/shm)

/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的效能:

[[email protected] oracle]# ls -l linux_11gR2_grid.zip
-rw-r--r-- 1 oracle dba 980831749 Jul 11 20:18 linux_11gR2_grid.zip
[
[email protected]
oracle]# cat mycp.sh #!/bin/sh echo `date` cp linux_11gR2_grid.zip .. echo `date` [[email protected] oracle]# ./mycp.sh Fri Jul 15 18:44:17 CST 2011 Fri Jul 15 18:44:29 CST 2011 [[email protected] 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 [[email protected] oracle]# cat mycp1.sh #!/bin/sh echo `date` cp linux_11gR2_grid.zip /dev/shm echo `date` [[email protected] oracle]# ./mycp1.sh Fri Jul 15 18:44:29 CST 2011 Fri Jul 15 18:44:30 CST 2011 [[email protected] 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的大小:

[[email protected] 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)檢視

[[email protected] ~]# 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大小必須是整數
[[email protected] ~]# 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)重新掛載:

[[email protected] ~]# mount -o remount /dev/shm

4)驗證:

[[email protected] ~]# 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 的開機時間。