- 停止當前實例。
- 從當前EBS創建快照。目的有二:
- 避免操作失誤損壞數據;
- 用於步驟3。
- 從步驟2的快照創建新卷。
- 創建一個目標大小的新卷。
- 將步驟3、4創建的新卷掛載到實例上。
- 啓動實例,進入SSH。
- 輸入
lsblk
查看三個卷的設備名稱。- 體積最小的卷即為目標卷,其名稱為
nvme?n1
,其中?
為數字。且該卷下無分區; - 另兩個體積相同的卷,掛載點為
/
是原來的根卷,一定不要操作它。無掛載點的即為源卷(通過快照創建的新卷); - 為行文方便,假設目標卷名稱為
nvme1n1
,源卷名稱為nvme2n1
。假設源卷只有一個分區,且分區為nvme2n1p1
。
- 執行
sudo dd bs=16M if=/dev/nvme2n1 of=/dev/nvme1n1 count=10
。 - 使用
fdisk
為目標卷分區:- 執行
sudo fdisk /dev/nvme1n1
; - 按
p
查看當前起始扇區編號; - 先後按下
d
, n
; - 根據指引,按默認選項進行,起始扇區編號填寫之前記錄的數;
- 先後按下
a
, w
; - 輸入
lsblk
,此時目標卷應當出現分區nvme1n1p1
。
- 執行
sudo e2fsck -f /dev/nvme2n1p1
。 - 如無錯誤信息,繼續執行
sudo resize2fs -M -p /dev/nvme2n1p1
。留意最後輸出信息中的塊數。 - 將上一步中的塊數除以4096,進位到整數,記為
n
。 - 執行
sudo dd bs=16M if=/dev/nvme2n1p1 of=/dev/nvme1n1p1 count=n
。 - 執行
sudo resize2fs -p /dev/nvme1n1p1
。 - 執行
sudo e2fsck -f /dev/nvme1n1p1
檢查是否正確。 - 停止實例,將三個卷都從實例分離,再將目標卷掛載為根卷,嘗試開機。
- 如果成功開機,並檢查無任何問題後,即可刪除另外兩個大容量卷以及最初的快照。
主要參考ADTC的文章。
簡化了部分操作;針對SSD優化實例修正了卷名稱。