GCP VM 無法SSH連線: no space left on device

首先 : 會發生SSH無法連線的狀況很多,這個方法不一定適用所有的狀況

可以先到GCP VM中打開”啟用序列埠連線”,就可以看到VM中目前的錯誤狀況為何

參考文件

https://www.cloudbooklet.com/attach-and-mount-disks-to-vm-instance-in-google-cloud/

https://discuss.devopscube.com/t/solved-wrong-fs-type-bad-option-bad-superblock-on-dev-sdb-error/206

Linux常用指令-du-檢視檔案與目錄使用空間

https://askubuntu.com/questions/859787/how-to-unmount-and-mount-pen-drive-in-ubuntu-via-command-line

確認錯誤狀況

從控制介面中點入無法SSH登入的主機,選擇右上角編輯

在畫面中打勾”啟用序列埠連線”

GCP SSH

按下儲存後,回到VM列表,點選”重置”讓機器重新啟動一次,接著再點選進入VM中”連線至序列控制台”就可以開啟畫面,看到目前VM上的錯誤訊息了

GCP SSH

如果你跟我一樣看到 “no space left on device”,那麼就是跟我一樣的狀況了,boot device已經沒有空間

處理邏輯

1.將這台VM的boot device退出

2.開一台新的VM(或其他可用VM都行),把這顆硬碟掛入其他其他硬碟中

3.進入這台新的VM將硬碟磁區掛入Linux目錄

4.這時候就可以開始整理就硬碟了,整理好之後將硬碟退出

5.將舊硬碟退出新的VM,再掛回原VM的開機硬碟中

6.順利開機

首先,要注意的是,開一台新的VM必須要跟原本無法登入的那台VM在同一個地區,這樣才有辦法掛他的硬碟

將boot device退出

進入VM後點選”編輯”,找到”boot disk”,按下右邊的X移除掉

最後按下儲存就可以了,放心這個最後處理完成後可以再將這顆硬碟綁回來

GCP Boot disk

綁定到新VM

接著,開一台新的VM(或既有的VM都可以),一樣點進去”編輯”

找到”其他磁碟”這個區域,按下”連接現有磁碟”,然後在畫面下拉選單中,找到剛剛被你按下X移除掉的硬碟

GCP VM

如果在這個畫面沒有看到那顆硬碟,那就有可能VM在不通區域看不到,或者原本的硬碟還沒有解除綁定

可以到左選單中的”儲存空間” –> “磁碟”,看一下這顆硬碟目前是不是在使用者這個欄位不是空的

硬碟Mount到OS中

這個步驟要注意的是,不必綁定整個硬碟,只要綁定已經沒有空間可以使用的那個資料夾即可

可以用以下指令來看目前的磁碟綁定狀態

lsblk

假設sda1 是已經要滿的那個資料夾,那我們就只要綁定這個就可以了(實際上掛上去的硬碟應該會是sdbXX之類的)

接著,我們把sda1這個資料夾掛載到/mnt/new_disk 這個資料夾中,就可存取到了

這樣子就完成了

清理資料

這時候就可以進入到/mnt/new_disk這個目錄就可以看到原硬碟的資料了

掛回原VM中開機

mount完之後,接著要umount

然後一樣回到GCP的控制畫面中,對新的VM按下編輯,找到剛剛掛上的硬碟在他旁邊按下X後儲存即可

儲存完畢後回到原本不能登入的VM中,一樣按下編輯找到”boot disk”,按下”+”符號,從下拉選單中就可以看到原本的硬碟了

選擇他,按下儲存後開機即可

接著,應該就可以正常使用了

開機後,如果你想要擴增硬碟空間,可以直接參考這篇的做法

GCP 不停止 VM 執行個體增加空間容量