最近,一個1.6MB的《六人行》表情包被用246173次,占用377G直接干崩了Discourse使用的Linux系統。
這個引發風波的表情包,源自經典美劇《六人行》。劇中由詹妮弗・安妮斯頓飾演的瑞秋,在得知要在樓頂舉辦肥皂劇主題派對時歡呼雀躍的瞬間,被截成了這張廣為流傳的表情包。

這個表情包在被使用超24萬次後,硬生生占用了377G空間,直接導致Discourse使用的Linux系統崩潰。
Discourse是一款知名的開源社區軟體。該平台存在一個特殊的「安全上傳」機制:當文件在不同安全場景間流轉時,系統會自動生成一個附帶隨機SHA1加密值的全新副本。即便文件內容完全一致,Discourse仍會將其判定為全新文件。

事實上,Discourse早已察覺到重複文件占用存儲空間的問題。但最初的解決方法卻忽略了一個關鍵限制:Discourse所依賴的Linux系統採用的是古早的ext4文件系統。該文件系統對單個文件的硬鏈接數量設有上限,最多僅允許65000個。

因此,Discourse原有的方案無法實現24萬多個重複文件只備份一次。在觸及硬鏈接上限後,系統除首次完整備份外,還額外執行了約18.1萬次完整文件備份下載,這直接導致了伺服器的崩潰。
所幸,Discourse團隊最終找到了完善的解決方案:當文件系統返回「鏈接數過多」的EMLINK錯誤時,系統會在本地複製一份該文件,並將新複製的文件設為新的 「主文件」,以此為基礎繼續創建硬鏈接,直至再次達到鏈接數上限。

Discourse團隊表示,這一新機制能夠兼容所有文件系統,且無需用戶進行額外配置。事後,Discourse官方還不忘幽默調侃:詹妮弗・安妮斯頓居然還能用來測試伺服器抗壓能力。






