0%

GCP VM 無法SSH登入,救回資料

前言

昨日發現我架在 Google Cloud Platform (GCP) 虛擬機器上的 Ubuntu 無法SSH登入,
原因看起來是因為預設的主硬碟(Root Volume)大小是 10GB,空間已經不足。

雖然說GCP是可以加大硬碟空間 => [GCP] 不停機擴增 Linux 主機硬碟空間
但看完發現,即使GCP增加了,還是得登進去下一些指令才能完成…

由於我無法登入,但還好 Server 上跑的程式都是使用 Docker,
因此決定想辦法將 Docker volume 的資料想辦法救出來,這邊就記錄一下救援過程

GCP將硬碟掛載到新開的VM

首先,將原本的VM停止,並且卸載硬碟
到 VM -> 編輯
在 Boot Disk 將開機磁碟選擇保留,然後按旁邊的叉叉 -> 保存
如下圖:

接著開一台新的VM,這次硬碟直接開到30G,應該暫時夠用
然後我們可以掛載舊VM的硬碟

一樣到 VM -> 編輯 -> 其他磁碟
這邊可以選擇「連接現有的磁碟」,如下圖:

安裝 Docker (Ubuntu-18-04)

由於我這邊開的 OS 是 Ubuntu-18-04,預設是沒有安裝Docker的,因此順便紀錄安裝一下過程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 更新 apt 
sudo apt update

# 如果有舊版 docker,刪除
sudo apt-get remove docker docker-engine docker.io

# 安裝 Docker
sudo apt install docker.io

# Docker服務設置為在啟動時運行
sudo systemctl start docker
sudo systemctl enable docker

# 檢查 docker 版本
docker --version

參考: How To Install Docker On Ubuntu 18.04 Bionic Beaver

Ubuntu 複製資料過程

接著我們用SSH登入新的VM,
首先透過 lsblk 指令列出所有硬碟及分割區

1
2
3
4
5
6
7
8
9
10
# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 29.9G 0 part /
...
sdb 8:0 0 10G 0 disk
├─sdb1 8:1 0 9.9G 0 part /
...

掛載硬碟

1
2
# sudo mkdir /mnt/sdb1
# sudo mount /dev/sdb1 /mnt/sdb1

複製檔案

接著將 docker 的 volume 複製回來

1
cp -r /mnt/sdb1/var/lib/docker/volumes/{your-volume} /var/lib/docker/volumes/{your-volume}

硬碟卸載

最後我們將硬碟卸載,並且將舊硬碟刪除

1
#  sudo umount /mnt/sdb1

搞定,接著只要啟動原本的docker image,所有的服務就回來啦~

↓↓↓ 如果喜歡我的文章,可以幫我按個Like! ↓↓↓
>> 或者,請我喝杯咖啡,這樣我會更有動力唷! <<<
街口支付

街口支付

街口帳號: 901061546

歡迎關注我的其它發布渠道