调整具有 GPT 分区的 OS 磁盘的大小

备注

本文仅适用于具有 GUID 分区表 (GPT) 分区的 OS 磁盘。

本文介绍如何在 Linux 中增加具有 GPT 分区的 OS 磁盘的大小。

确定 OS 磁盘是否具有 MBR 或 GPT 分区

使用 parted 命令确定创建的磁盘分区是否具有主启动记录 (MBR) 分区或 GPT 分区。

MBR 分区

在下面的输出中,分区表显示了一个 msdos 值 。 此值标识 MBR 分区。

[user@myvm ~]# parted -l /dev/sda
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number  Start   End     Size    Type     File system  Flags
1       1049kB  525MB   524MB   primary  ext4         boot
2       525MB   34.4GB  33.8GB  primary  ext4
[user@myvm ~]#

GPT 分区

在下面的输出中,分区表显示了一个 gpt 值 。 此值标识 GPT 分区。

[user@myvm ~]# parted -l /dev/sda
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 68.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name                  Flags
1       1049kB  525MB   524MB   fat16        EFI System Partition  boot
2       525MB   1050MB  524MB   xfs
3       1050MB  1052MB  2097kB                                     bios_grub
4       1052MB  68.7GB  67.7GB                                     lvm

如果虚拟机 (VM) 在 OS 磁盘上具有 GPT 分区,请增加 OS 磁盘的大小。

增加 OS 磁盘的大小

以下说明适用于 Linux 支持的分发版。

备注

在继续操作之前,为 VM 创建备份副本,或者拍摄 OS 磁盘的快照。

Ubuntu

在 Ubuntu 16.x 和 18.x 中增加 OS 磁盘的大小:

  1. 停止 VM。
  2. 从门户增加 OS 磁盘的大小。
  3. 重启 VM,然后以根用户身份登录到 VM。
  4. 验证 OS 磁盘现在是否显示增加后的文件系统大小。

如以下示例中所示,已通过门户将 OS 磁盘的大小调整为 100 GB。 / 上装载的 /dev/sda1 文件系统现在显示为 97 GB 。

user@myvm:~# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  314M     0  314M   0% /dev
tmpfs          tmpfs      65M  2.3M   63M   4% /run
/dev/sda1      ext4       97G  1.8G   95G   2% /
tmpfs          tmpfs     324M     0  324M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     324M     0  324M   0% /sys/fs/cgroup
/dev/sda15     vfat      105M  3.6M  101M   4% /boot/efi
/dev/sdb1      ext4       20G   44M   19G   1% /mnt
tmpfs          tmpfs      65M     0   65M   0% /run/user/1000
user@myvm:~#

SUSE

增加 SUSE 12 SP4、SUSE SLES 12 for SAP、SUSE SLES 15 和 SUSE SLES 15 for SAP 中的 OS 磁盘大小:

  1. 停止 VM。
  2. 从门户增加 OS 磁盘的大小。
  3. 重启 VM。

重启 VM 后,完成以下步骤:

  1. 使用以下命令,以根用户身份访问 VM:

    # sudo -i
    
  2. 使用以下命令来安装 growpart 包,该包将用于调整分区的大小:

    # zypper install growpart
    
  3. 使用 lsblk 命令查找安装在文件系统根目录 ("/") 上的分区。 在这种情况下,我们看到设备 sda 的分区 4 安装在 / 上:

    # lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   48G  0 disk
    ├─sda1   8:1    0    2M  0 part
    ├─sda2   8:2    0  512M  0 part /boot/efi
    ├─sda3   8:3    0    1G  0 part /boot
    └─sda4   8:4    0 28.5G  0 part /
    sdb      8:16   0    4G  0 disk
    └─sdb1   8:17   0    4G  0 part /mnt/resource
    
  4. 通过使用上一步中确定的分区号,使用 growpart 命令调整所需分区的大小。

    # growpart /dev/sda 4
    CHANGED: partition=4 start=3151872 old: size=59762655 end=62914527 new: size=97511391 end=100663263
    
  5. 再次运行 lsblk 命令以检查是否已增加分区大小。

    下面的输出显示已将 /dev/sda4 分区的大小调整为 46.5 GB:

    linux:~ # lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   48G  0 disk
    ├─sda1   8:1    0    2M  0 part
    ├─sda2   8:2    0  512M  0 part /boot/efi
    ├─sda3   8:3    0    1G  0 part /boot
    └─sda4   8:4    0 46.5G  0 part /
    sdb      8:16   0    4G  0 disk
    └─sdb1   8:17   0    4G  0 part /mnt/resource
    
  6. 使用具有 -f 标记的 lsblk 命令确定 OS 磁盘上的文件系统类型:

    linux:~ # lsblk -f
    NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
    sda
    ├─sda1
    ├─sda2 vfat   EFI   AC67-D22D                            /boot/efi
    ├─sda3 xfs    BOOT  5731a128-db36-4899-b3d2-eb5ae8126188 /boot
    └─sda4 xfs    ROOT  70f83359-c7f2-4409-bba5-37b07534af96 /
    sdb
    └─sdb1 ext4         8c4ca904-cd93-4939-b240-fb45401e2ec6 /mnt/resource
    
  7. 根据文件系统类型,使用相应的命令调整文件系统的大小。

    对于 xfs,请使用以下命令:

    #xfs_growfs /
    

    示例输出:

    linux:~ # xfs_growfs /
    meta-data=/dev/sda4              isize=512    agcount=4, agsize=1867583 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0 spinodes=0 rmapbt=0
             =                       reflink=0
    data     =                       bsize=4096   blocks=7470331, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal               bsize=4096   blocks=3647, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    data blocks changed from 7470331 to 12188923
    

    对于 ext4,请使用以下命令:

    #resize2fs /dev/sda4
    
  8. 使用以下命令验证增加后的用于 df -Th 的文件系统的大小:

    #df -Thl
    

    示例输出:

    linux:~ # df -Thl
    Filesystem     Type      Size  Used Avail Use% Mounted on
    devtmpfs       devtmpfs  445M  4.0K  445M   1% /dev
    tmpfs          tmpfs     458M     0  458M   0% /dev/shm
    tmpfs          tmpfs     458M   14M  445M   3% /run
    tmpfs          tmpfs     458M     0  458M   0% /sys/fs/cgroup
    /dev/sda4      xfs        47G  2.2G   45G   5% /
    /dev/sda3      xfs      1014M   86M  929M   9% /boot
    /dev/sda2      vfat      512M  1.1M  511M   1% /boot/efi
    /dev/sdb1      ext4      3.9G   16M  3.7G   1% /mnt/resource
    tmpfs          tmpfs      92M     0   92M   0% /run/user/1000
    tmpfs          tmpfs      92M     0   92M   0% /run/user/490
    

    在前面的示例中,可以看到 OS 磁盘的文件系统大小已增加。

带有 LVM 的 RHEL

  1. 使用以下命令,以根用户身份访问 VM:

    [root@dd-rhel7vm ~]# sudo -i
    
  2. 使用 lsblk 命令确定在文件系统的根目录(/) 上装载的逻辑卷 (LV)。 在本例中,我们会看到在 / 上装载了 rootvg-rootlv。 如果需要其他文件系统,请替换本文中的 LV 和装入点。

    [root@dd-rhel7vm ~]# lsblk -f
    NAME                  FSTYPE      LABEL   UUID                                   MOUNTPOINT
    fd0
    sda
    ├─sda1                vfat                C13D-C339                              /boot/efi
    ├─sda2                xfs                 8cc4c23c-fa7b-4a4d-bba8-4108b7ac0135   /boot
    ├─sda3
    └─sda4                LVM2_member         zx0Lio-2YsN-ukmz-BvAY-LCKb-kRU0-ReRBzh
       ├─rootvg-tmplv      xfs                 174c3c3a-9e65-409a-af59-5204a5c00550   /tmp
       ├─rootvg-usrlv      xfs                 a48dbaac-75d4-4cf6-a5e6-dcd3ffed9af1   /usr
       ├─rootvg-optlv      xfs                 85fe8660-9acb-48b8-98aa-bf16f14b9587   /opt
       ├─rootvg-homelv     xfs                 b22432b1-c905-492b-a27f-199c1a6497e7   /home
       ├─rootvg-varlv      xfs                 24ad0b4e-1b6b-45e7-9605-8aca02d20d22   /var
       └─rootvg-rootlv     xfs                 4f3e6f40-61bf-4866-a7ae-5c6a94675193   /
    
  3. 检查 LVM 卷组 (VG) 中是否有包含根分区的可用空间。 如果有可用空间,请跳到步骤 12。

    [root@dd-rhel7vm ~]# vgdisplay rootvg
    --- Volume group ---
    VG Name               rootvg
    System ID
    Format                lvm2
    Metadata Areas        1
    Metadata Sequence No  7
    VG Access             read/write
    VG Status             resizable
    MAX LV                0
    Cur LV                6
    Open LV               6
    Max PV                0
    Cur PV                1
    Act PV                1
    VG Size               <63.02 GiB
    PE Size               4.00 MiB
    Total PE              16132
    Alloc PE / Size       6400 / 25.00 GiB
    Free  PE / Size       9732 / <38.02 GiB
    VG UUID               lPUfnV-3aYT-zDJJ-JaPX-L2d7-n8sL-A9AgJb
    

    在此示例中,Free PE / Size 一行显示卷组中有 38.02 GB 的可用空间。 在将空间添加到卷组之前,无需调整磁盘大小。

  4. 在带有 LVM 的 RHEL 7.x 中增加 OS 磁盘的大小:

    1. 停止 VM。
    2. 从门户增加 OS 磁盘的大小。
    3. 启动 VM。
  5. 重启 VM 后,请完成以下步骤:

    • 安装 cloud-utils-growpart 包以提供 growpart 命令。若要增加 OS 磁盘大小或用于 GPT 磁盘布局的 gdisk 处理程序,必须使用该命令。 大多数市场映像上都预安装了这些包。
    [root@dd-rhel7vm ~]# yum install cloud-utils-growpart gdisk
    
  6. 通过使用 pvscan 命令,确定名为 rootvg 的卷组中哪个磁盘和分区包含 LVM 物理卷 (PV)。 请注意括号(“[”和“]”)之间列出的大小和可用空间。

    [root@dd-rhel7vm ~]# pvscan
      PV /dev/sda4   VG rootvg          lvm2 [<63.02 GiB / <38.02 GiB free]
    
  7. 使用 lsblk 验证分区大小。

    [root@dd-rhel7vm ~]# lsblk /dev/sda4
    NAME            MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sda4              8:4    0  63G  0 part
    ├─rootvg-tmplv  253:1    0   2G  0 lvm  /tmp
    ├─rootvg-usrlv  253:2    0  10G  0 lvm  /usr
    ├─rootvg-optlv  253:3    0   2G  0 lvm  /opt
    ├─rootvg-homelv 253:4    0   1G  0 lvm  /home
    ├─rootvg-varlv  253:5    0   8G  0 lvm  /var
    └─rootvg-rootlv 253:6    0   2G  0 lvm  /
    
  8. 使用 growpart、设备名称和分区号扩展包含此 PV 的分区。 这样做将扩展指定分区以使用设备上的所有可用连续空间。

    [root@dd-rhel7vm ~]# growpart /dev/sda 4
    CHANGED: partition=4 start=2054144 old: size=132161536 end=134215680 new: size=199272414 end=201326558
    
  9. 再次使用 lsblk 命令验证分区是否已调整到预期大小。 请注意,在此示例中,sda4 已从 63 GB 更改为 95 GB。

    [root@dd-rhel7vm ~]# lsblk /dev/sda4
    NAME            MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sda4              8:4    0  95G  0 part
    ├─rootvg-tmplv  253:1    0   2G  0 lvm  /tmp
    ├─rootvg-usrlv  253:2    0  10G  0 lvm  /usr
    ├─rootvg-optlv  253:3    0   2G  0 lvm  /opt
    ├─rootvg-homelv 253:4    0   1G  0 lvm  /home
    ├─rootvg-varlv  253:5    0   8G  0 lvm  /var
    └─rootvg-rootlv 253:6    0   2G  0 lvm  /
    
  10. 扩展 PV 以使用新扩展的分区的其余部分:

    [root@dd-rhel7vm ~]# pvresize /dev/sda4
    Physical volume "/dev/sda4" changed
    1 physical volume(s) resized or updated / 0 physical volume(s) not resized
    
  11. 验证 PV 的新大小是否为预期大小,并将其与原始 [size / free] 值进行比较:

    [root@dd-rhel7vm ~]# pvscan
    PV /dev/sda4   VG rootvg          lvm2 [<95.02 GiB / <70.02 GiB free]
    
  12. 将所需逻辑卷 (LV) 扩展到所需量。 这个量不一定要是卷组中的所有可用空间。 在下面的示例中,将 /dev/mapper/rootvg-rootlv 的大小从 2 GB 调整到了 12 GB(增加了 10 GB)。 此命令还将调整文件系统的大小。

    [root@dd-rhel7vm ~]# lvresize -r -L +10G /dev/mapper/rootvg-rootlv
    

    示例输出:

    [root@dd-rhel7vm ~]# lvresize -r -L +10G /dev/mapper/rootvg-rootlv
    Size of logical volume rootvg/rootlv changed from 2.00 GiB (512 extents) to 12.00 GiB (3072 extents).
    Logical volume rootvg/rootlv successfully resized.
    meta-data=/dev/mapper/rootvg-rootlv isize=512    agcount=4, agsize=131072 blks
             =                       sectsz=4096  attr=2, projid32bit=1
             =                       crc=1        finobt=0 spinodes=0
    data     =                       bsize=4096   blocks=524288, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal               bsize=4096   blocks=2560, version=2
             =                       sectsz=4096  sunit=1 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    data blocks changed from 524288 to 3145728
    
  13. lvresize 命令将为 LV 中的文件系统自动调用相应的重设大小命令。 使用以下命令,检查装载在 / 上的 /dev/mapper/rootvg-rootlv 的文件系统大小是否已增加:

    [root@dd-rhel7vm ~]# df -Th /
    

    示例输出:

    [root@dd-rhel7vm ~]# df -Th /
    Filesystem                Type  Size  Used Avail Use% Mounted on
    /dev/mapper/rootvg-rootlv xfs    12G   71M   12G   1% /
    [root@dd-rhel7vm ~]#
    

