沒有執行過rm -rf /*的開發不是好運維
沒有執行過rm -rf /*的開發不是好運維
起因
突然收到使用者反饋說網站在手機端開啟是白屏, 很奇怪的問題.
在電腦端試了下,確實也是白屏,HTML載入進來了,好像有個核心JS載入失敗.
看到一個錯誤是: We're sorry but house doesn't work properly without JavaScript enabled. Please enable it to continue.
還有一個http請求的錯誤是: ERR_INCOMPLETE_CHUNKED_ENCODING
於是嘗試了一下的解決方案:
無腦重啟看看能不能解決問題?重啟了一下對應Docker容器,無果
可能是現在版本引入的Bug?回滾程式碼重新build,無果.
nginx的問題? 重啟nginx,無果.
檢視nginx日誌,沒什麼有用的東西,無果.
靈機一閃,不會是磁碟空間滿了吧.
df -h 看了一眼,99.99%的磁碟使用率.
某個Docker容器的磁碟空間用掉了34G.
看一眼Docker容器,直覺告訴我應該是Elasticsearch服務...
不算太重要的服務,先停了清理空間再說.
刪掉了容器刪了data檔案,重啟nginx,一切都正常Work了.
問題解決!!!
不過Elasticsearch總要重新回覆回來嘛,看了下騰訊云云硬碟盤價格,也不是很貴嘛.
單獨給Elasticsearch 起個數據盤吧.
作死開始
首先根據騰訊雲的指示,掛在了資料盤到伺服器上面.
然後給資料盤分割槽,接著mount到對應的路徑.
嗯,好像有個警告.
難道不是這個磁碟麼?換另外一個看看.
執行另外一個mount.
全程命令如下:
進入對應目錄清空一下雲盤資料吧.(PS:腦子有病才做這個,剛剛初始化的雲盤哪有東西.)
ls 看一下,咋這麼多奇奇怪怪的檔案,難道是原來Elasticsearch docker 容器留下來的.
先刪了再說.
執行 rm -rf ./*
咦,怎麼有檔案busy無法刪除.
額,咋ls都沒有了.
哈?cat 也沒有了.
噗,copy也炸了.
cd 還在.
哇卡,這可咋辦了.
先覆盤一下做了什麼事情
初始化磁碟的時候沒有格式化,但是mount失敗
mount失敗後沒有檢查原因,直接嘗試把另一個磁碟mount進去
mount系統盤到指定資料夾後並沒有檢查內容,直接rm -rf ./*
rm -rf ./* 此時已經基本沒救了
拯救嘗試
還在跑的服務基本是活著的,所以暫時來說API和Web網站都是好的。
伺服器上面跑的基本都是Docker容器, Docker映象都在阿里雲上面存著,基本不怕丟失的問題。
不過應用配置檔案/伺服器證書之類的東西都在上面,這個估計要折騰一下了。
cd 還能用,ls沒了,cat也沒了。
嘗試cat xxx.conf也沒用了,難道只能一點點翻配置檔案麼.
群裡的朋友提了一句,看看你的雲盤有沒有備份之類的.
咦,好像兩個星期前找騰訊雲技術支援的時候做過一次系統映象.
是不是可以直接拿回來直接用?
看了下具體的映象版本和備註資訊,看起來那時候上面的內容和現在的估計沒太多變化.
直接重灌之後更新一下各個服務的映象到最新版本應該就好了.
放棄拯救,直接使用備份的系統映象重灌
Work...
系統備份映象拯救世界!!!
後續操作 + 總結
資料盤和系統盤分開,不要讓程式的資料導致系統不可用
在費用允許的情況下設定磁碟快照策略,我這邊最極端的情況下也應該能回滾到一個星期前的版本
下次大影響操作前先手動備份系統映象,救命稻草一般的存在.