当前位置: 首页 > news >正文

VMware+Oracle linux LVM/非LVM磁盘扩容(对比实验)

目录

一、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%

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

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

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.三者的本质区别与协作关系

特性维度growpartpartedLVM(逻辑卷管理器)
工作层级分区层分区层逻辑卷层(位于分区和文件系统之间)
核心对象磁盘上的分区磁盘上的分区表由物理卷组成的逻辑卷
主要功能单一功能:将指定分区扩展到其磁盘末尾的相邻空闲空间通用功能:操作分区表(创建、删除、调整大小、设置类型)。高级功能:将多个物理存储池化,并动态创建、调整、快照逻辑存储单元。
设计目标自动化扩容,简化云环境运维手动或脚本化地精细控制磁盘布局。抽象物理存储,提供灵活性、可扩展性和高级功能。
操作风险较低(仅扩展)。但依赖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等)填满逻辑卷的新空间。

http://www.cnnetsun.cn/news/2448888.html

相关文章:

  • 树莓派串口配置避坑指南:ttyAMA0、ttyS0和serial0到底怎么选?
  • 上肢康复外骨骼多模式按需辅助控制【附模型】
  • 别再傻傻分不清!CANoe里Measurement Setup和Simulation Setup添加CAPL节点的核心区别(附场景选择指南)
  • UVM验证实战:手把手教你用TLM_FIFO和analysis_fifo搭建高效数据流
  • 深入理解dyrector.io架构:Agent与Platform如何协同工作
  • 3分钟掌握Borderless Gaming:告别Alt+Tab困扰的无边框游戏窗口神器
  • pyperclip源码剖析:解密自动检测机制的实现原理
  • 观测taotoken api调用延迟与token消耗为c项目成本控制提供依据
  • CircuitPython内存优化与PyCharm集成:嵌入式开发实战指南
  • 《Windows Sysinternals实战指南》1.5 解压 Zip 压缩包与推荐目录结构:给 Sysinternals 找个长期“住所”
  • 从FTP迁到企业云盘的同步踩坑实录
  • 别再傻傻分不清!一文搞懂自动驾驶里的MCU、MPU和SoC到底怎么选
  • 浏览器中的电子书工坊:零门槛制作专业EPUB电子书
  • 告别相位截断噪声!用Vivado DDS Compiler的‘Rasterize’模式实现高纯度信号源
  • markdown格式数据自定义截取里面某个内容并且放到页面上通过自定义组件展示
  • 免费 + 精准 + 智能 —— 语音转文字 + 智能总结,让效率翻倍
  • 3分钟搞定Office部署!LKY Office Tools让你的办公软件安装从未如此简单
  • 基于Google App Engine构建物联网能耗监测系统:从传感器到可视化全栈实践
  • 安达发|aps生产排程软件助力中央厨房破解多品类排产难题
  • 免费开源AMD Ryzen处理器调试工具:从新手到专家的完整使用教程
  • 如何深度集成LCU API:Seraphine英雄联盟战绩查询工具技术架构完全解析
  • 18万+条评价!250款啤酒到底有啥不同?
  • 云计算Linux——数据库MySQL MGR高可用(十九)
  • 【实用应用】轻量级Web 数据导出工具,SQL 结果集流式导出 CSV(java作后端)
  • Page Assist:如何在浏览器侧边栏中运行本地AI助手,彻底改变你的网页浏览体验?
  • ARM架构STTNP指令优化内存访问详解
  • NotebookLM文献管理配置失败?3分钟诊断清单(含Chrome插件冲突、PDF元数据丢失、CSL样式崩溃应急方案)
  • 咸鱼大量流出430元几乎全新联想迷你图形工作站小主机,支持8-9代标压处理器,最高双NVME+2.5寸SATA三盘位,还可选配独立显卡!
  • 企业邮箱迁移技术方案:从旧邮箱平滑迁移至阿里 / 网易 / 谷歌
  • 如何快速处理中文文献:面向学术研究者的Zotero茉莉花插件完整指南