租户端 存储 云硬盘(CBS) 操作指南 扩展分区及文件系统(Linux)

扩展分区及文件系统(Linux)

最近更新时间: 2024-06-12 15:06:00

操作场景

云硬盘是云上可扩展的存储设备,您可以在创建云硬盘后随时扩展其大小,以增加存储空间,同时不失去云硬盘上原有的数据。

扩容云硬盘完成后,需要将扩容部分的容量划分至已有分区内,或者将扩容部分的容量格式化成一个独立的新分区。

前提条件

注意:

扩容文件系统操作不慎可能影响已有数据,因此强烈建议您在操作前手动创建快照备份数据。

  • 已扩容云硬盘空间。

  • 该云硬盘已挂载到 Linux 云服务器并已创建文件系统。

  • 已登录待扩展分区及文件系统的Linux 云服务器。

操作步骤

确认扩展方式

  1. 以 root 用户执行以下命令,查询云硬盘使用的分区形式。

    fdisk -l
    • 若结果展示的设备无分区(如仅展示 /dev/vdb),请您参考 扩容文件系统

    • 若结果如下两图所示(根据操作系统不同略有不同),则说明使用 GPT 分区形式。

    • 若结果如下图所示(根据操作系统不同略有不同),则说明使用 MBR 分区形式。

      注意:

      MBR 分区形式支持的磁盘最大容量为2TB。如果您的硬盘分区为 MBR 格式,且需要扩容到超过 2TB 时,建议您重新创建并挂载一块数据盘,使用 GPT 分区方式后将数据拷贝至新盘上。对于 Linux 操作系统而言,当磁盘分区形式选用 GPT 时,fdisk 分区工具将无法使用,需要采用 parted 工具。

  1. 根据 步骤1 查询到的云硬盘分区形式,选择对应的操作指引。

    分区形式 操作指引 说明
    - 扩容文件系统 适用于没有创建分区、直接在裸设备上创建了文件系统的场景。
    GPT 将扩容部分的容量划分至原有分区(GPT) 同样适用于未分区直接格式化的场景。
    将扩容部分的容量格式化成独立的新分区(GPT) 可保持原有分区不变。
    MBR 将扩容部分的容量划分至原有分区(MBR) 同样适用于未分区直接格式化的场景。
    将扩容部分的容量格式化成独立的新分区(MBR) 可保持原有分区不变。

扩容文件系统

  1. 根据文件系统的类型,执行不同的命令进行扩容。

    • 对于 EXT 文件系统,请执行 resize2fs 命令扩容文件系统。

    • 对于 XFS 文件系统,请执行xfs_growfs命令扩容文件系统。

      /dev/vdb 为例, EXT 文件系统执行以下命令:

       resize2fs /dev/vdb

      /dev/vdb 为例, XFS 文件系统执行以下命令:

       xfs_growfs /dev/vdb
  2. 执行以下命令,查看新分区。

    df -h

