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有以下特點:
- tmpfs 是一個檔案系統,而不是塊裝置;只是安裝它,它就可以使用了。
- 動態檔案系統的大小。
- tmpfs 讀寫有閃電般的速度(因為 tmpfs 檔案系統會完全駐留在 RAM 中),但是重啟後會丟失資料。
- 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 的開機時間。