linux記憶體檔案系統之指南

2021-06-18 23:23:38 字數 3244 閱讀 9968

記憶體檔案系統使用及示例:ramdisk, ramfs, tmpfs 

第一部分

在linux中可以將一部分記憶體mount為分割槽來使用,通常稱之為ramdisk。

ramdisk有三種實現方式:

第一種就是傳統意義上的,可以格式化,然後載入。

這在linux核心2.0/2.2就已經支援,其不足之處是大小固定,之後不能改變。

為了能夠使用ramdisk,我們在編譯核心時須將block device中的ramdisk支援選上,它下面還有兩個選項,乙個是設定ramdisk的大小,預設是4096k;另乙個是initrd的支援。

如果對ramdisk的支援已經編譯進核心,我們就可以使用它了:

檢視一下可用的ramdisk,使用ls /dev/ram*

首先建立乙個目錄,比如test,執行mkdir /mnt/test;

然後對/dev/ram0 建立檔案系統,執行mke2fs /dev/ram0;

最後掛載 /dev/ram0,執行mount /dev/ram /mnt/test,就可以象對普通硬碟一樣對它進行操作了。

更詳細的內容可以參考:

另兩種則是核心2.4才支援的,通過ramfs或者tmpfs來實現:

它們不需經過格式化,用起來靈活,其大小隨所需要的空間而增加或減少。

ramfs顧名思義是記憶體檔案系統,它它處於虛擬檔案系統(vfs)層,而不像ramdisk那樣基於虛擬在記憶體中的其他檔案系統(ex2fs)。

因而,它無需格式化,可以建立多個,只要記憶體足夠,在建立時可以指定其最大能使用的記憶體大小。

如果你的linux已經將ramfs編譯進核心,你就可以很容易地使用ramfs了。建立乙個目錄,載入ramfs到該目錄即可:

# mkdir /testram

# mount -t ramfs none /testram

預設情況下,ramfs被限制最多可使用記憶體大小的一半。可以通過maxsize(以kbyte為單位)選項來改變。

# mount -t ramfs none /testram -o maxsize=2000 (建立了乙個限定最大使用記憶體為2m的ramdisk)

tmpfs是乙個虛擬記憶體檔案系統,它不同於傳統的用塊裝置形式來實現的ramdisk,也不同於針對物理記憶體的ramfs。

tmpfs可以使用物理記憶體,也可以使用交換分割槽。在linux核心中,虛擬記憶體資源由物理記憶體(ram)和交換分割槽組成,這些資源是由核心中的虛擬記憶體子系統來負責分配和管理。

tmpfs向虛擬記憶體子系統請求頁來儲存檔案,它同linux的其它請求頁的部分一樣,不知道分配給自己的頁是在記憶體中還是在交換分割槽中。同ramfs一樣,其大小也不是固定的,而是隨著所需要的空間而動態的增減。

使用tmpfs,首先你編譯核心時得選擇"虛擬記憶體檔案系統支援(virtual memory filesystem support)" 。

然後就可以載入tmpfs檔案系統了:

# mkdir -p /mnt/tmpfs

# mount tmpfs /mnt/tmpfs -t tmpfs

同樣可以在載入時指定tmpfs檔案系統大小的最大限制:

# mount tmpfs /mnt/tmpfs -t tmpfs -o size=32m

使用df -at命令可以看到有個/dev/shm目錄,該目錄的檔案系統是tmpfs的,因此這個目錄下的檔案訪問是非常快的,但是其大小可能不同機器都不一樣,而且每次重啟後檔案也就丟失了。

第二部分

linux下我所接觸過的記憶體檔案系統有三個:

(1)ramdisk,使用前需要先建立檔案系統,並且調整檔案系統大小比較麻煩,需要修改核心引導引數並重新啟動作業系統,在繁雜多變的應用與需要 7x24不間斷執行的系統來說,並不是乙個可以接受的選擇.好處是自2.0版本起核心便支援(這也算好處?嗯,確實算,如果你手頭真有這樣的系統的話)

