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

时间:2020-02-23 14:30:24  来源:igfitidea点击:

欢迎我们对如何在Linux上使用LVM扩展根文件系统的教程。
这将介绍ext4和XFS文件系统根分区扩展。
要演示完整的LVM生命周期,我们将执行以下操作:创建LVM物理卷,卷组和逻辑卷。
创建逻辑VolumEstEnd LVM逻辑卷(root和非根文件系统)上的XFS和Ext4文件系统

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

如果我们未使用LVM,请查看下面的教程。

如何在没有LVM的情况下调整ext2/3/4和xfs根分区的大小

第1步:在分发中确认磁盘分区。

在我们可以执行任何扩展之前,让我们确认磁盘布局/分区方案。

$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

第2步:扩展OS根磁盘

如步骤1所示,我的根文件系统位于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块设备,SSH向Linux机器并扩展LVM以使用新添加的磁盘容量。
下面的命令将展开最后一个分区(分区2),如252:2所示,在磁盘(/dev/vda)上显示到磁盘提供的最大大小。

安装云实用程序

对于那些新的Growpart,它是一个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]

第3步:调整根逻辑卷大小以占据所有空间

调整物理量大小。

$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

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

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.

我们可以用MB中的首选空间替换100%的免费命令,例如,添加256 MB用+ 256M替换它。

第4步:更新文件系统上的更改

根文件系统仍将显示旧尺寸。

$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