文档首页 > > 常见问题> Cloud-Init操作类>

如何自定义可自动扩容root分区的Linux私有镜像?

如何自定义可自动扩容root分区的Linux私有镜像?

分享
更新时间:2021/02/10 GMT+08:00

约束条件

  • 根分区文件系统为xfs的镜像不支持自动扩容。
  • 有LVM分区的镜像不支持自动扩容。
  • 推荐使用文件系统为ext3、ext4的单分区镜像。

    版本太老的OS分区扩容成功后需要重启,文件系统才能刷新。

不同OS的growpart安装方式

为了支持私有镜像自动扩容root分区,需要安装growpart工具,不同操作系统的安装方式如下:
表1 不同操作系统growpart安装包

操作系统

工具包

Debian/Ubuntu

cloud-init、cloud-utils、cloud-initramfs-growroot

Fedora/CentOS

cloud-init、cloud-utils、cloud-utils-growpart

SUSE/openSUSE

cloud-init、growpart

Debian 9请优先使用“方法一”安装growpart,如安装失败,请参考“方法二”的操作步骤完成安装。

方法一:

Debian 9请执行如下命令安装growpart工具。

apt-get install -y -f cloud-init cloud-utils cloud-initramfs-growroot

方法二:

如使用“方法一”安装失败,可能是由于Debian 9.0.0的安装源有问题,故需自行下载依赖包cloud-utils和cloud-initramfs-growroot后安装。
  1. 执行以下命令下载依赖包:

    wget 包下载地址

    可从如下地址获取依赖包:

    http://ftp.br.debian.org/debian/pool/main/c/cloud-utils/cloud-utils_0.29-1_all.deb

    http://ftp.br.debian.org/debian/pool/main/c/cloud-initramfs-tools/cloud-initramfs-growroot_0.18.debian5_all.deb

  2. 执行以下命令修复依赖:

    apt --fix-broken install

  3. 执行以下命令进行安装:

    dpkg -i cloud-utils包路径 cloud-initramfs-growroot包路径

    例如:dpkg -i /root/cloud-utils_0.29-1_all.deb /root/cloud-initramfs-growroot_0.18.debian5_all.deb

Debian其他系列请执行以下命令安装:

apt-get update;apt-get install cloud-utils cloud-initramfs-growroot

操作步骤

私有镜像磁盘分区方式以如下两种场景为例:

当root分区在最末尾分区的情况请参考root分区在末尾分区

当root分区在非末尾分区的情况请参考root分区在非末尾分区

