如何在不破坏LVM2分区的前提下扩容RHEL8的XFS格式Boot分区(/dev/sda2)
如何在不破坏LVM2分区的前提下扩容RHEL8的XFS格式Boot分区(/dev/sda2)
嘿Lucas,我来帮你搞定这个扩容Boot分区的问题!先给你吃个定心丸——完全可以在不破坏LVM2分区的前提下完成操作,只是因为Boot分区(/dev/sda2)右边紧挨着LVM物理卷(/dev/sda3),得先给LVM分区“挪个地方”腾出空间,咱们一步步来:
一、操作前的核心准备:全量备份!
这步绝对不能省,磁盘分区操作有风险,哪怕是最熟练的管理员也会先备份。你可以:
- 用外接存储设备,通过
dd if=/dev/sda of=/mnt/external/backup.img把整个磁盘镜像备份(如果空间足够的话) - 至少备份Boot分区内容:
cp -a /boot/* /mnt/external/boot-backup/,同时备份LVM里的关键数据
二、进入RHEL8救援模式(必须离线操作)
因为要修改正在使用的磁盘分区和LVM物理卷,不能在系统正常运行时操作,得用救援模式启动:
- 插入RHEL8安装介质(U盘/光盘),从它启动
- 选择“Troubleshooting”(故障排除)选项,再选“Rescue a RHEL system”(救援RHEL系统)
- 进入救援环境后,选择“3) Skip to shell”(跳过挂载系统,直接进入命令行),这样磁盘处于未挂载状态,才能安全修改
三、先处理LVM物理卷,腾出Boot分区的扩容空间
1. 确认磁盘和LVM状态
- 查看分区表,确认分区布局:
你会看到/dev/sda2是Boot分区,/dev/sda3是LVM物理卷,记录下sda3的起始扇区,以及要扩容的1GiB对应的扇区数(1GiB=2097152个512字节扇区)fdisk -l /dev/sda - 查看LVM物理卷的空闲空间:
重点看pvs /dev/sda3Free PE / Size这一列,确保有至少1GiB的空闲空间。如果没有空闲空间,你需要先给某个LVM逻辑卷缩容(注意:XFS格式的逻辑卷不能缩容,如果是ext4可以先缩文件系统再缩逻辑卷;如果你的LVM里全是XFS卷,那可能需要临时挂载外接存储转移部分数据腾出空间)
2. 把LVM物理卷左侧的1GiB数据移到右侧
用LVM原生的pvmove命令,把/dev/sda3开头1GiB区域里的物理扩展块(PE)全部移到物理卷的右侧空闲区:
# 假设PE大小是4MiB,1GiB对应256个PE,所以移动0-255号PE pvmove --alloc anywhere /dev/sda3:0-255
等待命令执行完成,这时候/dev/sda3的开头1GiB区域就没有数据了,相当于给Boot分区“让”出了空间
3. 调整LVM物理卷的分区边界
现在可以修改/dev/sda3的分区起始位置,把它往右挪1GiB:
运行
fdisk /dev/sda进入分区编辑模式输入
d删除原来的/dev/sda3分区输入
n创建新的主分区:- 分区类型选
p(主分区) - 分区号选
3(保持和原来一致) - 起始扇区输入「原来的sda3起始扇区 + 2097152」(也就是1GiB之后的位置)
- 结束扇区直接按回车,保持和原来的分区结束位置一致
- 分区类型选
输入
t更改分区类型为LVM:- 输入分区号
3 - 输入
8e(LVM分区的类型代码)
- 输入分区号
输入
w保存分区表,退出fdisk让LVM识别新的物理卷边界:
pvresize /dev/sda3
四、扩容Boot分区(/dev/sda2)
现在LVM分区已经挪好位置,Boot分区右侧有了1GiB的空闲空间,开始扩容:
- 运行
fdisk /dev/sda进入分区编辑模式 - 输入
d删除原来的/dev/sda2分区 - 输入
n创建新的主分区:- 分区类型选
p(主分区) - 分区号选
2(保持和原来一致) - 起始扇区输入原来的sda2起始扇区(必须和原来完全一样,不然Boot会失效)
- 结束扇区输入「原来的sda2结束扇区 + 2097152」(增加1GiB空间)
- 分区类型选
- 输入
t更改分区类型为Linux:- 输入分区号
2 - 输入
83(Linux分区的类型代码)
- 输入分区号
- 输入
w保存分区表,退出fdisk
2. 扩容XFS格式的Boot分区
RHEL8的Boot分区默认是XFS格式,XFS只能扩容不能缩容,用以下命令完成文件系统扩容:
xfs_growfs /dev/sda2
五、验证操作结果
- 输入
reboot重启系统,移除安装介质,从硬盘正常启动 - 进入系统后,检查Boot分区大小:
你会看到/dev/sda2的容量已经增加了1GiBdf -h /boot - 检查LVM状态,确认所有逻辑卷正常:
确保所有LVM卷都能正常挂载,数据没有丢失lvdisplay
备注:内容来源于stack exchange,提问作者Lucas Rey




