阿里云Linux数据盘扩容
摘要
确认分区表格式和文件系统
运行以下命令确认数据盘的分区表格式。
本示例中,原有的数据盘空间已做分区/dev/vdb1。
- 如果
"Disk label type"="dos"
,说明数据盘使用的是MBR分区表格式。 - 如果
"Disk label type"="GPT"
,说明数据盘使用的是GPT分区表格式。
1 | fdisk -lu /dev/vdb |
运行以下命令确认已有分区的文件系统类型。
1 | blkid /dev/vdb1 |
未分区并且未创建文件系统的数据盘,以及已分区但未创建文件系统的数据盘,不会返回结果。
运行以下命令确认文件系统的状态。
- ext*文件系统:
e2fsck -n <数据盘已有分区的名称>
- xfs文件系统:
xfs_repair -n <数据盘已有分区的名称>
1 | e2fsck -n /dev/vdb1 |
扩展已有MBR分区
为了防止数据丢失,不建议扩容已挂载的分区和文件系统。请先取消挂载(umount)分区,完成扩容并正常使用后,重新挂载(mount)。针对不同的Linux内核版本,推荐以下操作方式:
- 实例内核版本小于3.6:先取消挂载该分区,再修改分区表,最后扩容文件系统。
- 实例内核版本大于等于3.6:先修改对应分区表,再通知内核更新分区表,最后扩容文件系统。
如果新增空间用于扩容已有的MBR分区,按照以下步骤在实例中完成扩容:
修改分区表。
运行以下命令查看分区信息,并记录旧分区的起始和结束的扇区位置。
1
fdisk -lu /dev/vdb
本示例中,分区/dev/vdb1的起始扇区是2048,结束扇区是209715199。
查看数据盘的挂载路径,根据返回的文件路径卸载分区,直至完全卸载已挂载的分区。
1 | umount /dev/vdb1 |
使用fdisk工具删除旧分区。
删除旧分区如果出错,可能会删除分区内的数据。如有重要数据(例如数据库中的用户数据),请在操作前进行备份,避免因删除旧分区而造成数据丢失。
1 | fdisk -u /dev/vdb |
使用fdisk命令新建分区。
1 | fdisk -u /dev/vdb |
新分区的起始位置必须和旧分区的起始位置相同,结束位置必须大于旧分区的结束位置,否则会导致扩容失败。具体问题与解决方案请参见使用fdisk扩容新分区起始位置无法与扩容前保持一致。
通知内核更新分区表。
运行
partprobe <数据盘设备名>
或者partx -u <数据盘设备名>
,通知内核数据盘的分区表已经修改,需要同步更新。1
2partprobe /dev/vdb
partx -u /dev/vdb运行
lsblk /dev/vdb
确保分区表已经增加。运行
e2fsck -n /dev/vdb1
再次检查文件系统,确认扩容分区后的文件系统状态为clean。
扩容文件系统。
- ext*文件系统(例如ext3和ext4):依次运行以下命令调整ext*文件系统大小并重新挂载分区。
1 | e2fsck -f /dev/vdb1 |
(可选)将ext3升级到ext4
1 | umount /dev/vdb1 |
转换成 ext4 后必须用 fsck 扫描,否则不能 mount,-p 參数表明 “自己主动修正 ” 文件系统
1 | fsck -pf /dev/vdb1 |
挂载 ext4 文件系统
1 | mount /dev/vdb1 /data |
参考链接:[扩展分区和文件系统_Linux数据盘](