parted命令无法使用时,请确保OS已经安装parted工具,请按照如下方式安装:
  • CentOS系列,请执行以下命令:

    yum install parted

  • Debian系列,请执行以下命令:

    apt-get install parted

  • root分区在末尾分区(例如:/dev/xvda1: swap,/dev/xvda2: root)

    以CentOS 6.5 64bit系统盘为40GB为例,介绍root分区在末尾分区时如何自定义可自动扩容root分区的Linux私有镜像的配置方法。

    1. 执行如下命令查看/dev/xvda的磁盘分区。

      parted -l /dev/xvda

      回显信息如下所示,此时root分区为第二分区,大小为38.7GB。

      Model: Xen Virtual Block Device (xvd)
      Disk /dev/xvda: 42.7GB
      Sector size (logical/physical): 512B/512B
      Partition Table: msdos
      
      Number Start End Size Type File system Flags
      1 1049kB 4296MB 4295MB primary linux-swap(v1)
      2 4296MB 42.9GB 38.7GB primary ext4 boot
    2. 为了支持镜像自动扩容到root分区,请安装growpart工具。

      执行以下命令完成growpart安装。

      yum install cloud-*

      growpart可能集成在cloud-utils-growpart/cloud-utils/cloud-initramfs-tools/cloud-init包里,可以直接执行上述命令并确保growpart命令可用。

    3. 执行如下命令,获取文件系统类型和UUID。

      blkid

      回显信息如下所示。

      /dev/xvda1: UUID="25ec3bdb-ba24-4561-bcdc-802edf42b85f" TYPE="swap" 
      /dev/xvda2: UUID="1a1ce4de-e56a-4e1f-864d-31b7d9dfb547" TYPE="ext4" 
    4. 关闭云服务器转成私有镜像。
      [root@sluo-ecs-e6dc-resizefs ~]# poweroff 
      Connection closed by foreign host.
      Disconnected from remote host at 11:08:54.
      Type `help´ to learn how to use Xshell prompt.
    5. 用此新私有镜像发放云服务器,系统盘指定50GB为例,重新登录后,执行如下命令查看分区扩容情况。

      parted -l /dev/xvda

      回显信息如下所示,此时root分区已完成自动扩容。

      Model: Xen Virtual Block Device (xvd)
      Disk /dev/xvda: 53.7GB
      Sector size (logical/physical): 512B/512B
      Partition Table: msdos
      
      NumberStartEndSizeTypeFile systemFlags
      1 1049kB 4296MB 4295MB primary linux-swap(v1)
      2 4296MB 53.7GB 49.4GB primary ext4 boot
    6. 执行如下命令,检查磁盘挂载是否成功。

      df -Th

      回显信息如下所示。

      Filesystem     Type      Size    Used   Avail Use%  Mounted on
      /dev/xvda2     ext4      49.4G    2.6G  46.8G  4%   /dev/shm
      tmpfs          tmpfs     4295M    0     4295M  0%   / 
  • root分区在非末尾分区(例如:/dev/xvda1: root,/dev/xvda2: swap)
    以CentOS 7.3 64bit系统盘为40GB为例,介绍root分区在非末尾分区时如何自定义可自动扩容root分区的Linux私有镜像的配置方法。
    1. 执行如下命令查看/dev/xvda的磁盘分区。

      parted -l /dev/xvda

      回显信息如下所示,此时,第一个分区是root分区,大小为40.9GB。第二个分区是swap分区。

      Model: Xen Virtual Block Device (xvd)
      Disk /dev/xvda: 42.9GB
      Sector size (logical/physical): 512B/512B
      Partition Table: msdos
      Disk Flags: 
      
      Number  Start   End     Size    Type     File system     Flags
      1      1049kB  41.0GB  40.9GB  primary  ext4            boot
      2      41.0GB  42.9GB  2000MB  primary  linux-swap(v1)
    2. 执行如下命令,查看/etc/fstab文件的配置。

      tail -n 3 /etc/fstab

      回显信息如下所示,可以看到两个分区的UUID信息。

      #
      UUID=7c4fce5d-f8f7-4ed6-8463-f2bd22d0ddea /                       ext4    defaults        1 1
      UUID=5de3cf2c-30c6-4fb2-9e63-830439d4e674 swap                    swap    defaults        0 0
    3. 执行如下命令,打开/etc/fstab文件,按“i”键进入编辑状态。

      vi /etc/fstab

    4. 清除swap分区配置,按“ESC”键退出编辑状态并执行如下命令保存配置。

      wq!

    5. 执行如下命令,查看配置是否已更改。

      tail -n 3 /etc/fstab

      回显信息如下所示,此时只有root分区的UUID信息。

      UUID=7c4fce5d-f8f7-4ed6-8463-f2bd22d0ddea /                       ext4    defaults        1 1
    6. 执行如下命令,关闭swap设备。

      swapoff -a

    7. 执行如下命令,查看/dev/xvda磁盘分区情况。

      parted /dev/xvda

      回显信息如下所示。

      [root@test-0912 bin]# parted /dev/xvda
      GNU Parted 3.1
      Using /dev/xvda
      Welcome to GNU Parted! Type 'help' to view a list of commands.
      (parted) 
    8. 输入如下命令,查看当前分区情况。

      p

      回显信息如下所示。
      (parted) p                                                     
      Model: Xen Virtual Block Device (xvd)
      Disk /dev/xvda: 42.9GB
      Sector size (logical/physical): 512B/512B
      Partition Table: msdos
      Disk Flags: 
      
      Number  Start   End     Size    Type     File system     Flags
       1      1049kB  4296MB  4295MB  primary  linux-swap(v1)
       2      4296MB  42.9GB  38.7GB  primary  xfs             boot
      (parted) 
    9. 输入如下命令,删除第2个磁盘分区。

      rm 2

      回显信息如下所示。

      (parted) rm 2
      (parted)
    10. 输入如下命令,查看当前分区情况。

      p

      回显信息如下所示。

      (parted) p                                                               
      Model: Xen Virtual Block Device (xvd)
      Disk /dev/xvda: 42.9GB
      Sector size (logical/physical): 512B/512B
      Partition Table: msdos
      Disk Flags: 
      
      Number  Start   End     Size    Type     File system  Flags
      1      1049kB  41.0GB  40.9GB  primary  ext4         boot
    11. 输入quit退出。
    12. 执行如下命令,查看/dev/xvda磁盘分区情况。

      parted -l /dev/xvda

      回显信息如下所示,swap分区已经删除。

      Model: Xen Virtual Block Device (xvd)
      Disk /dev/xvda: 42.9GB
      Sector size (logical/physical): 512B/512B
      Partition Table: msdos
      Disk Flags: 
      
      Number  Start   End     Size    Type     File system  Flags
      1      1049kB  41.0GB  40.9GB  primary  ext4         boot
    13. 为了支持镜像自动扩容到root分区,请安装growpart。

      执行以下命令完成growpart安装。

      yum install cloud-*

      growpart可能集成在cloud-utils-growpart/cloud-utils/cloud-initramfs-tools/cloud-init包里,可以直接执行上述命令并确保growpart命令可用。

    14. 执行如下命令,将/dev/xvda的swap分区扩容给root分区所在的第1个分区。

      growpart /dev/xvda 1

      回显信息如下所示:

      CHANGED: partition=1 start=2048 old: size=79978496 end=79980544 new: size=83873317,end=83875365
    15. 执行如下命令,查看/dev/xvda磁盘分区情况。

      parted -l /dev/xvda

      回显信息如下所示:
      Model: Xen Virtual Block Device (xvd)
      Disk /dev/xvda: 42.9GB
      Sector size (logical/physical): 512B/512B
      Partition Table: msdos
      Disk Flags: 
      
      Number  Start   End     Size    Type     File system  Flags
      1      1049kB  42.9GB  42.9GB  primary  ext4         boot
    16. 执行如下命令,获取文件系统类型和UUID。

      blkid

      回显信息如下所示:

      /dev/xvda1: UUID="7c4fce5d-f8f7-4ed6-8463-f2bd22d0ddea" TYPE="ext4" 
    17. 关闭云服务器转成私有镜像。
      [root@sluo-ecs-e6dc-resizefs ~]# poweroff 
      Connection closed by foreign host.
      Disconnected from remote host at 11:08:54.
      Type `help´ to learn how to use Xshell prompt.
    18. 用此新私有镜像发放云服务器,系统盘指定100GB为例,重新登录以后,执行以下命令查看/dev/xvda磁盘分区情况。

      parted -l /dev/xvda

      回显信息如下所示,确认root分区已完成扩容,此时扩容后的root分区大小为107GB。

      Model: Xen Virtual Block Device (xvd)
      Disk /dev/xvda: 107GB
      Sector size (logical/physical): 512B/512B
      Partition Table: msdos
      Disk Flags: 
      
      Number  Start   End    Size   Type     File system  Flags
       1      1049kB  107GB  107GB  primary  ext4         boot
      

      回显信息中Size的大小为扩容后的大小。

分享: