pseudoyu

pseudoyu

Blockchain | Programming | Photography | Boyi
github
twitter
telegram
mastodon
bilibili
jike

當雲伺服器崩潰時,我是如何救援重要數據的

前言#

周五的時候我在搬瓦工平台購買的 2C2G 伺服器突然內核報錯,連不上 ssh 也無法重啟。經過了迂迴的各種搶救方案,終於救回了一千多張圖床的圖片,心有餘悸,記錄一下救援過程,順便折騰了一套新的圖床方案。

伺服器救援#

這台伺服器大約已經穩定運行了一年半,運行了我許多重要服務,還有我博客圖床的一千多張無備份的圖片通過 Docker Volume 持久化在主機上。

伺服器宕機#

其實我至今仍不知道出了什麼問題,早上剛好需要更新伺服器上的我運行的 RSSHub 實例的鏡像版本,於是想着乾脆把所有服務都更新到最新吧,於是一通 docker pulldocker-compose 重啟操作,前面的都沒什麼問題,直到最後一個服務突然啟動容器失敗,報了一個類似 not enough space 的錯誤,我心想着可能是下載的鏡像太多了導致磁碟滿了,於是又一通 docker image prune --alldocker volume prunedocker system prune 操作,釋放出了接近 10G 的空間,重試,依然不行。

作為一個有且僅有一點伺服器運維經驗的開發來說,我第一反應想到的就是重啟,未曾想,這才是一天噩夢的開始。

uptime_kuma_status

沒想到重啟後我的 Uptime Kuma 提醒我所有服務都下線了,也無法再通過 ssh 連上機子了。

bwg_kernel_panic

於是趕緊登錄到搬瓦工的線上控制台,發現內核報錯,無法啟動,強制重啟也依然不生效,於是先提交了一個工單,並且趕緊求援我的 DevOps 朋友們。

拯救數據#

ask_strrl_about_vps

STRRL 說應該 rootfs 出現了問題,不過鑑於這種小雲廠商並沒有提供什麼高級啟動等額外的功能,只能等官方技術支持處理了,但想到我有一年半毫無備份的圖床數據在上面,依然很慌,於是開始想辦法搶救數據。

bwg_vps_snapshot

研究了一下搬瓦工的控制台,發現它提供一個大約每週一次的備份,並且可以一鍵將備份轉為快照,最近的一次在 6.22 日,還好。我首先想到的是直接通過快照恢復機器,如果是我今天的操作導致了什麼配置問題,那理應一週前的快照是能正常啟動的,於是滿懷信心地等待了十幾分鐘的快照恢復,結果依然報了同樣的錯誤。依然不死心,把 6.15 的備份也恢復了一下,依然不行。

這下意識到了事情的嚴重性,甚至做好了數據全部丟失的最壞打算,但在等待工單回覆時開始檢索類似情況,最後發現搬瓦工機器的快照鏡像是可以下載的,並找到了一篇「搬瓦工備份快照鏡像文件 .tar.gz 下載解壓後打開 .disk 文件查看數據教程」。

於是先下載了快照鏡像,得到了個 .disk 文件,這個文件應該是一個專屬格式,看教程可以通過 Virtual Box 的命令行工具 vboxmanage convertfromraw 來進行格式轉換,但官网下载後發現並不支持 M 芯片的 Mac,於是又在之前的老 19 款 Intel Mac 上安裝並且執行轉換,得到了個 .vmdk 文件。

轉換完成後將這個 .vmdk 作為一個磁碟掛載到 Virtual Box CentOS 虛擬機上,發現依然報同樣的錯誤。

7zip_format

於是另辟蹊徑,發現 7-Zip 軟體支持常見虛擬機格式的解壓,但客戶端只有 Windows 版本。

x7z_vmdk_x

雖然按理說可以在 macOS 上使用命令行版本 p7zip 來執行,但我解壓時會報錯,所以又堵住了一條路,想了個曲線救國的方式,通過虛擬機下載了一個 Win11,下載了 7-Zip 軟體直接解壓成功了。

fuse_load_img

問題又來了,得到的是 1.img2.img 這樣格式的 Linux 磁碟鏡像文件,macOS 上無法加載,又問了我司運維朋友,折騰了一下 fuse 但是還是無法加載。

ufs_load_img_log

期間倒也是有好消息,在全網搜羅的時候發現了一個數據恢復軟體 UFS Explorer,嘗試了一下可以正常加載,只是超過 768k 的文件則需要付費,當然沒打算,只是看到文件確實是可以識讀之後心裡就安心了許多,至少數據還在,剩下都是技術問題了。

bwg_reply

期間搬瓦工的工單也恢復了,讓我重啟或重裝試試。。。🤣

str_orbstack_img

放棄了工單溝通,繼續搶救我 img 中的數據,萬能的 STRRL 告訴我 OrbStack 可以啟動一個 Linux Machine,然後可以把這個 img 作為一個 Linux 磁碟掛載上去。

sudo losetup -fP 1.img
mkdir /mnt/bwg
sudo mount /dev/loop0 /mnt/bwg

通過以上命令成功把我的 img 磁碟鏡像掛載到了 OrbStack 的 Ununtu 機器上。

rescue_image_from_bwg_img

當我看到我的圖片出現在命令行輸出結果時,感動得都快流淚了 😭。

tar -czvf cheverto_chevereto_images.tar.gz cheverto_chevereto_images/
rsync -acvP ./cheverto_chevereto_images.tar.gz pseudoyu@[yu-mac-studio]:~/Downloads/

rsync_service

緊接著趕緊打個 tar 包,然後通過 rsync 傳到了我本地的 Mac 上,本機解壓後,終於看到了我所有的圖片。

遷移圖床系統至 r2#

但由於這一次的遭遇,不再信任伺服器單機部署的圖床穩定性了,花了半天折騰了一套新的免費圖床系統 —— 「從零開始搭建你的免費圖床系統 (Cloudflare R2 + WebP Cloud + PicGo)」。

rclone_service

至於現有的數據傳到 r2,我則是使用了 rclone 來進行上傳,徹底完成遷移,大功告成!

總結#

也開始重新考慮了服務部署、數據安全等問題,準備還是將一些重要的數據上雲而不再依賴單機,也繼續把一些服務遷移到 fly.io、Zeabur 等 serverless 平台。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。