AWS EC2 Linux根分区调整:将nvme0n1p1缩至50G(XFS)
AWS EC2 XFS根卷缩容并新建/data分区的解决方法
关键说明
XFS文件系统不支持缩小操作,xfs_growfs仅用于扩容,这就是你操作失败的核心原因。要实现目标分区结构,必须通过「备份数据→重建分区→恢复数据」的流程完成。
详细操作步骤
1. 备份根分区数据
先做好数据备份,避免操作过程中丢失:
- 停止EC2实例,保证数据一致性
- 从EC2控制台分离当前根卷
nvme0n1 - 给该卷创建快照,再基于快照生成一个新的EBS卷,挂载到同实例的其他挂载点(比如
/dev/sdf,系统内会识别为nvme1n1) - 启动实例,挂载临时备份卷:
mkdir /mnt/old-root mount /dev/nvme1n1p1 /mnt/old-root - 打包备份根目录数据:
tar -czf /tmp/root-backup.tar.gz -C /mnt/old-root . - 备份完成后卸载临时卷:
umount /mnt/old-root
2. 重建新根卷的分区结构
- 再次停止实例,分离原根卷和临时备份卷
- 创建一个新的100G EBS卷(与原卷同可用区),作为新根卷
- 将新卷挂载到一台临时EC2实例(或同一实例的其他挂载点),使用
fdisk分区:
按以下步骤操作:fdisk /dev/nvme0n1- 输入
d删除所有现有分区(若存在) - 输入
n创建第一个主分区:选择主分区,起始扇区默认,结束扇区输入+50G,得到nvme0n1p1 - 输入
n创建第二个主分区:起始扇区默认,结束扇区默认(自动占用剩余50G),得到nvme0n1p2 - 输入
t修改分区类型:选择p1,输入83(Linux分区类型);再选择p2,同样输入83 - 输入
w保存分区表
- 输入
- 格式化两个分区为XFS:
mkfs.xfs /dev/nvme0n1p1 mkfs.xfs /dev/nvme0n1p2
3. 恢复数据并配置自动挂载
- 挂载新创建的
nvme0n1p1:mkdir /mnt/new-root mount /dev/nvme0n1p1 /mnt/new-root - 解压备份数据到新根分区:
tar -xzf /tmp/root-backup.tar.gz -C /mnt/new-root - 修改
fstab,让/data分区开机自动挂载:echo "/dev/nvme0n1p2 /data xfs defaults 0 0" >> /mnt/new-root/etc/fstab - 卸载新根分区:
umount /mnt/new-root
4. 替换根卷并验证结果
- 停止临时实例,分离新创建的根卷
- 回到原EC2实例控制台,选择「替换根卷」,将新卷设置为根卷
- 启动原实例,登录后执行以下命令验证:
此时应能看到lsblk df -hnvme0n1p1挂载/(50G),nvme0n1p2挂载/data(50G)
简化替代方案
如果不想搭建临时实例,也可以用AMI备份快速完成:
- 停止原实例,创建AMI镜像
- 基于该AMI启动新实例,启动时设置根卷大小为50G,同时附加一个50G的卷作为
/data - 迁移原实例数据到新实例后,销毁原实例即可
内容的提问来源于stack exchange,提问作者JT Kon
相关产品推荐
相关产品推荐

