Linux下tmpfs與ramfs的區別


 

 

 

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的性能更好(結果是對的,原理有待進一步探究)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM