關於 KDE 專案原始碼險些全毀事件……

在我們目前所處的這個年代裡,開放原始碼已經成為一種相當重要的軟體開發模式,許多由社群或是企業所主導的專案都是依此而生,例如 Linux、Mozilla 等。在網路上也可以看到新的(或者衍生出的)開源碼專案幾乎是時時刻刻的在產生,任何人只要能夠建構出原始碼的管理平台,就可以啟動專案,然後開始讓多人協同開發。

 

不過長年以來,似乎缺乏案例來檢視這些開發專案對於「災難避免與復原」的能力,直到最近 KDE 專案的管理人員爆出了其原始碼「差點全毀」的事件,而這裡頭所蘊含的資訊應該可以作為一些借鏡。

 

Linux 桌面系統的使用者應該都很熟悉 KDE 這項專案,因為 KDE 最主要的工作成果就是同名的 KDE 桌面環境,而這款桌面環境已經被包含在許多 Linux 發行版裡。儘管 KDE 未必是規模最大的開放原始碼專案,不過由於整個 KDE 專案幾乎囊括了一款桌面系統所應具備的所有軟體(辦公、多媒體、網路、繪圖甚至是遊戲等等),因此它事實上還包含了許多子專案。所以這項專案在原始碼管理的數量與複雜性上仍然是很龐大的。

 

KDE 使用 Git 作為原始碼的管理系統,然後使用 Git 本身的鏡像(mirror)功能,將資料鏡像到各地的次要伺服器上。故事發生於某日 KDE 的主要 Git 伺服器(是虛擬機器)進行了安全性更新,重開機後其 ext4 檔案系統發生錯誤,這使得 Git 產生了新的、錯誤的專案檔,並造成所有的次要伺服器在鏡像時根據新的專案檔清除了所有本地的內容……也就是說,主要與次要 Git 伺服器裡頭的資料在一夕之間全數蒸發。

 

等到管理人員注意到時,災難已經造成,雖然事實上 KDE 專案有自動化的定期將原始碼打包備份,但這樣的備份內容只有最新版本的原始碼本身,而不包含 Git 系統裡大量的修訂記錄等資料。幸運的是,在事發之前沒多久,因配合資料中心的更新計畫,KDE 專案加入了一部新主機,並同步了原本 Git 伺服器的所有資料,而這部新主機在事發之後還沒有跟著同步到最新狀態,讓管理人員得以找回原本的 Git 內容,也讓整起事件能夠成為「險些」全毀事件……

 

這起事件後,KDE 的管理人員對於後續的檢討包含了:應該加上一些檢查機制來防止主要的 Git 伺服器輸出錯誤的內容給次要伺服器,以及增加新的備份方式。由於 KDE 是個主要由社群維護的專案,其設備主要仰賴捐贈,所以備份方案的制定還是得考量到儲存空間、頻寬以及硬體效能的限制。目前其中一種可能會採用的備份方式是改用 ZFS 檔案系統,然後使用 ZFS 的快照(snapshot)功能備份。

 

以上對於事件的敘述是 DR 根據其中一名管理人員所發佈的兩篇文章:「Too Perfect A Mirror」以及「Screw The Mirrors」來撰寫的,大部分的媒體網站在報導這起事件時也多半是根據這兩篇文章。然而這兩篇文章後來被原作者撤下來了,改換成比較乾淨、簡潔,但同時在細節上也比較沒那麼具體的這一篇:Distillation

 

所以有些部份 DR 是根據「印象」寫的,如有偏差請見諒。至於其它剩餘的資訊就請直接參閱作者目前的文章吧。

 

分類: