目录

一、VMware设置

二、开始扩容

2.1. 查看空间,对/dev/mapper/ol-root 根进行扩容

2.2.使用LVM方式进行扩展分区(方式一)

2.2.1.添加磁盘分区

2.2.2.刷新操作系统磁盘分区表

2.2.3.添加完磁盘分区之后,我们才开始进行LVM管理,三个主要步骤+一个重要步骤:(pv -> vg -> lv -> 调整文件系统)

步骤一:pvcreate /dev/sda3

步骤二:将刚创建好的物理卷添加到/dev/mapper/ol-root所在的卷组

步骤三:扩容逻辑卷/dev/mapper/ol-root 

步骤四:调整文件系统

2.2.使用parted工具(方式二)

步骤一:确保已安装parted工具(通常默认已安装)

步骤二:查看分区信息,确认无误

步骤三:执行扩容,将三号分区扩展到磁盘的100%

步骤四:刷新操作系统分区表(需执行!)

步骤五:扩展文件系统(根据您的文件系统类型选择)

2.3.growpart 工具扩展分区(方式三)

步骤一:安装工具

步骤二:扩展分区 /dev/sda3

步骤三:检查/dev/sda3 的文件系统类型

1)XFS 文件系统

2)查看空间扩展完成

三、LVM、Parted、Growpart三者间的区别?

3.1.三者的本质区别与协作关系

3.2.它们如何协同工作?

3.3.流程解读


一、VMware设置

关闭虚拟机,将磁盘从45G扩展至48GB(前提:虚拟机不存在快照),然后开机,你也可以在扩展完磁盘之后,再打个快照。 

扩展成功截图!但是并没有完全进行扩容,还需要进一步操作。

二、开始扩容

前置补充:为什么扩容前一般需进行两步操作,即分区+操作文件系统

为什么需要两个步骤?

        安全性:分区操作和文件系统操作分离,减少数据损坏风险

        灵活性:可以只调整分区而不调整文件系统(比如创建新分区)

        专业性:不同文件系统有不同结构和扩展方法,需要专门的工具

类比说明

想象一个房子和里面的家具:

        分区 = 房子的墙壁范围(物理空间)

        文件系统 = 房间内的家具布局(如何利用空间)

分区只是调整了房子的墙壁,但不会重新摆放家具来利用新空间。

2.1. 查看空间,对/dev/mapper/ol-root 根进行扩容

[root@rac01 ~]# df -Th
文件系统            类型      容量  已用  可用 已用% 挂载点
devtmpfs            devtmpfs  1.8G     0  1.8G    0% /dev
tmpfs               tmpfs     1.8G     0  1.8G    0% /dev/shm
tmpfs               tmpfs     1.8G  8.8M  1.8G    1% /run
tmpfs               tmpfs     1.8G     0  1.8G    0% /sys/fs/cgroup
/dev/mapper/ol-root xfs        41G   29G   12G   71% /
/dev/sda1           xfs      1014M  179M  836M   18% /boot
tmpfs               tmpfs     368M     0  368M    0% /run/user/0

可以看到,我们扩展的磁盘大小已经被识别到,但是仅仅只是在逻辑层面增加了这些空间,并没有被操作系统纳入使用。

2.2.使用LVM方式进行扩展分区(方式一)

2.2.1.添加磁盘分区

[root@rac01 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1  4.3G  0 rom
sda           8:0    0   48G  0 disk
├─sda2        8:2    0   44G  0 part
│ ├─ol-swap 252:1    0  3.9G  0 lvm  [SWAP]
│ └─ol-root 252:0    0 40.1G  0 lvm  /
└─sda1        8:1    0    1G  0 part /boot
[root@rac01 ~]# df -Th
文件系统            类型      容量  已用  可用 已用% 挂载点
devtmpfs            devtmpfs  1.8G     0  1.8G    0% /dev
tmpfs               tmpfs     1.8G     0  1.8G    0% /dev/shm
tmpfs               tmpfs     1.8G  8.8M  1.8G    1% /run
tmpfs               tmpfs     1.8G     0  1.8G    0% /sys/fs/cgroup
/dev/mapper/ol-root xfs        41G   29G   12G   71% /
/dev/sda1           xfs      1014M  179M  836M   18% /boot
tmpfs               tmpfs     368M     0  368M    0% /run/user/0
[root@rac01 ~]# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p):
Using default response p
分区号 (3,4,默认 3):
起始 扇区 (94371840-100663295,默认为 94371840):
将使用默认值 94371840
Last 扇区, +扇区 or +size{K,M,G} (94371840-100663295,默认为 100663295):+1G
分区 3 已设置为 Linux 类型,大小设为 1 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
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)
正在同步磁盘。
[root@rac01 ~]# 

2.2.2.刷新操作系统磁盘分区表

记得执行partprobe /dev/sda刷新分区表!!!!!!!

[root@rac01 ~]# partprobe /dev/sda
[root@rac01 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1  4.3G  0 rom
sda           8:0    0   48G  0 disk
├─sda2        8:2    0   44G  0 part
│ ├─ol-swap 252:1    0  3.9G  0 lvm  [SWAP]
│ └─ol-root 252:0    0 40.1G  0 lvm  /
├─sda3        8:3    0    1G  0 part
└─sda1        8:1    0    1G  0 part /boot
[root@rac01 ~]#

2.2.3.添加完磁盘分区之后,我们才开始进行LVM管理,三个主要步骤+一个重要步骤:(pv -> vg -> lv -> 调整文件系统)

进行pv->vg->lv的操作就是将资源进行池化,以便后边可以进行动态调整。

步骤一:pvcreate /dev/sda3
[root@rac01 ~]# partprobe /dev/sda
[root@rac01 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1  4.3G  0 rom
sda           8:0    0   48G  0 disk
├─sda2        8:2    0   44G  0 part
│ ├─ol-swap 252:1    0  3.9G  0 lvm  [SWAP]
│ └─ol-root 252:0    0 40.1G  0 lvm  /
├─sda3        8:3    0    1G  0 part
└─sda1        8:1    0    1G  0 part /boot
[root@rac01 ~]# pvscan
  PV /dev/sda2   VG ol              lvm2 [<44.00 GiB / 4.00 MiB free]
  Total: 1 [<44.00 GiB] / in use: 1 [<44.00 GiB] / in no VG: 0 [0   ]
[root@rac01 ~]# pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created.
[root@rac01 ~]# pvscan
  PV /dev/sda2   VG ol              lvm2 [<44.00 GiB / 4.00 MiB free]
  PV /dev/sda3                      lvm2 [1.00 GiB]
  Total: 2 [<45.00 GiB] / in use: 1 [<44.00 GiB] / in no VG: 1 [1.00 GiB]
[root@rac01 ~]#

从上边的执行过程就可以看出我们当前已经创建出了一个新的物理卷,如下图:

步骤二:将刚创建好的物理卷添加到/dev/mapper/ol-root所在的卷组

vgextend /ol/dev/sda3

[root@rac01 ~]# pvscan
  PV /dev/sda2   VG ol              lvm2 [<44.00 GiB / 4.00 MiB free]
  Total: 1 [<44.00 GiB] / in use: 1 [<44.00 GiB] / in no VG: 0 [0   ]
[root@rac01 ~]# pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created.
[root@rac01 ~]# pvscan
  PV /dev/sda2   VG ol              lvm2 [<44.00 GiB / 4.00 MiB free]
  PV /dev/sda3                      lvm2 [1.00 GiB]
  Total: 2 [<45.00 GiB] / in use: 1 [<44.00 GiB] / in no VG: 1 [1.00 GiB]
[root@rac01 ~]# vgscan
  Reading volume groups from cache.
  Found volume group "ol" using metadata type lvm2
[root@rac01 ~]# vgextend ol /dev/sda3
  Volume group "ol" successfully extended
[root@rac01 ~]# vgsan
-bash: vgsan: 未找到命令
[root@rac01 ~]# vgscan
  Reading volume groups from cache.
  Found volume group "ol" using metadata type lvm2
[root@rac01 ~]# pvscan
  PV /dev/sda2   VG ol              lvm2 [<44.00 GiB / 4.00 MiB free]
  PV /dev/sda3   VG ol              lvm2 [1020.00 MiB / 1020.00 MiB free]
  Total: 2 [44.99 GiB] / in use: 2 [44.99 GiB] / in no VG: 0 [0   ]
[root@rac01 ~]#
步骤三:扩容逻辑卷/dev/mapper/ol-root 

# 将卷组中的空闲空间扩展到根分区逻辑卷:                

        lvextend -l +100%FREE /dev/mapper/ol-root

# 若想指定大小分配,则可以使用:         

        lvcreate -L 2GB -n LV_Name VG_NAME

[root@rac01 ~]# vgscan
  Reading volume groups from cache.
  Found volume group "ol" using metadata type lvm2
[root@rac01 ~]# pvscan
  PV /dev/sda2   VG ol              lvm2 [<44.00 GiB / 4.00 MiB free]
  PV /dev/sda3   VG ol              lvm2 [1020.00 MiB / 1020.00 MiB free]
  Total: 2 [44.99 GiB] / in use: 2 [44.99 GiB] / in no VG: 0 [0   ]
[root@rac01 ~]# lvscan
  ACTIVE            '/dev/ol/swap' [<3.88 GiB] inherit
  ACTIVE            '/dev/ol/root' [<40.12 GiB] inherit
[root@rac01 ~]# lvextend -l +100%FREE /dev/mapper/ol-root
  Size of logical volume ol/root changed from <40.12 GiB (10270 extents) to <41.12 GiB (10526 extents).
  Logical volume ol/root successfully resized.
[root@rac01 ~]# pvscan
  PV /dev/sda2   VG ol              lvm2 [<44.00 GiB / 0    free]
  PV /dev/sda3   VG ol              lvm2 [1020.00 MiB / 0    free]
  Total: 2 [44.99 GiB] / in use: 2 [44.99 GiB] / in no VG: 0 [0   ]
[root@rac01 ~]# lvscan
  ACTIVE            '/dev/ol/swap' [<3.88 GiB] inherit
  ACTIVE            '/dev/ol/root' [<41.12 GiB] inherit
[root@rac01 ~]#

步骤四:调整文件系统

# 若磁盘格式是xfs,则执行如下命令:xfs_growfs /dev/ol/root
# 若磁盘格式是ext4,则执行如下命令:resize2fs /dev/ol/root

[root@rac01 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1  4.3G  0 rom
sda           8:0    0   48G  0 disk
├─sda2        8:2    0   44G  0 part
│ ├─ol-swap 252:1    0  3.9G  0 lvm  [SWAP]
│ └─ol-root 252:0    0 41.1G  0 lvm  /
├─sda3        8:3    0    1G  0 part
│ └─ol-root 252:0    0 41.1G  0 lvm  /
└─sda1        8:1    0    1G  0 part /boot
[root@rac01 ~]# df -Th
文件系统            类型      容量  已用  可用 已用% 挂载点
devtmpfs            devtmpfs  1.8G     0  1.8G    0% /dev
tmpfs               tmpfs     1.8G     0  1.8G    0% /dev/shm
tmpfs               tmpfs     1.8G  8.8M  1.8G    1% /run
tmpfs               tmpfs     1.8G     0  1.8G    0% /sys/fs/cgroup
/dev/mapper/ol-root xfs        41G   29G   12G   71% /
/dev/sda1           xfs      1014M  179M  836M   18% /boot
tmpfs               tmpfs     368M     0  368M    0% /run/user/0
[root@rac01 ~]# xfs_growfs /dev/ol/root
meta-data=/dev/mapper/ol-root    isize=256    agcount=4, agsize=2629120 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=10516480, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=5135, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 10516480 to 10778624
[root@rac01 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1  4.3G  0 rom
sda           8:0    0   48G  0 disk
├─sda2        8:2    0   44G  0 part
│ ├─ol-swap 252:1    0  3.9G  0 lvm  [SWAP]
│ └─ol-root 252:0    0 41.1G  0 lvm  /
├─sda3        8:3    0    1G  0 part
│ └─ol-root 252:0    0 41.1G  0 lvm  /
└─sda1        8:1    0    1G  0 part /boot
[root@rac01 ~]# df -Th
文件系统            类型      容量  已用  可用 已用% 挂载点
devtmpfs            devtmpfs  1.8G     0  1.8G    0% /dev
tmpfs               tmpfs     1.8G     0  1.8G    0% /dev/shm
tmpfs               tmpfs     1.8G  8.8M  1.8G    1% /run
tmpfs               tmpfs     1.8G     0  1.8G    0% /sys/fs/cgroup
/dev/mapper/ol-root xfs        42G   29G   13G   70% /
/dev/sda1           xfs      1014M  179M  836M   18% /boot
tmpfs               tmpfs     368M     0  368M    0% /run/user/0
[root@rac01 ~]#

结果:

2.2.使用parted工具(方式二)

parted 工具是 Linux 自带的磁盘分区管理工具;

它只能向后“吃掉”紧邻它后面的空间,但这导致 parted 无法跳过 sdx 前的块设备而直接吞掉末尾的空间。大白话就是只能扩展尾巴上的空间(思考火车车厢->连续的空间像一节节的车厢,为不破坏原先的空间形态,只能在末尾进行追加

步骤一:确保已安装parted工具(通常默认已安装)

确认工具是否存在命令:which parted

安装命令:yum install -y parted

步骤二:查看分区信息,确认无误

步骤三:执行扩容,将三号分区扩展到磁盘的100%

可以执行help命令查看相关的命令,如下:

执行命令:parted /dev/sda resizepart 3 100%

pv重新识别大小:pvresize /dev/sda3

注意:部分版本能使用交互性会话,可以参照提示依次进行即可。

步骤四:刷新操作系统分区表(需执行!)

partprobe /dev/sda

步骤五:扩展文件系统(根据您的文件系统类型选择)

按照下图中的思路,让我们理一下我们目前一共完成了哪些步骤,以及我们接下来该怎么操作:

前面/dev/sda3中我们只从扩展的磁盘空间中分出了1个G来做完方式一的扩容,并且已经把该分区添加至卷组ol中,而本例,我们则是使用parted工具对原先/dev/sda3这个分区进行了剩余磁盘空间的全部扩展,相当于我们省去了前面pv + vg 的操作,即逻辑卷管理的三个主要步骤现在只剩下lv这步操作需要进行,这一点我们可以通过下图进行确认:

那接下来我们只需对卷/dev/mapper/ol-root进行扩展即可

扩展完成之后,我们只需执行以下扩容文件系统命令即可:

# 若磁盘格式是xfs,则执行如下命令:xfs_growfs /dev/sda3
# 若磁盘格式是ext4,则执行如下命令:resize2fs /dev/sda3

结果:

2.3.growpart 工具扩展分区(方式三)

限于当前操作系统版本过低,与系统自带sfdisk工具冲突,故只找到一个示例进行参考:

步骤一:安装工具

[root@db1 ~]# yum install -y cloud-utils-growpart

例:

[root@db1 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        895M     0  895M   0% /dev
tmpfs           910M     0  910M   0% /dev/shm
tmpfs           910M   11M  900M   2% /run
tmpfs           910M     0  910M   0% /sys/fs/cgroup
/dev/sda3        18G   17G  768M  96% /

步骤二:扩展分区 /dev/sda3

核心用法公式:growpart [选项] <磁盘设备> <分区编号>

扩展分区 /dev/ol/root,注意,如果遇见需直接扩容/dev/sda 1 ---> 注意,3是数字3 ,而不是sda3

[root@db1 ~]# growpart /dev/sda 3
CHANGED: partition=3 start=4810752 old: size=37132288 end=41943040 new: size=79075295 end=83886047

步骤三:检查/dev/sda3 的文件系统类型

[root@db1 ~]# blkid /dev/sda3 
/dev/sda3: UUID="254c752f-5bdf-4df2-9b67-d38e29b773e7" TYPE="xfs"

XFS 文件系统:xfs_growfs / (直接对挂载点/操作(需已挂载)自动将根分区扩展到新增的磁盘空间‌)
ext3/ext4 文件系统:resize2fs /dev/sda3 (在线扩展无需卸载分区‌)

1)XFS 文件系统

[root@db1 ~]# xfs_growfs /
meta-data=/dev/sda3              isize=512    agcount=4, agsize=1160384 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=4641536, 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=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 4641536 to 9884416

2)查看空间扩展完成

[root@db1 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        895M     0  895M   0% /dev
tmpfs           910M     0  910M   0% /dev/shm
tmpfs           910M   11M  900M   2% /run
tmpfs           910M     0  910M   0% /sys/fs/cgroup
/dev/sda3        38G   17G   21G  45% /

注意:cloud-utils-growpart 是一个用于在Linux系统中调整分区大小的实用工具,特别适用于云环境。

三、LVM、Parted、Growpart三者间的区别?

简单来说,LVM是管理空间的“资源池经理”,parted是划分仓库的“建筑师”,而growpart是扩建仓库的“自动化小工”。

3.1.三者的本质区别与协作关系

特性维度 growpart parted LVM(逻辑卷管理器)
工作层级 分区层 分区层 逻辑卷层(位于分区和文件系统之间)
核心对象 磁盘上的分区 磁盘上的分区表 由物理卷组成的逻辑卷
主要功能 单一功能:将指定分区扩展到其磁盘末尾的相邻空闲空间 通用功能:操作分区表(创建、删除、调整大小、设置类型)。 高级功能:将多个物理存储池化,并动态创建、调整、快照逻辑存储单元。
设计目标 自动化扩容,简化云环境运维 手动或脚本化地精细控制磁盘布局。 抽象物理存储,提供灵活性、可扩展性和高级功能。
操作风险 较低(仅扩展)。但依赖sfdisk,版本不兼容会失败 高(直接修改分区表,一步出错可能丢失数据)。 中(操作在逻辑层,不直接动分区表,但错误命令认可导致数据丢失)。
依赖关系 依赖parted或sfdisk来实际修改分区表 独立,直接操作磁盘。 依赖底层分区(物理卷PV建立在分区或整盘上)。

3.2.它们如何协同工作?

一个完整的扩容案例

假设您有一台云服务器,根文件系统在LVM上,现在需要扩容。这完美对应了您之前遇到的情况,整个过程清晰地展示三者的分工:

3.3.流程解读

1、分区层(parted/growpart的战场):首先需要扩大底层的物理容器,即磁盘分区(如 /dev/sda3)。您可以根据情况选择自动化的 growpart 或手动的 parted/fdisk

2、LVM层(LVM的战场):分区扩大后,LVM的组件开始接力:

        pvresize:通知LVM,物理卷(pv)的大小变了

        lvextend:将卷组(vg)中新增的空间,分配给逻辑卷(LV)。

3、文件系统层:最后,使用文件系统工具(xfs_growfs等)填满逻辑卷的新空间。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