ramfs和tmpfs是在內存上創建的文件系統(Filesystem)。其優勢是讀寫速度很快,但存在掉電丟失的風險。若是一個進程的性能瓶頸是硬盤的讀寫,那麼能夠考慮在ramfs或tmpfs上進行大文件的讀寫操做。node
ramfs和tmpfs之間的區別:linux
特性 | tmpfs | ramfs |
達到空間上限時繼續寫入 | 提示錯誤信息並終止 | 能夠繼續寫還沒有分配的空間 |
是否固定大小 | 是 | 否 |
是否使用swap | 是 | 否 |
具備易失性 | 是 | 是 |
經過下面的方法能夠查看系統中的tmpfs和ramfs:安全
not@linux-numy:~> mount | grep -E "(tmpfs|ramfs)" devtmpfs on /dev type devtmpfs (rw,relatime,size=1945280k,nr_inodes=486320,mode=755) tmpfs on /dev/shm type tmpfs (rw,relatime) tmpfs on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755) tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,mode=755) tmpfs on /var/lock type tmpfs (rw,nosuid,nodev,relatime,mode=755) tmpfs on /var/run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
或者:app
not@linux-numy:~> df -h | grep -E "(tmpfs|ramfs)" devtmpfs 1.9G 16K 1.9G 1% /dev tmpfs 1.9G 27M 1.9G 2% /dev/shm tmpfs 1.9G 4.3M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup tmpfs 1.9G 4.3M 1.9G 1% /var/lock tmpfs 1.9G 4.3M 1.9G 1% /var/run
個人系統(openSUSE 13.1 "Bottle", kernel version: 3.11.10-21)中,使用的都是tmpfs。我想緣由多是,當存在寫溢出時,tmpfs比ramfs更加安全,由於前者會給出錯誤提示並禁止寫操做。性能
建立tmpfs:ui
linux-numy:~ # mkdir -p /mnt/tmp linux-numy:~ # mount -t tmpfs -o size=20m tmpfs /mnt/tmp/ linux-numy:~ # df -h | grep "/mnt/tmp" tmpfs 20M 0 20M 0% /mnt/tmp
建立ramfs:this
linux-numy:~ # mkdir -p /mnt/ram linux-numy:~ # mount -t ramfs -o size=20m ramfs /mnt/ram/ linux-numy:~ # df -ah | grep "/mnt/ram" ramfs 0 0 0 - /mnt/ram
這裏df只使用h選項是沒法顯示ramfs的內容的。spa
根據superuser.com上的問答《Have I successfully created an ramfs drive?》,Sachin Divekar給出了一段資料引用:設計
For a ramfs filesystem, the newer kernels report nothing back using "df". There is meant to be a patch for this (to allow for accounting in a ramfs). Philosophically, ramfs is mean to be as simple as possible, apparently, hence the lack of accounting. So data can be stored and used on the ramfs disk, but no accounting of it is possible, other than a loss of memory shown with "free". For this reason the tmpfs is better, since it does keep accounting and "df" shows what's going on.code
即,tmpfs會對內存進行accounting(統計內存的使用狀況),而ramfs被設計爲儘量的簡單,因此不會進行accounting。所以,針對ramfs,在較新的內核中,使用df不會返回ramfs的信息。