LWN:Debian切換 /tmp 引來的討論!
共 4955字,需瀏覽 10分鐘
·
2024-06-17 13:38
關(guān)注了就能看到更多這么棒的文章哦~
Debian's /tmpest in a teapot
By Joe Brockmeier
June 3, 2024
Gemini-1.5-flash translation
https://lwn.net/Articles/975565/
Debian 在 2012 年進(jìn)行了一場關(guān)于將 /tmp 作為 RAM-based tmpfs 掛載的重大討論 (討論), 但最終慣性占了上風(fēng)。Debian 系統(tǒng)默認(rèn)情況下繼續(xù)將臨時(shí)文件存儲(chǔ)在磁盤上。直到現(xiàn)在。僅僅 12 年后,該項(xiàng)目將在 Debian 13 ("Trixie") 版本中切換到 RAM-based /tmp 。此外,從 Trixie 開始,默認(rèn)情況下將定期自動(dòng)清理 /tmp 和 /var/tmp 中的臨時(shí)文件。當(dāng)然,這首先需要經(jīng)過長時(shí)間的討論。
加入派對
到目前為止,將 tmpfs 用于 /tmp 目錄已是一條被廣泛接受的道路。許多 Linux 發(fā)行版已經(jīng)切換到將 /tmp 作為 tmpfs 掛載。Arch Linux、Fedora、openSUSE Tumbleweed 和許多其他發(fā)行版都進(jìn)行了切換。Red Hat Enterprise Linux (RHEL) 及其克隆,以及 SUSE Linux Enterprise Server (SLES) 和 openSUSE Leap,仍然默認(rèn)將 /tmp 存儲(chǔ)在磁盤上。Ubuntu 遵循 Debian,也繼續(xù)使用基于磁盤的 /tmp ,而不是使用 tmpfs。
控制 /tmp 掛載方式和臨時(shí)文件處理方式的設(shè)置開關(guān)是 systemd 的一部分(當(dāng)然,在使用 systemd 的系統(tǒng)上。)systemd 的上游默認(rèn)設(shè)置是將 /tmp 作為 tmpfs 掛載,并在 /tmp 中刪除未在 10 天內(nèi)讀取或更改的文件,并在 /var/tmp 中刪除未在 30 天內(nèi)讀取或更改的文件。Debian 開發(fā)者和 systemd 貢獻(xiàn)者 Luca Boccassi 最近決定是時(shí)候重新審視將 /tmp 作為 tmpfs 的話題,以及討論是否開始刪除 /tmp 和 /var/tmp 中的臨時(shí)文件了。
5 月 6 日,Boccassi 復(fù)活了 Debian 的錯(cuò)誤追蹤系統(tǒng)中的一段討論,該討論始于 2020 年,并在 2022 年 7 月沒有達(dá)成共識(shí)的情況下逐漸消失。該錯(cuò)誤是由 Eric Desrochers 提交的,他 抱怨 Debian 的 systemd 實(shí)現(xiàn)在默認(rèn)情況下不清理 /var/tmp 。Michael Biebl 寫道:這是一個(gè)故意選擇,是為了匹配 Debian 在 systemd 之前的行為。在長時(shí)間的停滯之后,Biebl 建議 在 2021 年 10 月(以及 再次 于 2022 年 7 月提出)Desrochers 在 Debian devel 郵件列表中提出這個(gè)話題。這件事從未發(fā)生。
在重新提起這個(gè)話題時(shí),Boccassi 宣稱,是時(shí)候?qū)?Debian 的默認(rèn)設(shè)置與上游和其他 Linux 發(fā)行版保持一致了,方法是將 /tmp 設(shè)為 tmpfs,并使用 timer 定時(shí)清理 /tmp 和 /var/tmp 。他計(jì)劃在未來一周內(nèi)將這些更改應(yīng)用到下一個(gè)上傳到 Debian 不穩(wěn)定版本的 systemd 中,并在 NEWS 文件中提供說明,說明如何為任何希望保留當(dāng)前行為的用戶來把這些更改覆蓋掉。這反過來引發(fā)了一場相當(dāng)激烈的討論。
贊成和反對的理由
Biebl 擔(dān)心 默認(rèn)情況下清理臨時(shí)文件的影響。他說,目前,Debian 僅在啟動(dòng)時(shí)清理 /tmp (如果 /tmp 是一個(gè) RAM-based tmpfs,則沒有必要),并且永遠(yuǎn)不會(huì)清理 /var/tmp 中的文件。Boccassi 回答:“默認(rèn)值是默認(rèn)值,它們在需要時(shí)可以很容易地完全覆蓋?!?Biebl 回答 說,在 Linux 發(fā)行版之間統(tǒng)一默認(rèn)值是有價(jià)值的,但他認(rèn)為 Debian 的““范圍更大””比 Fedora 這樣的桌面發(fā)行版。他建議有必要““收集所有受影響方的反饋以做出明智的決定”。 Boccassi 回應(yīng) 說,不可能制定出讓每個(gè)人都滿意的默認(rèn)值,他不希望進(jìn)行假設(shè)性的爭論或哲學(xué)上的討論,他想要事實(shí):“哪些地方會(huì)失效,以及如何修復(fù)?”
Sam Hartman 注意到 ssh-agent 在 /tmp 下創(chuàng)建了它的套接字,但如果它尊重 $XDG_RUNTIME_DIR 設(shè)置并在 /run/user 下創(chuàng)建它的套接字會(huì)更好。Boccassi 同意 并說他已經(jīng)針對 ssh-agent 提交了一個(gè)bug 。Richard Lewis 指出 tmux 將其套接字存儲(chǔ)在 /tmp/tmux-$UID 中,刪除這些文件可能意味著用戶無法重新連接到長時(shí)間處于空閑狀態(tài)的 tmux 會(huì)話。Boccassi 建議 使用 flock() 將是阻止刪除的正確解決方案,并 說 他已經(jīng) 提交了一個(gè)錯(cuò)誤 關(guān)于這件事。
Lewis 質(zhì)疑 是否使用 apt source 下載的文件在 /tmp 下解壓縮并立即標(biāo)記為要?jiǎng)h除時(shí)可能被認(rèn)為是“舊”的。Russ Allbery 說 systemd-tmpfiles 將尊重訪問時(shí)間戳 (atime) 和更改時(shí)間戳 (ctime),而不僅僅是修改時(shí)間戳 (mtime),“所以我認(rèn)為這只會(huì)成為文件系統(tǒng)不支持這些屬性的問題”。Allbery 說他相信 tmpfs 支持所有三種時(shí)間戳。
有些人將信息存儲(chǔ)在 /var/tmp 中以供長期運(yùn)行的作業(yè)使用,因?yàn)樗麄兿M诓贿M(jìn)行備份的情況下保存這些信息,Barak A. Pearlmutter 說。Boccassi 駁斥這一點(diǎn),他說,那些用戶“假設(shè)他們真的存在”,可以根據(jù)自己的需要自定義系統(tǒng)默認(rèn)值。
這些用戶確實(shí)存在,Jonathan Dowland寫道 ,“[我]一直是其中之一,我與許多人合作過,這是學(xué)術(shù)計(jì)算中非常普遍的模式”。對這些文件的處理方式進(jìn)行更改,“應(yīng)該是一個(gè)經(jīng)過認(rèn)真探索的決定”。他還要求提供支持更改的論據(jù),并要求推遲更改以讓討論繼續(xù)進(jìn)行。
Hartman 希望 是不是能指定 /var/tmp 下的目錄應(yīng)該被完全刪除或保留。Boccassi 說這是一個(gè)合理的增強(qiáng)請求,并且已經(jīng)在上游提交給 systemd。
Allbery 最終承認(rèn)驚訝于報(bào)告使用 /var/tmp “用于明顯不是傳統(tǒng) UNIX 意義上的臨時(shí)文件”的人數(shù)之多。他說,定期刪除 /var/tmp 中的文件至少是 30 年來的常見 UNIX 實(shí)踐:
無論我們對
/var/tmp保留做什么,我都懇請人們停止將/var/tmp用于您保留超過幾天并且不希望丟失的數(shù)據(jù)。這不是它的用途,您 總有一天 會(huì)在 某個(gè)地方 中招,因?yàn)榧词乖诂F(xiàn)有的 Debian 配置下,許多人也會(huì)運(yùn)行 tmpreaper 或類似的程序。如果您正在運(yùn)行一個(gè)產(chǎn)生您關(guān)心的數(shù)據(jù)的長期運(yùn)行任務(wù),請為此創(chuàng)建一個(gè)目錄,無論是在您的主目錄、/opt、/srv還是其他地方。
Hakan Bay?nd?r 說 他沒有使用 /var/tmp ,但其他人使用的應(yīng)用程序會(huì)使用它。他引用了一個(gè)高性能的科學(xué)應(yīng)用程序,該應(yīng)用程序不受他或其他用戶的控制。Allbery 認(rèn)為這是一個(gè)“不好的設(shè)計(jì)決策”,但他承認(rèn)如果用戶或管理員無法控制應(yīng)用程序的設(shè)計(jì),這可能沒有幫助。但是,他說,以這種方式使用 /var/tmp “是在玩火”,并且“最終會(huì)導(dǎo)致某些人的數(shù)據(jù)在某個(gè)時(shí)刻被刪除,無論 Debian 做什么”。
Lewis 說他仍然不明白更改的理由。他問道:“也許除了‘其他發(fā)行版和上游已經(jīng)這樣做了’之外,還有更令人信服的理由嗎?” Allbery 說,這聽起來像是最初的理由,但他補(bǔ)充說,將 /tmp 移到 tmpfs 應(yīng)該會(huì)使應(yīng)用程序運(yùn)行得更快,并且收獲 /var/tmp 下的文件可以幫助避免填充分區(qū)。他指出,允許分區(qū)填滿會(huì)導(dǎo)致郵件被拒收、服務(wù)不穩(wěn)定以及其他問題。這可能對桌面系統(tǒng)來說不是問題,桌面系統(tǒng)往往有足夠的磁盤空間不受影響,但對于將 /var/tmp 包含在小型根分區(qū)中的虛擬機(jī)來說,這仍然是一個(gè)問題。
推出更改
最終,所有維護(hù) Debian 現(xiàn)狀的論據(jù)都沒有說服 Boccassi 改變主意。5 月 28 日,Boccassi 宣布了他所做的更改,并將其上傳到不穩(wěn)定版本。正如預(yù)期的那樣, /tmp 默認(rèn)情況下將成為一個(gè) tmpfs,適用于 Debian 不穩(wěn)定版本的新安裝和現(xiàn)有安裝。新安裝將使用 systemd 的默認(rèn)行為。他說, openssh 和 tmux 軟件包已經(jīng)修復(fù),以提供例外情況以保留其臨時(shí)文件。在 Debian 安裝程序中添加了一個(gè)描述,通知用戶 /tmp 默認(rèn)情況下是一個(gè) tmpfs,并且這些更改已在 NEWS 文件中記錄。他還提議審查并合并對 Debian 安裝程序的任何更改,以便用戶在安裝過程中自定義這些選項(xiàng)。想要將 /tmp 保留在磁盤上的用戶可以使用 systemctl mask tmp.mount= 覆蓋上游默認(rèn)值。要停止對 /tmp 和 /var/tmp 的定期清理,用戶可以運(yùn)行 touch /etc/tmpfiles.d/tmp.conf 。
需要指出的是,所有這些更改都不會(huì)影響 Trixie 之前的 Debian 版本。Debian 穩(wěn)定版和舊穩(wěn)定版用戶只有在升級時(shí)才會(huì)遇到這些更改。
如前所述,許多發(fā)行版已經(jīng)在沒有造成災(zāi)難的情況下進(jìn)行了這些更改。Debian 及其用戶應(yīng)該能夠適應(yīng)新的默認(rèn)值,或者在默認(rèn)值不適合要運(yùn)行的工作負(fù)載時(shí)覆蓋它們。最糟糕的情況是,這只會(huì)帶來暫時(shí)的不便。
全文完
LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。
長按下面二維碼關(guān)注,關(guān)注 LWN 深度文章以及開源社區(qū)的各種新近言論~
