How to shrinking AWS EBS volume size – 如何對AWS EBS 進行縮容
這個問題很古老,通常是不行,但是,在特定的條件下是可以的。
特定的條件如下:
a)一台救援EC2。
b)一台和舊EC2 OS 版本完全一樣的系統,但root volume 是更小的size。
c)OS 版本必須完全一樣,並且都升級到最新的版本,不一樣後果自負。
那麼場景如下:
一台救援EC2 ,使用Amazon Linux 2023,root volume 8G
一台新EC2 ,使用較小的EBS volume size,root volume 10G
一台舊EC2,使用較大的EBS volume size ,root volume 20G
步驟如下:
首先,將新舊兩台EC2 的root volume 都detach 然後attach 到救援EC2 上。
接下來,在救援EC2上查看UUID,可以看到新EC2 和救援EC2 的UUID 是一樣的,這是因為使用了相同的AMI 啟動。將新舊兩台EC2 的root volume EBS 作為data volume 分別mount 到一個位置,例如 /10G 和 /20G ,可以看到fstab 配置文件中的UUID 都是原來的,等一下我們要修改10G 那個。
sudo -i
mkdir /20G
mkdir /10G
lsblk -f
mount /dev/nvme1n1p1 /20G # 20G old root volume
mount -o nouuid /dev/nvme2n1p1 /10G # 10G new root volume

然後使用rsync 將 /20G 目錄中的文件使用rsync 完全同步到 /10G 目錄中,請注意:排除掉 /boot 目錄。
rsync -avH --progress --delete --exclude=/boot /20G/ /10G/
同步完成後, 修改 vi /10G/etc/fstab 中的UUID 為新EBS volume 的UUID。
關閉救援EC2 ,把10G EBS volume 掛載到新的EC2 上啟動,完成。