将扩容部分的容量划分至原有分区(GPT)

  1. 以 root 用户执行以下命令,确认云硬盘的容量变化。

    parted <磁盘路径> print

    本文以磁盘路径是 /dev/vdb为例,则执行:

    parted /dev/vdb print

    若在过程中提示如下图所示信息,请输入Fix

    如下图所示,扩容后的云硬盘大小为107GB,已有分区的大小为10.7GB。

  1. 执行以下命令,确认该云硬盘是否还有分区已挂载。

    mount | grep '<磁盘路径>' 

    本文以磁盘路径是/dev/vdb为例,则执行:

    mount | grep '/dev/vdb'

    如下图所示,云硬盘上有一个分区(vdb1)挂载在/data上。

  1. 执行以下命令,解挂数据盘。

    umount <挂载点>

    本文以挂载点是/data为例,则执行:

    umount /data

    注意:

    请将云硬盘上所有分区的文件系统都解挂,再执行 *步骤4 *操作。可重复执行以下命令,确认该硬盘上所有分区的文件系统都已解挂。

    mount | grep '/dev/vdb'

    云硬盘上所有的分区文件系统均已解挂。如下图所示:

  1. 执行以下命令,进入 parted 分区工具。

    parted '<磁盘路径>'

    本文以磁盘路径是/dev/vdb为例,则执行:

    parted '/dev/vdb'
  2. 执行以下命令,将显示和操纵单位变成 sector(默认为GB)。

    unit s
  3. 执行以下命令,查看分区信息,并记录已有分区的 Start 值。

    注意:

    删除分区并新建后,Start 值必须保持不变,否则将会引起数据丢失。

    print

    本文中Start值为“2048s”。如下图所示:

  1. 执行以下命令,删除原有分区。

    rm <分区 Number>

    例如,由上图可知云硬盘上有一个分区,Number 为“1”,则执行:

    rm 1

    回显信息如下图所示。

  1. 执行以下命令,新建一个主分区。

    mkpart primary <原分区起始扇区> 100%

    其中,100%表示此分区到磁盘的最末尾。

    例如,主分区从第2048个扇区开始(必须与删除之前的分区一致,即 Start 值为2048s),则执行:

    mkpart primary 2048s 100%

    如果出现如下图所示的状态,请输入Ignore

  1. 执行以下命令,查看新分区是否已创建成功。

    print

    返回结果如下图所示,即表示新分区已创建成功。

  1. 执行以下命令,退出 parted 工具。

    quit
  2. 执行以下命令,检查扩容后的分区。

    e2fsck -f <分区路径>

    本文以新建分区是1(即分区路径是/dev/vdb1)为例,则执行:

    e2fsck -f /dev/vdb1

    返回如下图所示结果。

  1. 执行以下命令,对新分区上 EXT 文件系统进行扩容操作。

    resize2fs <分区路径>

    本文以分区路径是/dev/vdb1为例,则执行:

    resize2fs /dev/vdb1

    扩容成功则如下图所示:

  1. 执行以下命令,对新分区上 XFS 文件系统进行扩容操作。

    xfs_growfs <分区路径>

    本文以分区路径是/dev/vdb1为例,则执行:

    xfs_growfs /dev/vdb1
  2. 执行以下命令,手动挂载新分区。

    mount <分区路径> <挂载点>

    本文以分区路径是/dev/vdb1,挂载点是/data为例,则执行:

    mount /dev/vdb1 /data
  3. 执行以下命令,查看新分区。

    df -h

    返回如下图信息说明挂载成功,即可以查看到数据盘。

将扩容部分的容量格式化成独立的新分区(GPT)

  1. 以 root 用户执行以下命令, 确认云硬盘的容量变化。

    parted <磁盘路径> print

    本文以磁盘路径是/dev/vdb为例,则执行:

    parted /dev/vdb print

    若在过程中提示如下图所示信息,请输入 Fix

    如下图所示,扩容后的云硬盘大小为107GB,已有分区的大小为10.7GB。

  1. 执行以下命令,确认该云硬盘是否还有分区已挂载。

    mount | grep '<磁盘路径>' 

    本文以磁盘路径是/dev/vdb为例,则执行:

    mount | grep '/dev/vdb'

    如下图所示,云硬盘上有一个分区(vdb1)挂载在/data上。

  1. 执行以下命令,解挂数据盘。

    umount <挂载点>

    本文以挂载点是/data为例,则执行:

    umount /data

    说明:

    请将云硬盘上所有分区的文件系统都解挂,再执行 *步骤4 *操作。可重复执行以下命令,确认该硬盘上所有分区的文件系统都已解挂。

    mount | grep '/dev/vdb'

    云硬盘上所有的分区文件系统均已解挂。如下图所示:

  1. 执行以下命令,进入 parted 分区工具。

    parted '<磁盘路径>'

    本文以磁盘路径是/dev/vdb为例,则执行:

    parted '/dev/vdb'
  2. 执行以下命令,查看分区信息,并记录已有分区的 End 值,以此值作为下一个分区的起始偏移值。

    print

  1. 执行以下命令,新建一个主分区。此分区将从已有分区的末尾开始,覆盖硬盘所有的新增空间。

    mkpart primary start end

    本文以 End 值是10.7GB为例,执行以下命令:

    mkpart primary 10.7GB 100%
  2. 执行以下命令,查看新分区是否已创建成功。

    print

  1. 执行以下命令,退出 parted 工具。

    quit
  2. 执行以下命令,格式化新建的分区。

    mkfs.<fstype> <分区路径> 

    您可以自行选择文件系统的格式,例如 EXT2、EXT3 等。
    本文以文件系统是 EXT3 为例,则执行:

    mkfs.ext3 /dev/vdb2

将扩容部分的容量划分至原有分区(MBR)

fdisk/e2fsck/resize2fs 自动扩容工具适用于 Linux 操作系统,用于将新扩容的云硬盘空间添加到已有的文件系统中,扩容能够成功必须满足以下四个条件:

  • 文件系统是 EXT2/EXT3/EXT4/XFS。

  • 当前文件系统不能有错误。

  • 扩容后的磁盘大小不超过2TB。

  • 当前工具仅支持 Python 2 版本,不支持 Python 3 版本。

  1. 以 root 用户执行以下命令,卸载分区。

    umount <挂载点>

    本文以挂载点是/data为例,则执行:

    umount /data

  1. 执行以下命令,下载工具。

    wget -O /tmp/devresize.py https://raw.githubusercontent.com/tencentyun/tencentcloud-cbs-tools/master/devresize/devresize.py
  2. 执行以下命令,使用扩容工具进行扩容。

    python /tmp/devresize.py <硬盘路径>

    本文以硬盘路径是/dev/vdb且文件系统在 vdb1 上为例,则执行:

    python /tmp/devresize.py /dev/vdb

    • 若输出 “The filesystem on /dev/vdb1 is now XXXXX blocks long.” 则表示扩容成功,请执行** 步骤4**。

    • 若输出的是 “[ERROR] - e2fsck failed!!”,请执行以下步骤:

      1. 执行以下命令,修复文件系统所在分区。

         fsck -a <分区路径>

        本文以硬盘路径是/dev/vdb且文件系统在 vdb1 上为例,则执行:

         fsck -a /dev/vdb1
      2. 修复成功后,再次执行以下命令,使用扩容工具进行扩容。

         python /tmp/devresize.py /dev/vdb
  3. 执行以下命令,手动挂载扩容后的分区。

    mount <分区路径> <挂载点>

    本文以挂载点是/data为例。

    • 若扩容前已有分区且以分区路径是/dev/vdb1为例,则执行:

       mount /dev/vdb1 /data
    • 若扩容前没有分区,则执行:

       mount /dev/vdb /data
  4. 执行以下命令,查看扩容后的分区容量。

    df -h

    若返回类似如下图所示的信息,说明挂载成功,即可以查看到数据盘:

  1. 执行以下命令,查看扩容后原分区的数据信息,确认新增加的存储空间是否扩容到文件系统中。

    ll /data

将扩容部分的容量格式化成独立的新分区(MBR)

  1. 以 root 用户执行以下命令,查看已挂载的数据盘分区信息。

    df -h

  1. 执行以下命令,查看数据盘扩容后未分区的信息。

    fdisk -l

  1. 执行以下命令,解挂所有已挂载的分区。

    umount <挂载点>

    本文以挂载点是/data为例,则执行:

    umount /data

    说明:

    请将云硬盘上所有分区都解挂后,再执行** 步骤4**。

  1. 执行以下命令,新建一个新分区。

    fdisk <硬盘路径>

    本文以磁盘路径是/dev/xvdc为例,则执行:

    fdisk /dev/xvdc

    按照界面的提示,依次输入”p”(查看现有分区信息)、“n”(新建分区)、“p”(新建主分区)、“2”(新建第2个主分区),两次回车(使用默认配置),输入 “w”(保存分区表),开始分区。如下图所示:

    说明:

    本文以创建一个分区为例,您也可以根据实际需求创建多个分区。

  1. 执行以下命令,查看新分区。

    fdisk -l

    如下图所示,表示新的分区 xvdc2 已经创建完成。

  1. 执行以下命令,格式化新分区并创建文件系统。

    mkfs.<fstype> <分区路径> 

    您可以自行选择文件系统的格式,例如 EXT2、EXT3 等。

    本文以文件系统是 EXT3 为例,则执行:

    mkfs.ext3 /dev/xvdc2

  1. 执行以下命令,创建新的挂载点。

    mkdir <新挂载点>

    本文以新挂载点是/data1为例,则执行:

    mkdir /data1
  2. 执行以下命令,手动挂载新分区。

    mount <新分区路径> <新挂载点>

    本文以新分区路径是/dev/xvdc2,新挂载点是/data1为例,则执行:

    mount /dev/xvdc2 /data1
  3. 执行以下命令,查看新分区信息。

    df -h

    返回如下图所示信息则说明挂载成功,即可以查看到数据盘。

    注意:

    若您希望云服务器在重启或开机时能自动挂载数据盘,则需要执行** 步骤10 步骤11 **添加新分区信息至/etc/fstab

    中。

  1. 执行以下命令,添加信息。

    echo '/dev/xvdc2 /data1 ext3 defaults 0 0' >> /etc/fstab
  2. 执行以下命令,查看信息。

    cat /etc/fstab

    若返回如下图所示信息,则表示添加分区信息成功。