經典美劇《老友記》(又名《六人行》)第九季第 20 集,妮娜·安妮絲頓飾演的瑞秋在樓頂舉行派對時使用的表情符號,究竟有多火爆?答案遠超想像。這枚表情符號體積僅 1.6 MB,卻深受網友喜愛,在 Discourse 社交平台上被重複使用達 246173 次。每次使用都會產生備份,最終形成 377 GB 的冗餘備份,以及超過 24 萬次的硬連結,直接衝破 Linux 檔案系統容量限制,導致備份機失效。
Discourse 安全機制的意外漏洞
Discourse 作為開源軟件項目,為超過 2.2 萬個線上社群提供技術支援,包括即時聊天功能支援插入表情符號和 GIF 動圖。但它有一個特殊的「安全上限」機制:當檔案在不同安全場景間轉移,例如從私訊轉發至公開帖子時,系統會生成帶有隨機 SHA1 雜湊值的副本。即使檔案內容完全未變,Discourse 仍視其為全新檔案。因此,若熱門圖片或表情符號在帖子、轉發、私訊中不斷流傳,每次都會產生新副本。
Discourse 早察覺重複檔案儲存爆炸問題,最初解決方案是透過檔案 Hash 值追蹤原始檔案,備份時按 Hash 值歸組,每組僅下載第一個檔案,重複檔案則建立硬連結。這看似不錯且高效,但 Discourse Linux 系統使用最普及、最老牌的 ext4 檔案系統,支援單一檔案最大 16 TB、檔案系統 1 EB,卻限制每個檔案最多 65000 個硬連結。
因此,無法讓 24 多萬重複檔案僅下載一次,達上限後,系統除首次下載外,還進行約 18.1 萬次備份下載。問題不在龐大備份檔案,而在瘋狂硬連結數量。 值得慶幸的是,Discourse 最終找到完美解決方案,仍是建立硬連結,但當檔案系統發出「連結數過多」的 EMLINK 錯誤提示時,即在本機複製一份對應檔案,並將新檔案設為「主檔案」,以其為基準繼續建立硬連結,直至再次觸頂。
Discourse 滿意表示,此新措施適用所有檔案系統,無需額外配置。在無法修改檔案系統的前提下,這完全可接受。目前,妮娜·安妮絲頓的表情符號仍能測試伺服器壓力。