备注

若要使用相同的过程来调整任何其他逻辑卷的大小,请更改步骤 12 中的 LV 名称。

RHEL RAW

在 RHEL RAW 中增加 OS 磁盘的大小:

  1. 停止 VM。
  2. 从门户增加 OS 磁盘的大小。
  3. 启动 VM。

重启 VM 后,完成以下步骤:

  1. 通过使用以下命令,以根用户身份访问 VM:

    [root@dd-rhel7vm ~]# sudo -i
    
  2. 重启 VM 后,请完成以下步骤:

    • 安装 cloud-utils-growpart 包以提供 growpart 命令。若要增加 OS 磁盘大小或用于 GPT 磁盘布局的 gdisk 处理程序,必须使用该命令。 大多数市场映像上都预安装了此包。
    [root@dd-rhel7vm ~]# yum install cloud-utils-growpart gdisk
    
  3. 使用 lsblk-f 命令验证保存根 ( / ) 分区的分区和文件系统类型:

    [root@vm-dd-cent7 ~]# lsblk -f
    NAME    FSTYPE LABEL UUID                                 MOUNTPOINT
    sda
    ├─sda1  xfs          2a7bb59d-6a71-4841-a3c6-cba23413a5d2 /boot
    ├─sda2  xfs          148be922-e3ec-43b5-8705-69786b522b05 /
    ├─sda14
    └─sda15 vfat         788D-DC65                            /boot/efi
    sdb
    └─sdb1  ext4         923f51ff-acbd-4b91-b01b-c56140920098 /mnt/resource
    
  4. 若要进行验证,请首先使用 gdisk 列出 sda 磁盘的分区表。 在此示例中,我们看到一个 48 GB 的磁盘,其中包含分区 2,该分区的大小为 29.0 GiB。 该磁盘已在 Azure 门户中从 30 GB 扩展到 48 GB。

    [root@vm-dd-cent7 ~]# gdisk -l /dev/sda
    GPT fdisk (gdisk) version 0.8.10
    
    Partition table scan:
    MBR: protective
    BSD: not present
    APM: not present
    GPT: present
    
    Found valid GPT with protective MBR; using GPT.
    Disk /dev/sda: 100663296 sectors, 48.0 GiB
    Logical sector size: 512 bytes
    Disk identifier (GUID): 78CDF84D-9C8E-4B9F-8978-8C496A1BEC83
    Partition table holds up to 128 entries
    First usable sector is 34, last usable sector is 62914526
    Partitions will be aligned on 2048-sector boundaries
    Total free space is 6076 sectors (3.0 MiB)
    
    Number  Start (sector)    End (sector)  Size       Code  Name
       1         1026048         2050047   500.0 MiB   0700
       2         2050048        62912511   29.0 GiB    0700
    14            2048           10239   4.0 MiB     EF02
    15           10240         1024000   495.0 MiB   EF00  EFI System Partition
    
  5. 使用 growpart 命令扩展根的分区(在本例中为 sda2)。 使用此命令可扩展分区以使用磁盘上的所有连续空间。

    [root@vm-dd-cent7 ~]# growpart /dev/sda 2
    CHANGED: partition=2 start=2050048 old: size=60862464 end=62912512 new: size=98613214 end=100663262
    
  6. 现在,再次使用 gdisk 输出新分区表。 请注意,分区 2 已扩展为 47.0 GiB:

    [root@vm-dd-cent7 ~]# gdisk -l /dev/sda
    GPT fdisk (gdisk) version 0.8.10
    
    Partition table scan:
    MBR: protective
    BSD: not present
    APM: not present
    GPT: present
    
    Found valid GPT with protective MBR; using GPT.
    Disk /dev/sda: 100663296 sectors, 48.0 GiB
    Logical sector size: 512 bytes
    Disk identifier (GUID): 78CDF84D-9C8E-4B9F-8978-8C496A1BEC83
    Partition table holds up to 128 entries
    First usable sector is 34, last usable sector is 100663262
    Partitions will be aligned on 2048-sector boundaries
    Total free space is 4062 sectors (2.0 MiB)
    
    Number  Start (sector)    End (sector)  Size       Code  Name
       1         1026048         2050047   500.0 MiB   0700
       2         2050048       100663261   47.0 GiB    0700
    14            2048           10239   4.0 MiB     EF02
    15           10240         1024000   495.0 MiB   EF00  EFI System Partition
    
  7. 使用 xfs_growfs 扩展分区上的文件系统,此命令适用于标准市场生成的 RedHat 系统:

    [root@vm-dd-cent7 ~]# xfs_growfs /
    meta-data=/dev/sda2              isize=512    agcount=4, agsize=1901952 blks
             =                       sectsz=4096  attr=2, projid32bit=1
             =                       crc=1        finobt=0 spinodes=0
    data     =                       bsize=4096   blocks=7607808, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal               bsize=4096   blocks=3714, version=2
             =                       sectsz=4096  sunit=1 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    data blocks changed from 7607808 to 12326651
    
  8. 使用 df 命令验证新大小是否已反映出来:

    [root@vm-dd-cent7 ~]# df -hl
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        452M     0  452M   0% /dev
    tmpfs           464M     0  464M   0% /dev/shm
    tmpfs           464M  6.8M  457M   2% /run
    tmpfs           464M     0  464M   0% /sys/fs/cgroup
    /dev/sda2        48G  2.1G   46G   5% /
    /dev/sda1       494M   65M  430M  13% /boot
    /dev/sda15      495M   12M  484M   3% /boot/efi
    /dev/sdb1       3.9G   16M  3.7G   1% /mnt/resource
    tmpfs            93M     0   93M   0% /run/user/1000