Amazon EBS提供了块级存储卷以用于 EC2 实例,EBS具备弹性的特点,可以动态的增加容量、更改卷类型以及修改预配置的IOPS值。但是EBS不能动态的减少容量,在实际使用中,用户也许会存在此类场景:
本文基于上述情况进行如下案例设定,并成功将Amazon EC2实例的EBS根卷缩容,具体操作步骤如下。
实验前,请对您的服务器拍摄快照,以备错误情况下快速恢复到正常状态
实例 | 系统 | 规格 | 根卷 |
---|---|---|---|
origin-server | Amazon Linux 2 | c5.large | 50GiB |
shrink-ebs-server | Amazon Linux 2 | t3.large | 20GiB |
模拟用户真实使用环境,在此origin-server上安装一些服务且存放一份实例信息
在和origin-server同一可用区创建的shrink-ebs-server需要和origin-server保持一致的AMI(系统镜像),创建并成功运行后,停止实例
cat /etc/fstab
blkid /dev/nvme0n1p1
sed -i 's/UUID=nvme0n1p1的UUID/\/dev\/nvme0n1p1/' /etc/fstab
可以看到新挂载的磁盘和当前磁盘有同样的UUID
# 使用blkid命令 可查看磁盘uuid
lsblk
blkid
mount -t xfs -o nouuid /dev/nvme1n1p1 /mnt
df -Th
使用exclude参数排除不必要的目录,请勿在–exclude={}参数 中{}使用空格
# 使用rsync进行复制
rsync -aAXv --exclude={"/home/","/home","/dev/","/proc/","/sys/","/tmp/","/run/","/mnt/","/media/*","/lost+found","/","/mnt"} / /mnt
经过上述操作后,我们得到已经从origin-server根卷复制数据的shrink-ebs-server根卷,现在我们需要将origin-server关机,并取消掉所有挂载的EBS卷
需要注意挂载的设备名称为 2.6.2中提到的 xvda
确保您的数据无误后,请手动删除shrink-ebs-server及其origin-server的源磁盘,避免不必要的费用产生!
通过上述步骤操作,您已经成功将Amazon EC2实例的EBS根卷从50GiB缩容至20GiB。同时您也可以通过该方案将非EBS根卷进行缩容,例如宝塔所挂载的数据卷。
如果您只是参照文章进行实验,请注意在试验后应释放所有创建的资源以避免不必要的费用产生!