(2)ramfs,使用前不需要去建立檔案系統了,直接通過mount的方式即可掛載上來用,需要的時候可以使用"mount -o remount,maxsize=..."這種方式來調整大小.

(3)tmpfs,同ramfs在表面上基本上一樣啦,不同於ramfs針對"物理記憶體",tmpfs是在虛擬記憶體下分配空間的,也就是說tmpfs例項中儲存的檔案既可能存在於物理記憶體中,也可能存在於交換分割槽中,具體存在**,是由"虛擬記憶體子系統"來排程的.

純效能角度講,ramfs會在程序占用記憶體使用較多的情況下會優於tmpfs,在沒有交換分割槽或程序占用記憶體較小而不發生swap行為的情況下,兩者效能不會有差異(這個結論沒有實測過,我"想當然"用猜的)

基本情況介紹完畢,下面介紹tmpfs的應用,(沒辦法,我手頭機器記憶體不是那麼寬裕...)

0,根據需要建立掛載目錄,例:

mkdir -p $dir_tmp;

1,掛載

mount my_tmpfs $dir_tmp -t tmpfs -o size=512m

my_tmpfs這個名字需要起,乙個標識而已,會出現在df 的filesytem一列,起個別緻點的名字比較容易被自己寫的其它監控指令碼找到,如果非要起個none或tmpfs之類的名字的話...反正系統預設掛載的tmpfs都比較喜歡用這兩個名字,好壞自己琢磨吧.

成功以後自己用df 看一下就知道了,寫監控指令碼時可以用"df -t tmpfs|grep ^my_tmpfs"來找到這一行.

2,調整

應用中如果感覺不合適,隨時可以用mount命令調整

mount $dir_tmp -o remount,size=1024m,nr_inodes=100k

nr_inodes為最大節點數,如果你的$dir_tmp使用df命令檢視明明有空間,卻無法建立新檔案(例如touch乙個新檔案),可能是檔案節點用到上限了,可以用"df -i"命令來檢視,如果是有空間但節點達到上限,就需要用nr_inodes來調整了.

其它可以調整的引數:

mode,uid,gid,

uid和gid就不多說了,不知道的回家補基礎,mode也不多說了,取值是3個八進位制數字,表示許可許可權,不知道這個的也回家...

其它引數,參見mount命令的man page之options一節中"-o"引數的說明.

3,解除安裝

umount $dir_tmp

4,其它

mount 命令的man page中對tmpfs提及不多,詳細一些的文件,請參閱核心文件documentation/filesystems/tmpfs.txt(核心源**目錄內)

原文見:

linux記憶體檔案系統

在linux中可以將一部分記憶體當作分割槽來使用,我們稱之為ramdisk。對於一些經常被訪問的檔案,而它們又不會被更改,可以將它們通過ramdisk放在記憶體中,即可明顯地提高系統的效能。當然你的記憶體可要足夠大了。ramdisk有兩種,一種可以格式化,載入,在linux核心2.0 2.2就已經支...

linux之檔案系統

概述 1.應用層訪問具體檔案的層次圖 2.3.4.5.6.一 應用層訪問具體檔案的層次圖 結構圖 檔案與檔案系統的關係 從上圖中我們看出,檔案首先分類,歸屬於不同的檔案系統 檔案與程序之間的關係 程序與檔案的連線,即 已開啟檔案 是程序的私有財產,歸具體程序所有,那麼這種連線的file結構必然與程序...

linux 檔案系統 Linux 檔案系統結構介紹

ubuntu 像所有類unix系統一樣 在分層樹中組織檔案,其中的關係就像父母和孩子一樣。目錄可以包含其他目錄以及常規檔案,它們是樹的 葉子 樹的任何元素都可以通過路徑名引用 絕對路徑以字元 標識根目錄,其中包含所有其他目錄和檔案 開頭,然後列出必須遍歷以到達該元素的每個子目錄,每個子目錄用 符號分...