0%

阿里云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. 修改分区表。

    1. 运行以下命令查看分区信息,并记录旧分区的起始和结束的扇区位置。

      1
      fdisk -lu /dev/vdb

本示例中,分区/dev/vdb1的起始扇区是2048,结束扇区是209715199

查看数据盘的挂载路径,根据返回的文件路径卸载分区,直至完全卸载已挂载的分区。

1
2
umount /dev/vdb1
mount | grep "/dev/vdb"

使用fdisk工具删除旧分区。

删除旧分区如果出错,可能会删除分区内的数据。如有重要数据(例如数据库中的用户数据),请在操作前进行备份,避免因删除旧分区而造成数据丢失。

1
fdisk -u /dev/vdb

使用fdisk命令新建分区。

1
fdisk -u /dev/vdb

新分区的起始位置必须和旧分区的起始位置相同,结束位置必须大于旧分区的结束位置,否则会导致扩容失败。具体问题与解决方案请参见使用fdisk扩容新分区起始位置无法与扩容前保持一致

  1. 通知内核更新分区表。

    运行partprobe <数据盘设备名>或者partx -u <数据盘设备名>,通知内核数据盘的分区表已经修改,需要同步更新。

    1
    2
    partprobe /dev/vdb
    partx -u /dev/vdb
  2. 运行lsblk /dev/vdb确保分区表已经增加。

  3. 运行e2fsck -n /dev/vdb1再次检查文件系统,确认扩容分区后的文件系统状态为clean

扩容文件系统。

  • ext*文件系统(例如ext3和ext4):依次运行以下命令调整ext*文件系统大小并重新挂载分区。
1
2
3
e2fsck -f /dev/vdb1
resize2fs /dev/vdb1
mount /dev/vdb1 /data

(可选)将ext3升级到ext4

1
2
umount /dev/vdb1
tune2fs -O extents,uninit_bg,dir_index /dev/vdb1

转换成 ext4 后必须用 fsck 扫描,否则不能 mount,-p 參数表明 “自己主动修正 ” 文件系统

1
fsck -pf /dev/vdb1

挂载 ext4 文件系统

1
mount /dev/vdb1 /data

参考链接:[扩展分区和文件系统_Linux数据盘](

-------------    本文结束  感谢您的阅读    -------------
请作者一杯咖啡。