VMware+Oracle linux LVM/非LVM磁盘扩容

目录

一、VMware设置

二、开始扩容

为什么需要两个步骤?

类比说明

[2.1. 查看空间,对/dev/mapper/ol-root 根进行扩容](#2.1. 查看空间,对/dev/mapper/ol-root 根进行扩容)

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

2.2.1.添加磁盘分区

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

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

[步骤一:pvcreate /dev/sda3](#步骤一:pvcreate /dev/sda3)

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

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

步骤四:调整文件系统

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

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

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

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

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

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

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

步骤一:安装工具

[步骤二:扩展分区 /dev/sda3](#步骤二:扩展分区 /dev/sda3)

[步骤三:检查/dev/sda3 的文件系统类型](#步骤三:检查/dev/sda3 的文件系统类型)

[1)XFS 文件系统](#1)XFS 文件系统)

2)查看空间扩展完成

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

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

它们如何协同工作:一个完整的扩容案例


一、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.添加磁盘分区

bash 复制代码
[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刷新分区表!!!!!!!

bash 复制代码
[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 -> 调整文件系统)

步骤一:pvcreate /dev/sda3
bash 复制代码
[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

bash 复制代码
[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

bash 复制代码
[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

bash 复制代码
[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工具(通常默认已安装)

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

安装命令:yum install -y parted

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

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

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

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

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

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@rac01 \~# yum install -y cloud-utils-growpart

例:

root@tdsql_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@tdsql_db1 \~# growpart /dev/sda 3

CHANGED: partition=3 start=4810752 old: size=37132288 end=41943040 new: size=79075295 end=83886047

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

root@tdsql_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@tdsql_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@tdsql_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是扩建仓库的"自动化小工"

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

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

它们如何协同工作:一个完整的扩容案例

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

流程解读

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

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

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

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

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

相关推荐
zh路西法9 分钟前
【SSH 免密登录全流程】Windows Linux 通用方案
linux·windows·ssh
小黑蛋学java10 分钟前
Nginx 接口耗时 Prometheus + Grafana 监控实施方案
运维·nginx·负载均衡·grafana·prometheus
ScilogyHunter1 小时前
GCC完全指南
linux·gcc
CodeStats1 小时前
从 CPU 指令到 JVM 进程:彻底讲透 Java 执行 main 方法时,类加载、主线程、栈帧入栈的完整底层逻辑
java·linux·开发语言
asyxchenchong8882 小时前
最新Hermes Agent 技能封装与科研自动化:以 Meta-Analysis 为例-实现从文献检索到绘图的一站式工作流
运维·人工智能·自动化
tianyuanwo2 小时前
项目内自我管理:一名OS领域DevOps的破局之路
运维·devops
三十..2 小时前
Redis 核心原理与高可用架构实践
运维·数据库·redis
努力努力再努力wz3 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
Jurio.3 小时前
开源 Codex Sticky:在终端 Codex CLI 长对话中始终固定底部输入框
linux·rust·github·开源软件·codex·codex cli
无足鸟ICT4 小时前
【RHCA+】撤销和恢复撤销快捷键
linux