云磁盘CDS

    Linux数据盘扩展分区

    概述

    扩容只是将磁盘的存储容量扩大,不会扩展分区和文件系统,您仍需要手动完成后续操作才可以对磁盘进行使用。

    说明:

    • 扩容分区前,强烈建议您为该磁盘创建快照,具体请参考创建磁盘快照
    • 扩容分区前,请确认该 CDS 云磁盘暨有分区方式,且当前分区操作的方式需与暨有方式保持一致;
    • 如果您有任何疑问,请您在控制台提交工单联系专业技术支持人员。

    若您对Windows系统实例进行操作,请您查看Windows数据盘分区

    操作指南

    本文以 CentOS 6.5 x86_64 (64bit)系统中数据盘扩容为例,其余 Linux 系统中的操作方式类似。

    登录实例并查看状态

    1.登录 BCC 实例

    您可以通过多种方式登录 BCC 实例,具体登录方式您可以查看登录实例

    2.查看当前分区状态和分区方式

    执行 fdisk -l 查看当前分区大小。当前已挂载数据盘 /dev/vde,且该磁盘已由 50GB 扩展到 100GB。

    [root@instance-xxxx ~]# fdisk -l
    
    磁盘 /dev/vda:42.9 GB, 42949672960 字节,83886080 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0x000b8163
    
    设备 Boot        Start   End         Blocks     Id  System
    /dev/vda1   *   2048    83886046    41941999+  83  Linux
    
    磁盘 /dev/vde:107.4 GB, 107374182400 字节,209715200 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0x63ffc036
    
    设备 Boot      Start   End          Blocks    Id  System
    /dev/vde1      2048   104857599    52427776   83  Linux

    说明:

    • 若您的磁盘容量小于 2TB,您可以使用 MBR 或者 GPT 方式完成分区和文件系统扩展;若您的磁盘在扩容后容量大于 2TB 但既有分区方式为 MBR,您需要切换分区方式至 GPT。此时,如果您需要保留数据,建议您创建新磁盘,并采用 GPT 方式初始化该新磁盘分区,再将已有数据拷贝至新磁盘。

    3.查看文件系统类型

    执行 blkid 命令查看当前文件系统的类型。当前数据盘 /dev/vde1 的文件系统类型为 ext4

    [root@instance-xxxx ~]# blkid
    /dev/vda1: UUID="84953f78-xxxx-4dbd-ac60-aaabc2e4cb9c" TYPE="ext4" 
    /dev/vde1: UUID="cb664382-xxxx-49f0-874e-d68d8cba0141" TYPE="ext4" 

    4.查看文件系统运行状态

    若您的文件系统是 ext 文件系统,您可以执行 e2fsck -n /dev/vd*命令查看;若您的文件系统是 xfs 文件系统,您可以执行 xfs_repair -n /dev/vd*命令查看。当运行结果中显示 clean 时,证明您当前的文件系统运行正常;若非 clean 状态,请您及时检查。

    [root@instance-xxxx ~]# e2fsck -n /dev/vde1
    e2fsck 1.42.9 (28-Dec-2013)
    Warning!  /dev/vde1 is mounted.
    Warning: skipping journal recovery because doing a read-only filesystem check.
    /dev/vde1: clean, 11/3276800 files, 251790/13106944 blocks

    在完成上述步骤后,您需要确认当前磁盘的具体操作方式。操作方式的选择依赖于数据盘当前的状态和已挂载文件系统的运行状态,同时取决于您在扩容分区操作完成后想要实现的磁盘划分形式。结合以上三种因素,您可以选择对应的操作方式。

    数据盘状态 文件系统状态 期望实现的划分形式 操作方式
    已分区 已创建 当磁盘暨有分区方式为 MBR,且您希望扩大当前已有分区容量 扩容已有 MBR 磁盘分区
    当磁盘暨有分区方式为 MBR,且您希望将当前正在扩容的区域添加为一个独立的新的 MBR 磁盘分区 添加新的 MBR 磁盘分区
    当磁盘暨有分区方式为 GPT,且您希望扩大当前已有分区容量 扩容已有 GPT 磁盘分区
    当磁盘暨有分区方式为 GPT,且您希望将当前正在扩容的区域添加为一个独立的新的 GPT 磁盘分区 添加新的 GPT 磁盘分区
    未分区 未创建 您希望完成对该磁盘进行分区并创建文件系统 格式化磁盘
    未分区 已创建 您希望在已有文件系统基础上直接扩容文件系统 扩容裸设备文件系统

    当您的数据盘未分区,且文件系统未创建时,您需要格式化该磁盘,具体操作方式请查看格式化磁盘。其他操作方式的后续操作步骤,请根据右侧目录直接点击对应操作名称查看。

    扩容已有 MBR 磁盘分区

    本示例将已有分区由 50GB 扩容为 100GB。

    1. 查看当前文件系统挂载点 执行命令 mount | grep "/dev/vde" 以查看当前磁盘 /dev/vde 的挂载点。执行后可以看到挂载点为 /mnt

    [root@instance-xxxx ~]# mount | grep "/dev/vde"
    /dev/vde1 on /mnt type ext4 (rw,relatime,data=ordered)

    2.卸载当前文件系统

    [root@instance-xxxx ~]# umount /dev/vde1

    说明:

    • 若您需要扩容已有 MBR 分区,为了防止数据丢失,请先取消挂载分区,完成扩容后再重新挂载。
    • 若您正在使用未分区磁盘(如/dev/vde),扩容时为了防止数据丢失,以下操作请对准未分区磁盘盘符(/dev/vde)进行,完成扩容后再重新挂载。

    3.调整分区大小

    执行命令 fdisk /dev/vde ,开始调整磁盘分区大小。进入 fdisk 环境后,依次输入以下命令:

    • 输入p:打印当前分区表
    • 输入d:删除当前分区。当屏幕显示"已选择分区 1,分区 1 已删除"时,表示已有的 50GB 大小分区已经删除;
    • 输入n:新建分区;
    • 输入p:选择分区类型为主分区;
    • 输入分区号:当前输入值为默认值1,您也可以直接按回车键,系统将直接选择当前默认值;
    • 输入起始扇区位置:当前输入值为默认值 2048,您也可以直接按回车键,系统将直接选择当前默认值;
    • 输入Last扇区位置:您可以直接按回车键,系统将直接选择当前默认值;
    • 输入w:保存修改并退出。至此,您已经完成分区大小的调整,新分区的大小已经调整为 100GB。
    [root@instance-xxxx ~]# fdisk /dev/vde
    欢迎使用 fdisk (util-linux 2.23.2)。
    更改将停留在内存中,直到您决定将更改写入磁盘。
    使用写入命令前请三思。
    命令(输入 m 获取帮助):p
    磁盘 /dev/vde:107.4 GB, 107374182400 字节,209715200 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0x63ffc036
    设备 Boot      Start     End          Blocks    Id  System
    /dev/vde1      2048     104857599    52427776   83  Linux
    命令(输入 m 获取帮助):d
    已选择分区 1
    分区 1 已删除
    命令(输入 m 获取帮助):n
    Partition type:
      p   primary (0 primary, 0 extended, 4 free)
      e   extended 
    Select (default p): p
    分区号 (1-4,默认 1):1
    起始 扇区 (2048-209715199,默认为 2048):2048
    将使用默认值 2048
    Last 扇区, +扇区 or +size{K,M,G} (2048-209715199,默认为 209715199):
    将使用默认值 209715199
    分区 1 已设置为 Linux 类型,大小设为 100 GiB
    命令(输入 m 获取帮助):w
    The partition table has been altered!
    Calling ioctl() to re-read partition table.
    正在同步磁盘。

    4. 查看分区并检查文件系统

    执行命令 lsblk /dev/vde 查看当前文件系统是否已增加分区表。在下方可以看到 /vde1 分区表已经增加。

    执行命令 e2fsck -n /dev/vde1 查看当前文件系统的状态是否为 clean。

    [root@instance-xxxx ~]# lsblk /dev/vde
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    vde    253:64   0  100G  0 disk 
    └─vde1 253:65   0  100G  0 part 
    [root@instance-xxxx ~]# e2fsck -n /dev/vde1
    e2fsck 1.42.9 (28-Dec-2013)
    /dev/vde1: clean, 11/3276800 files, 251790/13106944 blocks

    5. 通知内核更新分区表

    执行命令 partprobe /dev/vde 通知内核需同步数据盘的分区表信息。

    6. 扩展文件系统大小

    本磁盘采用 ext 文件系统,可以执行 resize2fs /dev/vde1 命令以扩展文件系统大小。之后执行 mount /dev/vde1 /mnt 命令将新分区挂载至 /mnt 节点。

    [root@instance-xxxx ~]# resize2fs /dev/vde1
    resize2fs 1.42.9 (28-Dec-2013)
    Resizing the filesystem on /dev/vde1 to 26214144 (4k) blocks.
    The filesystem on /dev/vde1 is now 26214144 blocks long.
    [root@instance-xxxx ~]# mount /dev/vde1 /mnt

    对于 xfs 文件系统,您需要先运行 mount /dev/vde1 /mnt/ 命令,再运行xfs_growfs /dev/vde1 以完成文件系统拓展。

    7. 查看调整后的分区大小

    此时,执行命令 df -h ,您可以查看调整后的分区大小。在下方可以看到 /dev/vde 分区已经扩展到 100GB,且已经重新挂载至 /mnt 节点。

    [root@instance-xxxx~]# df -h
    文件系统        容量  已用  可用 已用% 挂载点
    /dev/vda1        40G  1.8G   36G    5% /
    devtmpfs        2.0G     0  2.0G    0% /dev
    tmpfs           2.0G     0  2.0G    0% /dev/shm
    tmpfs           2.0G   17M  2.0G    1% /run
    tmpfs           2.0G     0  2.0G    0% /sys/fs/cgroup
    /dev/vde1        99G   60M   94G    1% /mnt
    tmpfs           396M     0  396M    0% /run/user/0

    至此,您已经完成所有关于已有 MBR 磁盘分区的扩容操作,您可以开始正常使用该磁盘。

    添加新的 MBR 磁盘分区

    若您需要将正在扩容的磁盘空间添加为新的 MBR 磁盘分区,您可以按照以下步骤进行操作。在该操作中,您不需要卸载磁盘已有文件系统,可以直接对添加的新磁盘空间进行分区和文件系统的创建操作。

    以下示例在保持磁盘 /dev/vdb 已有分区1容量 100GB 和文件系统不变的情况下,添加新的分区 2 ,且新分区 2 的大小为 100GB,并为新分区创建文件系统。

    1.调整分区大小

    执行命令 fdisk /dev/vdb ,开始调整磁盘分区大小。进入 fdisk 环境后,依次输入以下命令:

    • 输入p:打印当前分区表
    • 输入n:新建分区;
    • 输入p:选择分区类型为主分区;
    • 输入分区号:当前输入值为默认值2,表示在已有分区1之外,创建新的编号为2的新分区。您也可以直接按回车键,系统将直接选择当前默认值;
    • 输入起始扇区位置:您可以直接按回车键,系统将直接选择当前默认值;
    • 输入Last扇区位置:您可以直接按回车键,系统将直接选择当前默认值;
    • 输入w:保存修改并退出。至此,您已经完成分区大小的调整,新分区2的大小已经调整为 100GB,同时已有分区1的大小保持原有 100GB 不变。
    [root@instance-xxxx ~]# fdisk /dev/vdb
    欢迎使用 fdisk (util-linux 2.23.2)。
    更改将停留在内存中,直到您决定将更改写入磁盘。
    使用写入命令前请三思。
    命令(输入 m 获取帮助):p
    磁盘 /dev/vdb:214.7 GB, 214748364800 字节,419430400 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0x63ffc036
    设备 Boot      Start      End         Blocks     Id  System
    /dev/vdb1      2048      209715199   104856576   83  Linux
    命令(输入 m 获取帮助):n
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): p
    分区号 (2-4,默认 2):
    起始 扇区 (209715200-419430399,默认为 209715200):
    将使用默认值 209715200
    Last 扇区, +扇区 or +size{K,M,G} (209715200-419430399,默认为 419430399):
    将使用默认值 419430399
    分区 2 已设置为 Linux 类型,大小设为 100 GiB
    命令(输入 m 获取帮助):w
    The partition table has been altered!
    Calling ioctl() to re-read partition table.
    正在同步磁盘。

    2.查看分区

    执行命令 lsblk /dev/vdb 查看分区,可以看到当前新的分区 dev/vdb2 已经添加至分区表。

    [root@instance-xxxx ~]# lsblk /dev/vdb
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    vdb    253:16   0  200G  0 disk 
    ├─vdb1 253:17   0  100G  0 part /mnt
    └─vdb2 253:18   0  100G  0 part 

    3.为新分区创建并挂载文件系统

    执行命令 mkfs.ext4 /dev/vdb2 为新分区 /dev/vdb2 创建 ext4 类型文件系统。创建成功后,您可以执行 mount /dev/vdb2 /xxx 命令将该分区挂载至 /xxx 节点。本示例中将新分区挂载至 /mnt 节点。

    [root@instance-xxxx ~]# mkfs.ext4 /dev/vdb2
    mke2fs 1.42.9 (28-Dec-2013)
    文件系统标签=
    OS type: Linux
    块大小=4096 (log=2)
    分块大小=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    6553600 inodes, 26214400 blocks
    1310720 blocks (5.00%) reserved for the super user
    第一个数据块=0
    Maximum filesystem blocks=2174746624
    800 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks: 
    	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    	4096000, 7962624, 11239424, 20480000, 23887872
    Allocating group tables: 完成                            
    正在写入inode表: 完成                            
    Creating journal (32768 blocks): 完成
    Writing superblocks and filesystem accounting information: 完成 
    [root@instance-xxxx ~]# mount /dev/vdb2 /mnt

    4. 查看调整后的分区大小

    此时,执行命令 df -h ,您可以查看调整后的分区大小。在下方可以看到 /dev/vdb2 分区已经扩展到 100GB,且已经重新挂载至 /mnt 节点。

    [root@instance-xxxx ~]# df -h
    文件系统        容量  已用  可用 已用% 挂载点
    /dev/vda1        40G  1.8G   36G    5% /
    devtmpfs        2.0G     0  2.0G    0% /dev
    tmpfs           2.0G     0  2.0G    0% /dev/shm
    tmpfs           2.0G   17M  2.0G    1% /run
    tmpfs           2.0G     0  2.0G    0% /sys/fs/cgroup
    /dev/vdb2        99G   61M   94G    1% /mnt
    tmpfs           396M     0  396M    0% /run/user/0

    至此,您已经完成所有添加 MBR 磁盘分区的扩容操作,您可以开始正常使用该磁盘。

    扩容已有 GPT 磁盘分区

    当您在控制台完成磁盘扩容后,执行 fdisk -l 命令会显示当前磁盘的容量为扩容后的容量。本示例中将为一块已采用 GPT 分区方式的 /dev/vdb 磁盘进行扩容。在进行下列分区操作前,该磁盘的容量已经由 2000GB 扩容至 2500GB。

    1. 查看当前文件系统挂载点

    执行命令 mount | grep "/dev/vdb" 以查看当前磁盘 /dev/vdb 的挂载点。执行后可以看到挂载点为 /mnt

    [root@instance-xxxx ~]# mount | grep "/dev/vdb"
    /dev/vdb on /mnt type ext4 (rw,relatime,data=ordered)

    2.卸载当前文件系统

    [root@instance-xxxx ~]# umount /dev/vdb

    说明:

    • 若您需要扩容已有 GPT 分区,为了防止数据丢失,请先取消挂载分区,完成扩容后再重新挂载。

    3.调整分区大小

    您需要使用 parted 工具为 /dev/vdb 磁盘进行分区扩容操作,请依次输入以下命令:

    • 执行 parted /dev/vdb 命令开始分区扩容;
    • 执行 print 命令查看待扩容的分区号(Number)和容量(Size)。本示例中磁盘 /dev/vdb/ 是从 2000GB 扩容到 2500GB,且已有的分区号为 1;
    • 执行 resizepart 1 100% 命令扩展分区。您可以根据自身需求,更改命令语句中的分区号;
    • 执行 print 查看当前分区号和容量的状态。
    [root@instance-xxxx ~]# parted /dev/vdb
    GNU Parted 3.1
    使用 /dev/vdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    
    (parted) print
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 2684GB
    Sector size (logical/physical): 512B/512B
    Partition Table: loop
    Disk Flags: 
    Number  Start  End     Size    File system  标志
     1      0.00B  2684GB  2684GB  ext4
     
    (parted) resizepart 1 100%
    
    (parted) print
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 2684GB
    Sector size (logical/physical): 512B/512B
    Partition Table: loop
    Disk Flags: 
    Number  Start  End     Size    File system  标志
     1      0.00B  2684GB  2684GB  ext4
    
    (parted) quit 
    信息: You may need to update /etc/fstab.

    4.挂载文件系统

    • 执行 fsck -f /dev/vdb1 命令检查文件系统是否一致;
    • 若您的文件系统为 ext 类型,请先执行 resize2fs /dev/vdb1 命令扩展分区对应的文件系统,然后执行 mount /dev/vdb1 /mnt 将文件系统挂载至 /mnt 挂载点。您也可以根据自身需要挂载至其他挂载点,或者通过 mkdir <挂载点>创建新的挂载点;
    • 若您的文件系统为 xfs 类型,请先执行 mount /dev/vdb1 /mnt/ 命令,再执行xfs_growfs /dev/vdb1 命令。

    下列示例中采用的始 ext 文件系统类型。

    [root@instance-xxxx ~]# fsck -f /dev/vdb1
    fsck,来自 util-linux 2.23.2
    e2fsck 1.42.9 (28-Dec-2013)
    第一步: 检查inode,块,和大小
    第二步: 检查目录结构
    第3步: 检查目录连接性
    Pass 4: Checking reference counts
    第5步: 检查簇概要信息
    /dev/vdb1: 11/131072000 files (0.0% non-contiguous), 8282274/524288000 blocks
    
    [root@instance-xxxx ~]# resize2fs /dev/vdb1
    resize2fs 1.42.9 (28-Dec-2013)
    Resizing the filesystem on /dev/vdb1 to 655360000 (4k) blocks.
    The filesystem on /dev/vdb1 is now 655360000 blocks long.
    
    [root@instance-hnl92ipp ~]# mount /dev/vdb1 /mnt

    5.查看调整后分区

    完成以上步骤后,您可以执行 df -h 命令查看调整后分区。

    添加新的 GPT 磁盘分区

    若您需要将正在扩容的磁盘空间添加为新的 GPT 磁盘分区,您可以按照以下步骤进行操作。在该操作中,您不需要卸载磁盘已有文件系统,可以直接对添加的新磁盘空间进行分区和文件系统的创建操作。

    以下示例在保持磁盘 /dev/vdb1 已有分区 1 容量 2500GB 和文件系统不变的情况下,添加新的分区 2,且新分区 2 的大小为 500GB,并为新分区创建 ext 类型文件系统。

    1.调整分区大小

    您需要使用 parted 工具为磁盘添加新的分区,请执行 parted /dev/vdb 进行操作。请依次执行以下命令进行分区操作:

    • 执行 print 命令查看数据盘当前状态。此时系统会弹出一条提示,输入 Ignore 忽略该提示。此时在屏幕上可以看到当前磁盘的容量已经扩容到 3000 GB;
    • 记录此时 /dev/vdb1 的结束位置,即 End 对应磁盘位置,该位置为新分区的起始位置。再本示例中, /dev/vdb1 的结束位置是 2147GB;
    • 输入 mkpart 开始新建分区。若继续出现提示,请继续忽略;
    • 输入新分区名称:本示例输入 2;
    • 输入新分区的文件系统类型:本示例输入 ext4,系统默认为 ext2
    • 输入新分区起始位置:本示例为 2147GB;
    • 执行 print 查看当前磁盘状态;
    • 执行 quit 退出 parted 分区工具。
    [root@instance-xxxx ~]# parted /dev/vdb
    GNU Parted 3.1
    使用 /dev/vdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) print                                                                                        
    警告: Not all of the space available to /dev/vdb appears to be used, you can fix the GPT to use all of the space (an extra 2097152000 blocks) or continue with the current setting? 
    修正/Fix/忽略/Ignore? Ignore                                              
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 3221GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags: 
    
    Number  Start   End     Size    File system  Name     标志
     1      1049kB  2147GB  2147GB  ext4         primary
    
    (parted) mkpart 
    分区名称?  []? 2                                                    
    文件系统类型?  [ext2]? ext4                                           
    起始点? 2147GB                                                       
    结束点? 100% 
    
    (parted) print 
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 3221GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags: 
    
    Number  Start   End     Size    File system  Name     标志
     1      1049kB  2147GB  2147GB  ext4         primary
     2      2147GB  3221GB  1074kB               2
     
    (parted) quit  

    2.为新分区挂载文件系统

    您可以执行 mount /dev/vdb2 /xxx 命令将该分区挂载至 /xxx 节点。本示例中将新分区挂载至 /mnt 节点。

    [root@instance-xxxx ~]# mount /dev/vdb2 /mnt

    3. 查看调整后的分区大小

    此时,执行命令 df -h ,您可以查看调整后的分区大小.

    至此,您已经完成所有添加 GPT 磁盘分区的扩容操作,您可以开始正常使用该磁盘。

    扩容裸设备文件系统

    若您的数据盘没有分区,但是已经创建文件系统时,您可以在该磁盘上直接扩容文件系统。

    1. 若您已创建 ext 文件系统

    请使用 root 权限执行 resize2fs 命令扩容文件系统。

    resize2fs /dev/vdb

    2. 若您已创建 xfs 文件系统

    使用 root 权限执行 xfs_growfs 命令扩容文件系统。

    xfs_growfs /dev/vdb
    上一篇
    Windows数据盘扩展分区
    下一篇
    变更CDS磁盘类型