云主机系统扩容

ZStack Cloud支持云主机在运行或者停止状态下进行根云盘扩容。

云主机根云盘扩容

可通过以下三种方式进行云主机根云盘扩容:
  1. 云主机管理界面,选择某一运行中/已停止的云主机,点击操作 > 系统配置 > 系统扩容,弹出系统扩容界面。
    Figure 1所示。可按需进行根云盘扩容,更改容量即时生效。
    Figure 1. 系统扩容界面


  2. 选择某一运行中/已停止的云主机,进入云主机详情页的配置信息页面,选择需要扩容的根云盘,点击云盘右侧的操作 > 云盘扩容,弹出云盘扩容界面。
    Figure 2所示。可按需进行根云盘扩容,更改容量即时生效。
    Figure 2. 云盘扩容界面


  3. 选择某一运行中/已停止的云主机,进入云主机详情页的配置信息页面,点击需要扩容的根云盘,进入根云盘详情页,按需修改根云盘容量,更改容量即时生效。

上述步骤仅实现将云主机的根云盘容量扩大,需在云主机的操作系统里对硬盘进行分区扩容,才可使得云主机识别。

云主机操作系统硬盘分区扩容

针对不同类型、不同分区、不同文件系统的云主机,扩容方式均不相同。
Note:
  • 进行根云盘扩容前,默认对当前系统进行了快照备份,以增强数据安全性。
  • 扩容存在风险。安全的扩容方式是对扩容的新容量,规划新的分区。
  • 扩容只能增加容量,不能减少容量。
  • 扩容增加的容量可以合并到最后一个分区,将其连续使用。
    • 如果最后一个分区是系统备份分区(Windows),则只能对新增容量规划新的分区方式使用。
    • 如果最后一个分区是swap分区,则swap分区可以删除,将新增容量扩容至swap分区前一分区后,再重建swap分区。

以下分四种不同的应用场景来介绍:

  1. 使用GParted开源工具针对ext4+swap分区扩容ext4根分区实例。
    Note:
    • 此方式需借助Live CD方式对当前分区进行重新规划。
    • 调整分区时需谨慎操作,以防止数据丢失。

    假定云主机采用了ext4根分区+swap分区,其中ext4根分区35G,swap分区5G,总容量40G,将系统从40G扩容至50G后,打算将新增容量扩容至ext4根分区。

    操作步骤如下:
    1. 添加GParted ISO,下载路径可参考GPared官网https://gparted.org/download.php,建议下载amd64的iso,表示支持64位系统。
    2. 添加ISO后,设置启动顺序为cdrom harddisk,表示下次启动以cdrom优先。
    3. 使用GParted Live CD引导系统,打开云主机控制台,GParted引导后,按照引导一直执行Enter键直至进入图形界面。
    4. 在GParted界面,右击删除原本的swap分区,扩展ext4将其从35G扩展至46G,针对unallocated的4G分区,新建swap分区。
      Figure 3Figure 4Figure 5所示:
      Figure 3. 删除原本的swap分区


      Figure 4. 扩展ext4从35G至46G




      Figure 5. 新建4G swap分区




    5. 关闭云主机,卸载ISO,启动云主机。
    6. 打开云主机控制台,执行df -h,可见云主机根分区容量已扩展至46G。
      [root@10-58-21-213 ~]# df -h
      Filesystem Size Used Avail Use% Mounted on
      /dev/vda1 46G 1.2G 42G 3% /
    7. 开启swap分区并修改/etc/fstab磁盘分区表。
      [root@10-58-21-213 ~]# fdisk -l|grep vda
      Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 sectors
      /dev/vda1 * 2048 96468991 48233472 83 Linux
      /dev/vda2 96468992 104857599 4194304 82 Linux swap / Solaris
      
      [root@10-58-21-213 ~]# mkswap /dev/vda2
      mkswap: /dev/vda2: warning: wiping old swap signature.
      Setting up swapspace version 1, size = 4194300 KiB
      no label, UUID=ed99f72b-aafb-43ad-be8f-fcd09794beb0
      #可知此swap分区的UUID为ed99f72b-aafb-43ad-be8f-fcd09794beb0
      
      [root@10-58-21-213 ~]# swapon /dev/vda2
      #开启swap分区
      
      [root@10-58-21-213 ~]# free -m
       total used free shared buff/cache available
      Mem: 911 106 671 6 133 657
      Swap: 4095 0 4095
      
      [root@10-58-21-213 ~]# sed -i '/swap/d' /etc/fstab
      echo "UUID=ed99f72b-aafb-43ad-be8f-fcd09794beb0 swap swap defaults 0 0"
      #将swap的设置写入磁盘分区表,以便开机自启。
    8. 关机重启后,此云主机根云盘ext4分区成功扩容,swap分区也保留4G使用。
  2. 使用LVM分区工具针对xfs+swap分区扩容LVM分区实例。
    Note: 此方式适用于LVM分区动态扩容,无须借助其他工具。

    假定云主机采用了LVM分区,并格式化为boot分区、xfs根分区和swap分区。其中xfs根分区94G,swap分区6G,总容量100G,将系统从100G扩容至120G后,打算将新增容量扩容至xfs根分区。

    操作步骤如下:
    1. 查看当前分区和LVM逻辑分区,其中boot分区为500M,使用了/dev/vda1,LVM分区为94G,使用了/dev/vda2,路径为/dev/vg/root,swap分区为6G,路径为/dev/vg/swap
      [root@10-0-44-221 ~]# df -h
      Filesystem Size Used Avail Use% Mounted on
      /dev/mapper/vg-root 94G 6.5G 88G 7% /
      /dev/vda1 477M 104M 344M 24% /boot
      #boot分区为500M,使用了/dev/vda1
      #LVM分区为94G,使用了/dev/vda2,路径为/dev/vg/root
      #swap分区为6G,路径为/dev/vg/swap
      
      [root@10-0-44-221 ~]# fdisk -l |grep vda
      Disk /dev/vda: 128.8 GB, 128849018880 bytes, 251658240 sectors
      /dev/vda1 * 2048 1026047 512000 83 Linux
      /dev/vda2 1026048 209715199 104344576 8e Linux LVM
      
      [root@10-0-44-221 ~]# pvdisplay |egrep "Name|Size"
       PV Name /dev/vda2
       VG Name vg
       PV Size 99.51 GiB / not usable 3.00 MiB
       PE Size 4.00 MiB
      #物理卷使用/dev/vda2
      
      [root@10-0-44-221 ~]# vgdisplay |egrep "Name|Size"
       VG Name vg
       VG Size 99.51 GiB
       PE Size 4.00 MiB
       alloc PE / Size 25463 / 99.46 GiB
       Free PE / Size 11 / 44.00 MiB
      #卷组信息,卷组名称为vg,会针对此卷组扩容
      
      [root@10-0-44-221 ~]# lvdisplay |egrep "Name|Size"
       LV Name root
       VG Name vg
       LV Size 93.59 GiB
       LV Name swap
       VG Name vg
       LV Size 5.88 GiB
      #逻辑卷信息
    2. 扩容后,执行fdisk /dev/vda对新增容量分区,使用n建立新分区,使用t将其分区为LVM格式,使用w使修改生效,使用partprobe使其立刻生效。
      [root@10-0-44-221 ~]# fdisk /dev/vda
      Welcome to fdisk (util-linux 2.23.2).
      Changes will remain in memory only, until you decide to write them.
      Be careful before using the write command.
      Command (m for help): p
      Disk /dev/vda: 128.8 GB, 128849018880 bytes, 251658240 sectors
      Units = sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O size (minimum/optimal): 512 bytes / 512 bytes
      Disk label type: dos
      Disk identifier: 0x0008168e
       Device Boot Start End Blocks Id System
      /dev/vda1 * 2048 1026047 512000 83 Linux
      /dev/vda2 1026048 209715199 104344576 8e Linux LVM
      Command (m for help): n
      Partition type:
       p primary (2 primary, 0 extended, 2 free)
       e extended
      Select (default p):
      Using default response p
      Partition number (3,4, default 3):
      First sector (209715200-251658239, default 209715200):
      Using default value 209715200
      Last sector, +sectors or +size{K,M,G} (209715200-251658239, default 251658239):
      Using default value 251658239
      Partition 3 of type Linux and of size 20 GiB is set
      Command (m for help): t
      Partition number (1-3, default 3):
      Hex code (type L to list all codes): 8e 
      Changed type of partition 'Linux' to 'Linux LVM'
      Command (m for help): p
      Disk /dev/vda: 128.8 GB, 128849018880 bytes, 251658240 sectors
      Units = sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O size (minimum/optimal): 512 bytes / 512 bytes
      Disk label type: dos
      Disk identifier: 0x0008168e
       Device Boot Start End Blocks Id System
      /dev/vda1 * 2048 1026047 512000 83 Linux
      /dev/vda2 1026048 209715199 104344576 8e Linux LVM
      /dev/vda3 209715200 251658239 20971520 83 Linux LVM
      Command (m for help): w
      The partition table has been altered!
      Calling ioctl() to re-read partition table.
      WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
      The kernel still uses the old table. The new table will be used at
      the next reboot or after you run partprobe(8) or kpartx(8)
      Syncing disks.
      
      [root@10-0-44-221 ~]# partprobe
    3. 针对新格式化的分区,创建物理卷。
      [root@10-0-44-221 ~]# pvcreate /dev/vda3
       Physical volume "/dev/vda3" successfully created
      #创建物理卷
    4. 针对卷组,进行扩展。
      [root@10-0-44-221 ~]# vgextend vg /dev/vda3
       Volume group "vg" successfully extended
      #卷组名称为vg,将新分区扩展至卷组vg
    5. 关闭swap,删除原本的swap逻辑卷。
      [root@10-0-44-221 ~]# swapoff -a
      [root@10-0-44-221 ~]# lvremove /dev/vg/swap
      Do you really want to remove active logical volume swap? [y/n]: yes
       Logical volume "swap" successfully removed
    6. 将逻辑卷/dev/vg/root扩容20G。
      [root@10-0-44-221 ~]# lvextend -L +20G /dev/vg/root
       Size of logical volume vg/root changed from 93.59 GiB (23959 extents) to 113.59 GiB (29079 extents).
       Logical volume root successfully resized.
      #对/dev/vg/root 扩容20G
      
      [root@10-0-44-221 ~]# lvdisplay
       --- Logical volume ---
       LV Path /dev/vg/root
       LV Name root
       VG Name vg
       LV UUID UkyCVW-gd5E-Z4Q2-bVHv-T84e-c3GH-ZMiUdF
       LV Write Access read/write
       LV Creation host, time localhost, 2017-07-26 13:18:40 +0800
       LV Status available
       # open 1
       LV Size 113.59 GiB
       Current LE 29079
       Segments 2
       allocation inherit
       Read ahead sectors auto
       - currently set to 8192
       Block device 253:0
    7. 执行xfs_growfs进行xfs文件系统扩容,使其生效,并检查新分区。
      [root@10-0-44-221 ~]# xfs_growfs /dev/vg/root
      meta-data=/dev/mapper/vg-root isize=256 agcount=4, agsize=6133504 blks
       = sectsz=512 attr=2, projid32bit=1
       = crc=0 finobt=0
      data = bsize=4096 blocks=24534016, imaxpct=25
       = sunit=0 swidth=0 blks
      naming =version 2 bsize=4096 ascii-ci=0 ftype=0
      log =internal bsize=4096 blocks=11979, version=2
       = sectsz=512 sunit=0 blks, lazy-count=1
      realtime =none extsz=4096 blocks=0, rtextents=0
      data blocks changed from 24534016 to 29776896
      
      [root@10-0-44-221 ~]# df -h|grep vg-root
      Filesystem Size Used Avail Use% Mounted on
      /dev/mapper/vg-root 114G 6.5G 108G 6% /
      #新分区扩容已生效
    8. 从逻辑卷组划分新容量给swap分区,并启动swap分区,写入磁盘配置。
      [root@10-0-44-221 ~]# lvcreate -L 4G -n swap vg
       Logical volume "swap" created.
      #从卷组vg创建4G分区命名为swap
      
      [root@10-0-44-221 ~]# mkswap /dev/vg/swap
      Setting up swapspace version 1, size = 4194300 KiB
      no label, UUID=bfc8a843-c758-4665-adfe-e32752ceda44
      #创建swap分区,可知此swap分区的UUID为bfc8a843-c758-4665-adfe-e32752ceda44
      
      [root@10-0-44-221 ~]# swapon /dev/mapper/vg-swap
      #开启swap分区
      
      [root@10-58-21-213 ~]# sed -i '/swap/d' /etc/fstab
      echo "UUID=bfc8a843-c758-4665-adfe-e32752ceda44 swap swap defaults 0 0"
      #将swap的设置写入磁盘分区表,以便开机自启。
    9. 关机重启后,此云主机LVM分区的xfs系统成功扩容,swap分区也保留了4G使用。
  3. 使用growpart工具扩容xfs根分区实例。
    Note: 此方式适用于xfs分区动态扩容,无须挂载ISO或使用LVM分区工具管理磁盘。

    假定云主机的xfs根分区6G,根云盘总容量8G,将根云盘总容量从8G扩容至40G后,打算将新增容量扩容至xfs根分区。

    操作步骤如下:
    1. 查看当前分区,可见根云盘容量确实已扩容至40G,其中xfs根分区为6G,扩容多出的磁盘空间仍属于未分配空间,没有增加到磁盘分区中。
      [root@10-0-44-210 ~]# lsblk
      NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      sda      8:0    0  400G  0 disk
      └─sda1   8:1    0  400G  0 part /mnt/nfs-data
      vda    253:0    0   40G  0 disk
      ├─vda1 253:1    0    2G  0 part [SWAP]
      └─vda2 253:2    0    6G  0 part /
    2. 安装growpart工具。
      [root@10-0-44-210 ~]# yum install -y cloud-utils-growpart
    3. 使用growpart <DeviceName> <PartionNumber>命令对xfs根分区进行扩容,xfs根分区的DeviceName/dev/vdaPartionNumber2
      [root@10-0-44-210 ~]# growpart /dev/vda 2
      CHANGED: partition=2 start=4196352 old: size=12580864 end=16777216 new: size=79689695 end=83886047
    4. 查看扩容后分区情况,可见xfs根分区已从6G扩容至38G。
      [root@10-0-44-210 ~]# lsblk
      NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      sda      8:0    0  400G  0 disk
      └─sda1   8:1    0  400G  0 part /mnt/nfs-data
      vda    253:0    0   40G  0 disk
      ├─vda1 253:1    0    2G  0 part [SWAP]
      └─vda2 253:2    0   38G  0 part /
    5. 扩展XFS文件系统。
      1. 要扩展XFS文件系统,请确保已安装xfsprogs工具,安装命令如下:
        [root@10-0-44-210 ~]# yum install xfsprogs
      2. 使用xfs_growfs命令扩展/dev/vda2上的文件系统,其中/为卷挂载点。
        [root@10-0-44-210 ~]# xfs_growfs /
        meta-data=/dev/vda2              isize=256    agcount=26, agsize=393152 blks
                 =                       sectsz=512   attr=2, projid32bit=1
                 =                       crc=0        finobt=0 spinodes=0
        data     =                       bsize=4096   blocks=9961211, imaxpct=25
                 =                       sunit=0      swidth=0 blks
        naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
        log      =internal               bsize=4096   blocks=2560, version=2
                 =                       sectsz=512   sunit=0 blks, lazy-count=1
        realtime =none                   extsz=4096   blocks=0, rtextents=0
        data blocks changed from 1572608 to 9961211
      3. 查看文件系统是否反映增加的卷大小。
        [root@10-0-44-210 ~]# df -h /
        Filesystem      Size  Used Avail Use% Mounted on
        /dev/vda2        38G  3.3G   35G   9% /
    Note: 建议用户根据实际操作系统类型安装扩容格式化工具,例如:
    • CentOS 7:
      yum install cloud-utils-growpart
      yum install xfsprogs
    • Ubuntu 14、Ubuntu 16、Ubuntu 18、Debian 9:
      apt install cloud-guest-utils
      apt install xfsprogs
    • Debian 8、OpenSUSE 42.3、OpenSUSE 13.1、SLES 12 SP2:请使用上游版本(upstream)的growpart或者xfsprogs工具。
  4. Windows分区扩容实例
    Windows分区可以在磁盘管理界面直接进行磁盘扩容。
    Note: Windows在线扩容后需重新扫描磁盘。
    Figure 6所示:
    Figure 6. 重新扫描磁盘