Month: January 2026

  • How to shrink the size of an AWS EBS volume – 如何對AWS EBS 進行縮容

    這個問題很古早,官方文檔告訴你:不行。

    但是,在特定的條件下是可以的。

    特定的條件如下:

    a)一台救援EC2。
    b)一台和舊EC2 OS 版本完全一樣的系統,但root volume 是更小的size。
    c)OS 版本必須完全一樣,並且都升級到最新的,相同的kernel版本,不一樣後果自負。

    那麼場景如下:

    一台救援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/

    在進行上述同步前,您當然需要先行確認 /20G 目錄中的實際總容量小於10G並且有足夠冗余,否則您走到這一步從一開始就是錯誤的決定。

    同步完成後, 修改 vi /10G/etc/fstab 中的UUID 為新EBS volume 的UUID。

    關閉救援EC2 ,把10G EBS volume 掛載到新的EC2 上啟動,完成。