Linux下tmpfs與ramfs的區別

2021-07-11 21:38:45 字數 1311 閱讀 9208

**:

ramfs是linux下一種基於ram做儲存的檔案系統。在使用過程中你就可以把ramfs理解為在普通的hdd上建立了乙個檔案系統,而現在hdd被替換成了ram,因為是ram做儲存所以會有很高的儲存效率。由於ramfs的實現就相當於把ram作為最後一層的儲存,所以在ramfs中不會使用swap。你什麼時候聽過會把hdd上的檔案swap到**去嗎?平常說的swap都是針對記憶體來說的,而ramfs底層的儲存是ram,雖然不是hdd,但是在linux看來它就跟hdd一樣。但是ramfs有乙個很大的缺陷就是它會吃光系統所有的記憶體,即使你mount的時候指定了大小,同時它也只能被root使用者訪問。測試方法很簡單:

sudo mount -t ramfs -o size=10m ramfs ./ramfs/

sudo dd if=/dev/zero of=./ramfs/test.file bs=1m count=20

測試時你會發現上面這個操作是能成功的,或者你再自己虛擬機器上乾脆做狠點,直接寫乙個比記憶體更大的檔案,你會發現瞬間系統就卡主了。另外在dd命令如果不以root使用者執行就會許可權不夠:

dd: opening `./ramfs/test.file': permission denied

tmpfs也是linux下的乙個檔案系統,它將所有的檔案都儲存在虛擬記憶體中,umount tmpfs後所有的資料也會丟失,tmpfs就是ramfs的衍生品。tmpfs使用了虛擬記憶體的機制,它會進行swap,但是它有乙個相比ramfs的好處:mount時指定的size引數是起作用的,這樣就能保證系統的安全,而不是像ramfs那樣,一不留心因為寫入資料太大吃光系統所有記憶體導致系統被hang住。在我文章最開始的那個例子中就是mount了乙個10m大小的tmpfs,然後執行sql 命令(它需要建立的臨時表大於10m),因為tmpfs限制了大小,因此也就報錯。那麼tmpfs適用的場景有哪些呢?在官方文件上主要有如下幾點:

kernel 內部需要用到它,而我們是無法看到的

glibc 2.2以上的版本,必須有乙個tmpfs被mount在/dev/shm用做posix shared memory

還有很多包括現在還不知道的用途

包括我現在的公司就有乙個需求,某些資料如果放在磁碟上訪問壓力根本扛不住,因此臨時做了乙個tmpfs做快取來減緩壓力,當然這不是最終的解決之道。所以總結來說ramfs與tmpfs有如下幾點異同:

ramfs會因為資料的寫入自動增長空間,所以可能導致最後系統所有的記憶體耗完

tmpfs可以再mount時限定大小,不會自動增長

ramfs不會用swap

tmpfs會使用swap

兩者都是用來提公升效率,但是tmpfs比ramfs的效能更好(結果是對的,原理有待進一步**)

linux下tmpfs檔案系統簡介

tmpfs是一種基於記憶體的檔案系統,它和虛擬磁碟ramdisk比較類似像,但不完全相同,和ramdisk一樣,tmpfs可以使用ram,但它也可以使用swap分割槽來儲存。而且傳統的ramdisk是個塊裝置,要用mkfs來格式化它,才能真正地使用它 而tmpfs是乙個檔案系統,並不是塊裝置,只是安...

Linux的tmpfs檔案系統

前幾天發現伺服器的記憶體 ram 和swap使用率非常低,於是就想這麼多的資源,不用豈不浪費了?google了一下,認識了tmpfs,總的來說tmpfs是一種虛擬記憶體檔案系統,正如這個定義它最大的特點就是它的儲存空間在vm裡面,這裡提一下vm virtual memory vm是由linux核心裡...

Linux系統下,RAM開發板實現煙霧感測器

煙霧感測器 串列埠通訊 乙個bit位乙個bit位的傳輸 接收方和傳送方有相同的設定和波特率 串列埠程式設計 設定串列埠資訊 串列埠 rs232 4根線 vcc gnd txdrxd 接線 斷電接線 接線後注意檢查是否接錯,t r r t 交叉接線 開發板串列埠 右邊的四排針 4組串列埠 com1 通...