缩减 AWS EC2 实例附加的 EBS 卷的容量的方法有很多,大多比较繁琐,本文使用一些技巧,来大大简化这个流程。
第一步:启动一个新实例
启动一个新的 EC2 实例。
- 这个实例与需要被缩减 EBS 卷容量的实例尽可能相同,其中,操作系统和实例类型必须相同,所在的 AWS 区域及子网也必须相同。
- 可以不为其添加密钥对。
- 其 EBS 卷容量为需要缩减到的容量。
- 添加储存时取消勾选「终止时删除」。
待实例启动后,终止(非停止)实例。
第二步:附加新的 EBS 卷
上一步终止新的实例后,其 EBS 卷被保留且已从实例分离,并拥有所有我们需要的分区,因此,我们不需要再进行任何分区操作啦。
转到 EBS 管理页面,将新的 EBS 卷连接到需要被缩减 EBS 卷容量的 EC2 实例。
第三步:迁移数据
列出所有可用块设备的信息,发现新的 EBS 卷是 nvme1n1
,其中 nvme1n1p1
就是我们迁移的目标分区,而 nvme1n1p14
和 nvme1n1p15
是引导所需要的分区,我们不用理会它们:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [email protected]***:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 61.7M 1 loop /snap/core20/*** loop1 7:1 0 99.4M 1 loop /snap/core/*** loop2 7:2 0 20K 1 loop /snap/hello-world/*** loop3 7:3 0 42.2M 1 loop /snap/certbot/*** nvme0n1 259:0 0 30G 0 disk ├─nvme0n1p1 259:1 0 29.9G 0 part / ├─nvme0n1p14 259:2 0 3M 0 part └─nvme0n1p15 259:3 0 124M 0 part /boot/efi nvme1n1 259:4 0 20G 0 disk ├─nvme1n1p1 259:5 0 19.9G 0 part ├─nvme1n1p14 259:6 0 3M 0 part └─nvme1n1p15 259:7 0 124M 0 part
|
挂载并清除新分区内所有数据:
1 2 3
| mkdir -p /mnt/newebs mount /dev/nvme1n1p1 /mnt/newebs rm -rf /mnt/newebs/*
|
迁移根目录(选做:深入理解各参数的含义):
1
| rsync -aAHXxvP / /mnt/newebs/
|
第四步:修复引导(大部分情况不需要)
列出卷的 UUID:
1 2 3 4 5 6 7 8 9 10 11 12 13
| [email protected]***:~# blkid /dev/nvme0n1: PTUUID="********-****-****-****-************" PTTYPE="gpt" /dev/nvme0n1p1: UUID="********-****-****-****-************" TYPE="ext4" PARTUUID="********-****-****-****-************" /dev/nvme0n1p14: PARTUUID="********-****-****-****-************" /dev/nvme0n1p15: SEC_TYPE="msdos" UUID="****-****" TYPE="vfat" PARTUUID="********-****-****-****-************" /dev/loop0: TYPE="squashfs" /dev/loop1: TYPE="squashfs" /dev/loop2: TYPE="squashfs" /dev/loop3: TYPE="squashfs" /dev/nvme1n1: PTUUID="********-****-****-****-************" PTTYPE="gpt" /dev/nvme1n1p1: UUID="********-****-****-****-************" TYPE="ext4" PARTUUID="********-****-****-****-************" /dev/nvme1n1p14: PARTUUID="********-****-****-****-************" /dev/nvme1n1p15: SEC_TYPE="msdos" UUID="****-****" TYPE="vfat" PARTUUID="********-****-****-****-************"
|
- 由于我们创建了一个和需要被缩减 EBS 卷容量的实例配置相同的实例,并取得了它的 EBS 卷,在大部分情况下,新卷和旧卷各分区的 UUID 应该是相同的,因此不需要修复引导。
- 如果不是这样,请修复引导,替换引导配置中的 UUID 即可,此处不赘述。
第五步:替换根设备
- 取消挂载新 EBS 卷:
- 转到实例管理页面,停止(非终止)需要被缩减 EBS 卷容量的实例。
- 在实例信息中的储存分页,复制根设备名称,一般为
/dev/xvda
。
- 转到 EBS 管理页面,断开新旧两个 EBS 卷的连接。
- 重新连接新 EBS 卷到该实例,
设备
处填入先前复制的根设备名称。
- 重新启动该实例。
- 验证实例工作正常后,为旧 EBS 卷创建一个快照作为备份,就可以删除它了。
- 某些情况下,停止并重新启动实例可能导致 IP 地址变更,如果你有一个指向该实例的域名,记得修改 DNS 记录。
Done!
是不是很简单w