GCE VM 掛載硬碟(disks)以救援資料
GCE 的 VM 突然連不進去了
突然發現手上一個穩定的老專案,無法正常登入
想說最近也沒異動程式,查 LOG 發現無法正常連上 DB
為了省錢,DB 是依此篇部署在 GCE上
結果 SSH 完全無法正常連入…
這下換我驚呆了,因為我還沒做好備份行為 = =
而雲端主機又不是實體機,無法靠 live CD 之類的進救援 OS 取資料
爬了許多文,總算順利把資料救回…
只是還是完全搞不懂 VM 到底死在哪裡= =…
目前推測可能是 COS 更新死掉了,導致 VM 掛點,但 DISK 仍正常
也慶幸自己有記錄作法,還可以照表抄課重新還原回來
複製一份磁碟
若期望不動到現行 VM 的話
到 GCE > 磁碟 > 點進目標磁碟 > 複製磁碟(或建立快照)
建立一份新的供新的 VM 掛載
GCE 新增 VM,掛載 disks
因 cos 指令有限,為避免 Linux 指令不足
建議直接選您熟悉的 Linux
最後順利取完資料後即可刪除
- 開機磁碟 選 ubuntu 或您熟悉的 Linux
- 建立完成後,關閉 VM,進入編輯
- 新增磁碟 > 連接現有磁碟 > 選擇剛剛複製出來的磁碟
新建的 VM,連入 WEB SSH
Linux 不像 Windows,會自動出現在 D 槽,要指定目錄來掛載
- 增加掛載目錄:
sudo mkdir -p /mnt/disks/sdb
。重點是-p
參數,否則會因權限不足而建立失敗 - 掛載磁碟:
sudo mount -o discard,defaults /dev/sdb1 /mnt/disks/sdb
- 若直接掛載 sdb,會因格式不對無法正常掛載。須掛載其 partition 才行。若找不到
sdb1
,可以 cd 到/dev
以確認目標磁碟 - 可以使用
ls -l /dev/disk/by-id
以判斷該掛載哪個磁碟
- 若直接掛載 sdb,會因格式不對無法正常掛載。須掛載其 partition 才行。若找不到
- 增加權限,進入目錄:
sudo chmod a+w /mnt/disks/sdb
- 以我為例,我的 DB 資料在
/var/db/data
裡,為方便一口氣下載,直接權限全開:sudo chmod -R 777 /var/db/data
。參數-R
可以將目錄以下所有檔案權限全開 - 回到自己的PC,打開終端機(terminal),透過gcloud將指定目錄全部載回本機:
gcloud compute scp --recurse ubuntu:/mnt/disks/sdb/var/db/data ~/Downloads/save-db
- 指令參數:
gcloud compute scp --recurse <VM名稱>:<目標救援路徑> <本機存放路徑>
- 以 PostgreSQL 來說,零碎檔案很多,需要下載一段時間
- 指令參數:
- 取回來後,看是搭配 docker 或著直接放到 PostgreSQL 目錄,即可順利連線!
- 註: PG 的 DB 檔案,win 與 macOS 無法共用;MacOS 與 Linux 可以
後記
備份真的很重要 = =
參考資料
GCP 常見問題與教學―掛載硬碟錯誤導致 VM 開機失敗
How can I give full permission to folder and subfolder
Downloading many files at once in SSH from Google Cloud?