简单缩减 AWS EC2 实例附加的 EBS 卷的容量
缩减 AWS EC2 实例附加的 EBS 卷的容量的方法有很多,大多比较繁琐,本文使用一些技巧,来大大简化这个流程。
第一步:启动一个新实例
启动一个新的 EC2 实例。
- 这个实例与需要被缩减 EBS 卷容量的实例尽可能相同,其中,操作系统和实例类型必须相同,所在的 AWS 区域及子网也必须相同。
- 可以不为其添加密钥对。
- 其 EBS 卷容量为需要缩减到的容量。
- 添加储存时取消勾选「终止时删除」。
待实例启动后,终止(非停止)实例。
第二步:附加新的 EBS 卷
上一步终止新的实例后,其 EBS 卷被保留且已从实例分离,并拥有所有我们需要的分区,因此,我们不需要再进行任何分区操作啦。
转到 EBS 管理页面,将新的 EBS 卷连接到需要被缩减 EBS 卷容量的 EC2 实例。
第三步:迁移数据
列出所有可用块设备的信息,发现新的 EBS 卷是 nvme1n1
,其中 nvme1n1p1
就是我们迁移的目标分区,而 nvme1n1p14
和 nvme1n1p15
是引导所需要的分区,我们不用理会它们:
1 | root@ip-***:~# lsblk |
挂载并清除新分区内所有数据:
1 | mkdir -p /mnt/newebs |
迁移根目录(选做:深入理解各参数的含义):
1 | rsync -aAHXxvP / /mnt/newebs/ # 如果没有 rsync,请安装 |
第四步:修复引导(大部分情况不需要)
列出卷的 UUID:
1 | root@ip-***:~# blkid |
- 由于我们创建了一个和需要被缩减 EBS 卷容量的实例配置相同的实例,并取得了它的 EBS 卷,在大部分情况下,新卷和旧卷各分区的 UUID 应该是相同的,因此不需要修复引导。
- 如果不是这样,请修复引导,替换引导配置中的 UUID 即可,此处不赘述。
第五步:替换根设备
- 取消挂载新 EBS 卷:
1
umount /mnt/newebs
- 转到实例管理页面,停止(非终止)需要被缩减 EBS 卷容量的实例。
- 在实例信息中的储存分页,复制根设备名称,一般为
/dev/xvda
。 - 转到 EBS 管理页面,断开新旧两个 EBS 卷的连接。
- 重新连接新 EBS 卷到该实例,
设备
处填入先前复制的根设备名称。 - 重新启动该实例。
- 验证实例工作正常后,为旧 EBS 卷创建一个快照作为备份,就可以删除它了。
- 某些情况下,停止并重新启动实例可能导致 IP 地址变更,如果你有一个指向该实例的域名,记得修改 DNS 记录。
Done!
是不是很简单w