採用 tmpfs 作為 /tmp
1. 引言
tmpfs 是一個不存在於實體硬盤上、而是駐在記憶裡的特殊檔案系統。其中一個副作用就是當你失去電源(或重就開機)時,tmpfs 上的一切內容都會消失。對於 /tmp 來說這不是一個問題,因為 Linux 的檔案系統架構指定 /tmp 內的資料在重新開機後可能不復存在。作為一個附註:我個人經常確保 /tmp 在重新開機時被清理乾淨,因為上次開機時遺留下來的資料(鎖定檔案等)可能會引起問題。
由於記憶體現在已經頗便宜,將 /tmp 放置在 tmpfs 上有數個好處:
- 由於 tmpfs 駐守在記憶體裡,它的速度極快。它的尋覓時間與駐守在硬盤上的一般檔案系統根本無法相比。舉個例說,tmpwatch 採用 atime 這個屬性,但這屬性經常基於效率的原故而在普通檔案系統上被停用。在 tmpfs 上使用 atime 所帶來影響卻很輕微。
- 這個檔案系統在開機時會已被自動清理
2. 實際細節
到底這一切如何運作?tmpfs 在內核快取頁的空間裡建立一個虛擬檔案系統。言下之意,就是 tmpfs 與快取頁都位於記憶鏈的最低層。一旦系統上執行的應用程式填滿所有不屬快取的記憶體,快取空間便會開始縮小,直至用盡為止。當快取頁無法再容納 tmpfs,它便會被推進調換檔。這樣便抵銷了它在速度上的優勢,因為 tmpfs 到時會存在於慢速的硬盤上,而不再在高速的記憶體裡。
你需要確定你的調換檔有足夠空間來應付這種情況(或者確定你擁有大量記憶體來避免它被推進調換檔內)。所以,你的調換檔基本上要應付正常的調換量(作為記憶體的代用品),加上你的 tmpfs 的最大容量。
3. 實踐方法
3.1. 第 1 步
將 /tmp 放置在 tmpfs 上是一個甚為簡易的動作。利用你喜歡的編輯器開啟 /etc/fstab,並指定你想將 /tmp 放置於 tmpfs 內:
tmpfs /tmp tmpfs size=512m 0 0
這樣便成了!
size=512m 代表檔案系統的最大容量。當然,你應該選擇一個迎合你的需要/系統的大小。128m 對大部份人來說應該已足夠了。這個容量並非一次性地分配出來的,而是按存在於 /tmp 上的資料多寡進行動態分配的。
你也許會想在 fstab 內另外加插的旗標包括:
- noexec —— 防止別人執行 /tmp 裡的程式。有些 root 會這樣做。這個旗標有可能會為某些合法的程式帶來問題,因此請在測試妥當後才設定這個旗標。
- nosuid —— 防止在 /tmp 裡的檔案上設定 setuid 位元。
3.2. 陷阱
隨內核而來的 tmpfs「官方」文件指「某些人仕(包括我在內)發現將它掛載在 /tmp 及 /var/tmp 等位置,然後提供一個大的調換檔是個很方便的做法」。
我個人不會建議將 /var/tmp 放在 tmpfs 上。我發出這個忠告是基於以下原因:FHS(檔案系統架構規格)指明 /var/tmp 是為那些「需要過渡系統重新啟動的暫存檔」而設的。既然 tmpfs 內的資料在重新開機後不復存在,將 /var/tmp 放置在 tmpfs 上便會令你的系統與 FHS 無法兼容。這樣做可能會導致應用程式失效或不正常地運作。
Translation of revision 6