AWS Ubuntu EC2实例 EBS硬盘缩容

现有EC2实例: 60G / Ubuntu24.04 / 实例名为ec2-big

目标: 缩小磁盘到20G

在ec2-big上面直接在线缩小:失败

1
2
3
4
# resize2fs /dev/xvda1 20G
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/xvda1 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported

解决方法

在同一个可用区内,创建一个和现有系统版本接近(最好是完全一样,便于后续引导)的实例ec2-small,磁盘大小:20G。
ec2-small关机,并从控制台分离卷,并挂载到ec2-big,设备号为/dev/sdb。
在ec2-big下执行如下操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 查看挂载设备/分区号 (AWS默认1为根分区,15为启动分区)
lsblk
# 创建数据转移目录
mkdir /small-boot
mkdir /small-data
mount /dev/sdb15 /small-boot
mount /dev/sdb1 /small-data

# 备份ec2-small的引导文件。
cp /small-data/boot/grub/grub.cfg /tmp/grub.cfg-data

# 删除ec2-small的数据文件,从ec2-big同步所有文件。
rm -rf /small-data/*
rsync -ax / /small-data/

# 恢复引导文件到
cp /tmp/grub.cfg-data /small-data/boot/grub/grub.cfg

# 检查引导文件的UUID和实际分区是否匹配。
blkid | grep -i sdb15
grep PARTUUID /small-data/boot/grub/grub.cfg
grep PARTUUID /small-boot/EFI/ubuntu/grub.cfg

# ec2-big关机,分离容量小的磁盘(sdb),重新挂载回ec2-small,设备号为/dev/sda。启动ec2-small,确认可以启动