把Debian放進RAM裡面開機
這是真的。Minecraft是我從高職時期來一直有在接觸的遊戲,還和好友一起架設伺服器,與其他朋友們一起遊玩同一個世界,隨著電腦網路知識的增長,伺服器的作業系統也從一開始的Windows,轉換到Ubuntu,最後選擇了更輕量、簡潔的Debian,說真的Minecraft server只不過需要個簡單的OS管理硬體資源和網路,然後提供Java的執行環境而已。 幾年前,筆者正在服兵役時,接到朋友通知「伺服器連不上了!」,起初我還以為是個玩笑,我們常常用這個梗嚇嚇對方。但看他一臉認真的樣子,看起來是真的不妙,趁著休假時實際將螢幕插上server,結果發現卡在initramfs,寫著kernel panic .... 原來是停電造成OS檔案系統損毀開不了機。 除了加裝UPS,讓sever能在停電時妥善關機之外,也讓我有個發想:如果server能像Wi-Fi AP一樣,隨時拔插頭都不會壞,那該有多好? 如果storage放的檔案是唯讀的,那麼是不是就不會有寫到一半突然斷電,資料損毀的問題了? 如果OS檔案放在隨身碟,開機時通通倒進RAM裡面執行,是不是就能達到我要的目的了? 是的,於是第一版放進RAM執行的Debian就這麼誕生了 ... 花了幾天把一般x86-64的Linux開機流程弄清楚,在VirtualBox裡面安裝一個完整的Debian,然後把rootfs包成壓縮檔,開機時透過魔改過的initramfs解壓縮到RAM裏頭,並將RAM(tmpfs)掛在/,這麼一來所有的寫入、變更都是在RAM裏頭進行,隨身碟的檔案完全就是唯讀的。rootfs包成壓縮檔最大的好處就是,利用隨身碟連續讀取很快的特性,來加快開機速度。 https://github.com/danchouzhou/ramfs 由於東西都是寫進RAM而已,所有變更都會在重新開機以後全部重來,因此我透過startup script的方式,讓開機自動執行我們所需的變更。簡單說就是,OS的壓縮檔可以不用重新打包,user要做的變更放在startup script裡面,每次開機就自動重作一遍,自動執行也在RAM裡面執行,所以也沒有要等很久的情況,而且server也不會常常重開機;由於user能很輕易地透過一支start.sh自訂功能,很容易備份、復原功能,不小心...