如何在Linux上使用LVM扩展根文件系统

时间:2020-02-23 14:38:08  来源:igfitidea点击:

欢迎使用我们的指南,了解如何在Linux上使用LVM扩展根文件系统。这将涵盖ext4和XFS文件系统根分区扩展。为了演示完整的LVM生命周期,我们将执行以下操作:创建LVM物理卷,卷组和逻辑卷在逻辑卷上创建XFS和ext4文件系统扩展LVM逻辑卷(根和非根文件系统)

LVM允许我们在正在运行的系统上创建,调整分区大小或者删除分区,而无需任何重新引导。因此,请检查以下步骤以在Linux中使用LVM扩展根文件系统。我们可以跳过一些不适用于的步骤。

确认分发中的磁盘分区。

在进行任何扩展之前,只需确认我们的磁盘布局/分区方案即可。

$lsblk 
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   30G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   29G  0 part 
  ├─rhel-root 253:0    0 26.9G  0 lvm  /
  └─rhel-swap 253:1    0  2.1G  0 lvm  [SWAP]

如前所述,我们在/dev/vda2物理卷上有一个根文件系统。

$sudo pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/vda2  rhel lvm2 a--  <29.00g    0

扩展OS根磁盘

如所示,我的根文件系统在30GB磁盘上。通过扩展虚拟磁盘(VM磁盘设备)将其增加到40GB。

我使用KVM虚拟化技术,因此本指南对我有用:如何扩展/增加KVM虚拟机(VM)磁盘大小

$lsblk 
 NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
 sr0            11:0    1 1024M  0 rom  
 vda           252:0    0   40G  0 disk 
 ├─vda1        252:1    0    1G  0 part /boot
 └─vda2        252:2    0   29G  0 part 
   ├─rhel-root 253:0    0 26.9G  0 lvm  /
   └─rhel-swap 253:1    0  2.1G  0 lvm  [SWAP]

如果我们在其他虚拟化平台上,请参阅其文档以了解如何扩展OS磁盘。

调整了OS块设备的大小之后,请在Linux机器上ssh并扩展LVM以使用新添加的磁盘容量。下面的命令将磁盘(/dev/vda)上的最后一个分区(分区2)扩展为252:2,使其达到磁盘提供的最大大小。

安装云工具

对于那些新的togrowpart,它是一个Linux命令行工具,用于扩展分区表中的分区以填充可用空间。此命令由cloud utils软件包提供。

在Ubuntu/Debian系统上,运行

sudo apt -y install cloud-guest-utils

对于CentOS服务器,运行

sudo yum -y install cloud-utils-growpart

可以通过传递-h参数来查看帮助页面

# growpart -h
growpart disk partition
   rewrite partition table so that partition takes up all the space it can
   options:
    -h | --help       print Usage and exit
         --fudge F    if part could be resized, but change would be
                      less than 'F' bytes, do not resize (default: 1048576)
    -N | --dry-run    only report what would be done, show new 'sfdisk -d'
    -v | --verbose    increase verbosity/debug
    -u | --update  R update the the kernel partition table info after growing
                      this requires kernel support and 'partx --update'
                      R is one of:
                       - 'auto'  : [default] update partition if possible
                       - 'force' : try despite sanity checks (fail on failure)
                       - 'off'   : do not attempt
                       - 'on'    : fail if sanity checks indicate no support

   Example:
    - growpart /dev/sda 1
      Resize partition 1 on /dev/sd

现在,使用growpart扩展分区。

$sudo growpart /dev/vda 2
CHANGED: partition=2 start=2099200 old: size=18872320 end=20971520 new: size=60815327,end=62914527

这将调整/dev/vda上分区2的大小。

验证更改。

$lsblk 
 NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
 sr0            11:0    1 1024M  0 rom  
 vda           252:0    0   40G  0 disk 
 ├─vda1        252:1    0    1G  0 part /boot
 └─vda2        252:2    0   39G  0 part 
   ├─rhel-root 253:0    0 26.9G  0 lvm  /
   └─rhel-swap 253:1    0  2.1G  0 lvm  [SWAP]

调整根逻辑卷的大小以占据所有空间

调整物理卷的大小。

$sudo pvresize /dev/vda2
  Physical volume "/dev/vda2" changed
  1 physical volume(s) resized or updated/0 physical volume(s) not resized

$sudo pvs
  PV         VG   Fmt  Attr PSize   PFree 
  /dev/vda2  rhel lvm2 a--  <39.00g 10.00g

检查配置的卷组的大小。

$sudo vgs
   VG   #PV #LV #SN Attr   VSize   VFree 
   rhel   1   2   0 wz--n- <39.00g 10.00g

然后使用调整大小后的卷组调整逻辑卷的根大小

sudo lvextend -l +100%FREE /dev/name-of-volume-group/root

在我的示例中,这将是:

$df -hT | grep mapper
 /dev/mapper/rhel-root xfs        27G  1.9G   26G   8% /

$sudo lvextend -l +100%FREE /dev/mapper/rhel-root
Size of logical volume rhel/root changed from <26.93 GiB (6893 extents) to <36.93 GiB (9453 extents).
Logical volume rhel/root successfully resized.

我们可以将100%FREE命令替换为以MB为单位的首选空间,例如,添加256MB以+ 256M替换它。

更新文件系统上的更改

根文件系统仍将显示旧大小。

$df -hT | grep mapper
 /dev/mapper/rhel-root xfs        27G  1.9G   26G   8% /

让文件系统报告实际大小,包括扩展大小。

对于ext4文件系统

sudo resize2fs /dev/name-of-volume-group/root

对于xfs文件系统

$sudo xfs_growfs /
 meta-data=/dev/mapper/rhel-root  isize=512    agcount=4, agsize=1764608 blks
          =                       sectsz=512   attr=2, projid32bit=1
          =                       crc=1        finobt=1, sparse=1, rmapbt=0
          =                       reflink=1
 data     =                       bsize=4096   blocks=7058432, imaxpct=25
          =                       sunit=0      swidth=0 blks
 naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
 log      =internal log           bsize=4096   blocks=3446, version=2
          =                       sectsz=512   sunit=0 blks, lazy-count=1
 realtime =none                   extsz=4096   blocks=0, rtextents=0
 data blocks changed from 7058432 to 9679872