Tmpfs

tmpfs(英語:temporary file system) 是類Unix系統上暫存檔儲存空間的常見名稱,通常以掛載檔案系統方式實現,並將資料儲存在揮發性記憶體而非永久儲存裝置中。和RAM disk的概念近似,但後者會呈現出具有完整檔案系統的虛擬磁碟。

詞語定義

所有在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,除了這些檔案會被寫入到特定的低記憶體位置而不是置換空間去。這個技術也常用在伺服器傳送檔案的時候,把檔案傳送到客戶端之前先丟到一個緩衝的暫存上面。

參考資料

  1. ^ Peter Snyder. tmpfs: A Virtual Memory File System (PDF). [2007-05-07]. (原始内容 (PDF)存档于2012-05-01). 
  2. ^ Hal L. Stern. SunOS 4.1 Performance Tuning. [2007-05-07]. (原始内容 (GZipped PostScript)存档于2012-05-01). 
  3. ^ Daniel Robbins. Advanced filesystem implementor's guide. September 1, 2001 [2007-05-07]. (原始内容存档于2007-06-22).  說明Linux的應用方式的文章
  4. ^ CIAC. F-27: Incorrect Permissions on /tmp. August 17, 1995 [2008-11-17]. (原始内容存档于2008-12-10). 常見一個 /tmp底下典型的安全漏洞
  5. ^ Julio M. Merino Vidal. NetBSD-SoC: Efficient memory file-system. February 24, 2006 [2007-05-07]. (原始内容存档于2012-05-01). 
  • Documentation/filesystems/tmpfs.txt[永久失效連結] documentation in Linux source tree
  • tmpfs (7FS) Solaris 10 man page
  • mount_tmpfs (8)(页面存档备份,存于互联网档案馆) NetBSD man page

磁盘
  • ADFS英语Advanced Disc Filing System
  • AdvFS
  • Amiga FFS英语Amiga Fast File System
  • Amiga OFS英语Amiga Old File System
  • APFS
  • AthFS英语AtheOS File System
  • Bcachefs
  • BFS
    • Be文件系统英语Be File System
    • 启动文件系统英语Boot File System
  • Btrfs
  • DFS英语Disc Filing System
  • EFS
  • Episode英语Episode filesystem
  • ext
  • FAT
  • Files-11英语Files-11
  • Fossil
  • HAMMER英语HAMMER
  • HFS
  • HFS+
  • HPFS
  • HTFS英语High Throughput File System
  • IBM通用并行文件系统英语IBM General Parallel File System
  • JFS
  • LFS英语Log-structured File System (BSD)
  • MFS
    • Macintosh文件系统英语Macintosh File System
    • Tivo媒体文件系统英语Tivo Media File System
  • MINIX
  • NetWare文件系统英语NetWare File System
  • Next3英语Next3
  • NILFS英语NILFS
    • NILFS2英语NILFS2
  • NSS英语Novell Storage Services
  • NTFS
  • OneFS英语OneFS distributed file system
  • PFS英语Professional File System
  • QFS英语QFS
  • QNX4FS英语QNX4FS
  • ReFS
  • ReiserFS
    • Reiser4英语Reiser4
  • Reliance英语Reliance (file system)
  • Reliance Nitro英语Reliance Nitro
  • RFS
  • SFS英语Smart File System
  • Soup英语Soup (Apple)
  • Tux3英语Tux3
  • UBIFS
  • UFS
  • VxFS英语Veritas File System
  • WAFL英语Write Anywhere File Layout
  • Xiafs英语Xiafs
  • XFS
  • Xsan英语Xsan
  • zFS英语zFS (z/OS file system)
  • ZFS
  • HSF英语High Sierra Format
  • ISO 9660
  • ISO 13490英语ISO 13490
  • UDF
  • CXFS英语CXFS
  • GFS2英语GFS2
  • Google檔案系統
  • OCFS2英语OCFS2
  • OrangeFS英语OrangeFS
  • PVFS英语Parallel Virtual File System
  • QFS英语Quantcast File System
  • Xsan英语Xsan
  • 更多...
NAS
特殊
  • Aufs
  • AXFS英语AXFS
  • 启动文件系统英语Boot File System
  • CDfs英语CDfs
  • 光盘文件系统英语Compact Disc File System
  • Cramfs
  • Davfs2英语Davfs2
  • EROFS
  • FTPFS
  • FUSE
  • GmailFS
  • Lnfs
  • LTFS英语Linear Tape File System
  • MVFS英语Rational MultiVersion File System
  • SquashFS
  • UMSDOS英语FAT filesystem and Linux
  • OverlayFS
  • UnionFS英语UnionFS
  • WBFS英语WBFS
  • configfs英语configfs
  • devfs英语Device file
  • debugfs英语debugfs
  • kernfs英语kernfs (BSD)
  • procfs
  • specfs
  • sysfs
  • tmpfs
  • WinFS
加密英语Filesystem-level encryption
类型
  • 集群
    • 全局英语Global file system
    • 网格英语Grid File System
    • 自我认证英语Self-certifying File System
  • 闪存
  • 日志
  • 日志结构英语Log-structured file system
  • 对象
  • 面向记录英语Record-oriented filesystem
  • 语义英语Semantic file system
  • 隐写英语Steganographic file system
  • 合成英语Synthetic file system
  • 版本英语Versioning file system
特性
访问控制英语Computer access control
接口