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
最後順利取完資料後即可刪除

  1. 開機磁碟 選 ubuntu 或您熟悉的 Linux
  2. 建立完成後,關閉 VM,進入編輯
  3. 新增磁碟 > 連接現有磁碟 > 選擇剛剛複製出來的磁碟

新建的 VM,連入 WEB SSH

Linux 不像 Windows,會自動出現在 D 槽,要指定目錄來掛載

  1. 增加掛載目錄: sudo mkdir -p /mnt/disks/sdb。重點是-p參數,否則會因權限不足而建立失敗
  2. 掛載磁碟: sudo mount -o discard,defaults /dev/sdb1 /mnt/disks/sdb
    1. 若直接掛載 sdb,會因格式不對無法正常掛載。須掛載其 partition 才行。若找不到sdb1,可以 cd 到/dev以確認目標磁碟
    2. 可以使用ls -l /dev/disk/by-id以判斷該掛載哪個磁碟
  3. 增加權限,進入目錄: sudo chmod a+w /mnt/disks/sdb
  4. 以我為例,我的 DB 資料在/var/db/data裡,為方便一口氣下載,直接權限全開: sudo chmod -R 777 /var/db/data。參數-R可以將目錄以下所有檔案權限全開
  5. 回到自己的PC,打開終端機(terminal),透過gcloud將指定目錄全部載回本機: gcloud compute scp --recurse ubuntu:/mnt/disks/sdb/var/db/data ~/Downloads/save-db
    1. 指令參數: gcloud compute scp --recurse <VM名稱>:<目標救援路徑> <本機存放路徑>
    2. 以 PostgreSQL 來說,零碎檔案很多,需要下載一段時間
  6. 取回來後,看是搭配 docker 或著直接放到 PostgreSQL 目錄,即可順利連線!
    1. 註: 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?