TMPFS
tmpfs在类Unix作業系統上是一個常見的名稱會用來做為暫時的檔案儲存方式,在更多的情況下,它會用虛擬的記憶體而不是一個永久保存的媒體來做為在檔案系統上的使用。
目录 |
詞語定義 [编辑]
所有在 tmpfs 上儲存的資料在理論上都是暫時借放的,那也表示說,檔案不會建立在硬碟上面。一旦重新開機,所有在 tmpfs 裡面的資料都會消失不見。理論上,記憶體使用量會隨著 tmpfs 的使用而時有增長或消減。目前有許多 Unix 的發行版都有啟用 tmpfs ,預設是把它以共享記憶體的方式用在系統的/tmp 目錄底下。這個特徵在 Unix 上面會表現像是:
Filesystem Size Used Avail Use% Mounted on tmpfs 256M 688K 256M 1% /tmp
應用實例 [编辑]
SunOS / Solaris [编辑]
SunOS是Solaris 上一世代的作業系統,裡頭實作了 tmpfs 的部份功能[1] 最初在 SunOS 4.1 上實作,在 1990 三月釋出。[2] 1994 年十一月,Solaris 2.1 裡頭 /tmp 採用 tmpfs 的應用,並被納入預設的檔案系統之一。
Linux [编辑]
tmpfs 在 Linux kernel 從 2.4 之後的版本都有支援。[3] tmpfs(之前比較為人所知的名稱是 "shmfs")和 Linux 的 ramdisk 裝置定位有所不同。 Ramdisk 是固定劃分一塊記憶體出來使用,且允許比較不常用的頁面可以移動到置換空間去。
RAMFS相較之下,不會利用虛擬記憶體的部份(這個特點有利也有弊)。另外,在 MFS 還有其它 ramfs 的舊版本,都不會動態的調整大小,只能一直佔用一個固定的大小。
tmpfs 的用法,舉例來說是像: "mount -t tmpfs -o size=1G,nr_inodes=10k,mode=0700 tmpfs /space" 這樣就會使用 1 GiB 的置換空間,裡頭有 10240 inodes 且規定是在 /space 目錄底下存取。這個檔案系統的大小是可以隨時調整的,像是再追加一個指令如:mount -o remount,size=2G /space"。
要註記一點,如果/tmp 有安全上的顧慮的話,最好追加 sticky bit 上來。[4],就是權限應該被設作 "mode=1777" ,而不是 "mode=0777 或 "mode=777"
如果要是开机启用 tmpfs 那就是在fstab里面加个参数:
tmpfs /media/ramdisk tmpfs size=2G,defaults,noatime,mode=1777 0 0
其中 2G 是固定大小。
BSD [编辑]
從 2005 年 九月 10 號之後 tmpfs 也正式被收錄到 NetBSD 的原始碼裡頭 [5],同時在 4.0 之後的版本啟用了這個功能。 FreeBSD 也已經收錄了 NetBSD 的這項功能,在 7.0 之後的版本也跟著啟用。
微軟 Windows [编辑]
視窗作業系統也有一個類似 tmpfs 的方式來處理,就是 "temporary files"。在系統的低記憶體底下,檔案會以 FILE_ATTRIBUTE_TEMPORARY 和 FILE_FLAG_DELETE_ON_CLOSE(「暫存檔案」與「關閉時刪除該檔」的旗標)標記在記憶體裡面。這種方式的處理相當類似 tmpfs ,除了這些檔案會被寫入到特定的低記憶體位置而不是置換空間去。這個技術也常用在伺服器傳送檔案的時候,把檔案傳送到客戶端之前先丟到一個緩衝的暫存上面。
參考資料 [编辑]
- ^ Peter Snyder. tmpfs: A Virtual Memory File System (PDF). [2007-05-07].
- ^ Hal L. Stern. SunOS 4.1 Performance Tuning (GZipped PostScript). [2007-05-07].
- ^ Daniel Robbins. Advanced filesystem implementor's guide. September 1, 2001 [2007-05-07]. 說明 Linux 的應用方式的文章
- ^ CIAC. F-27: Incorrect Permissions on /tmp. August 17, 1995 [2008-11-17]. 常見一個 /tmp 底下典型的安全漏洞
- ^ Julio M. Merino Vidal. NetBSD-SoC: Efficient memory file-system. February 24, 2006 [2007-05-07].
- Documentation/filesystems/tmpfs.txt documentation in Linux source tree
- tmpfs(7FS) Solaris 10 man page
- mount_tmpfs(8) NetBSD man page