1. 从Fedora 38升级到39的磁盘扩容实战
最近在将主力桌面系统从Fedora 38升级到Fedora 39 Beta时,遇到了根分区空间不足的问题。第一次尝试升级时直接失败了,系统提示根卷可用空间不足。经过清理journald日志等操作腾出一些空间后,总算完成了系统升级。但根分区空间紧张的问题依然存在,这促使我决定对磁盘进行扩容操作。
重要提示:本文记录的是我在物理机上使用传统MBR分区和LVM管理的情况。如果你使用的是UEFI+GPT分区方案,或者没有使用LVM,部分步骤可能需要调整。
2. 初始状态分析与方案选择
2.1 当前磁盘布局检查
首先使用lsblk命令查看磁盘分区情况:
bash复制[root@watamem ~]# lsblk /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 232.9G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 111.3G 0 part
├─fedora_watamem-root 253:0 0 57G 0 lvm /
└─fedora_watamem-home 253:1 0 53.5G 0 lvm /home
从输出可以看出:
- 磁盘总容量232.9GB
- sda1是500MB的/boot分区
- sda2是111.3GB的LVM物理卷(PV)
- LVM卷组(VG)名为fedora_watamem
- 包含两个逻辑卷(LV):root(57GB)和home(53.5GB)
2.2 LVM空间使用情况
进一步检查LVM的详细信息:
bash复制[root@watamem ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 fedora_watamem lvm2 a-- 111.30g 836.00m
[root@watamem ~]# vgs
VG #PV #LV #SN Attr VSize VFree
fedora_watamem 1 2 0 wz--n- 111.30g 836.00m
[root@watamem ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home fedora_watamem -wi-ao---- 53.48g
root fedora_watamem -wi-ao---- 57.00g
关键信息:
- 物理卷/dev/sda2总大小111.3GB
- 卷组剩余空间仅836MB
- 两个逻辑卷已占用大部分空间
2.3 可用扩容方案评估
从lsblk输出可见,磁盘总容量232.9GB,而sda2分区仅111.3GB,意味着有约121.6GB未分配空间。此时有两种扩容方案:
-
创建新分区方案:
- 创建/dev/sda3新分区
- 将其初始化为物理卷(pvcreate)
- 扩展到现有卷组(vgextend)
- 优点:不影响现有分区
- 缺点:需要管理多个PV,稍显复杂
-
扩展现有分区方案:
- 直接扩展/dev/sda2分区
- 自动扩展PV大小
- 优点:保持单PV管理简单
- 缺点:需要调整分区表
考虑到我的磁盘使用模式和管理便利性,我选择了第二种方案——扩展现有分区。
3. 使用growpart扩展分区
3.1 安装growpart工具
在Fedora上,growpart工具由cloud-utils-growpart包提供:
bash复制[root@watamem ~]# dnf install cloud-utils-growpart -y
...
Installed:
cloud-utils-growpart-0.33-3.fc39.noarch
Complete!
3.2 growpart基本用法
growpart的基本语法是:
bash复制growpart [选项] <设备> <分区号>
常用选项:
--dry-run:模拟运行而不实际修改--fudge F:设置边界调整值(默认2048 sectors)--update=auto|force|off:控制分区表更新行为
示例:
bash复制growpart /dev/sda 1 # 扩展/dev/sda1分区
growpart --free-percent=10 /dev/sda 1 # 扩展分区但保留10%空闲空间
3.3 实际执行分区扩展
在我的场景中,需要扩展的是/dev/sda2分区:
bash复制[root@watamem ~]# growpart /dev/sda 2
CHANGED: partition=2 start=1026048 old: size=233414656 end=234440703 new: size=487371087 end=488397134
执行后再次检查分区大小:
bash复制[root@watamem ~]# lsblk /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 232.9G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 232.4G 0 part
├─fedora_watamem-root 253:0 0 57G 0 lvm /
└─fedora_watamem-home 253:1 0 53.5G 0 lvm /home
可以看到sda2已从111.3GB扩展到232.4GB,几乎用尽了所有可用空间。
注意事项:growpart只能扩展磁盘上的最后一个分区。如果中间分区需要扩展,必须先用其他工具调整分区布局。
4. LVM逻辑卷扩展
4.1 物理卷自动扩展
扩展分区后,检查物理卷状态:
bash复制[root@watamem ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 fedora_watamem lvm2 a-- 232.39g 121.91g
惊喜发现PV已自动识别新空间,无需手动执行pvresize。这是因为现代LVM工具能自动检测底层设备变化。
4.2 扩展根逻辑卷
现在卷组有121.91GB空闲空间,我决定给根分区增加33GB:
bash复制[root@watamem ~]# lvresize -rL +33G /dev/fedora_watamem/root
Size of logical volume fedora_watamem/root changed from 57.00 GiB (14592 extents) to 90.00 GiB (23040 extents).
File system ext4 found on fedora_watamem/root mounted at /.
Extending file system ext4 to 90.00 GiB (96636764160 bytes) on fedora_watamem/root...
resize2fs /dev/fedora_watamem/root
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/fedora_watamem/root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 6
The filesystem on /dev/fedora_watamem/root is now 23592960 (4k) blocks long.
resize2fs done
Extended file system ext4 on fedora_watamem/root.
Logical volume fedora_watamem/root successfully resized.
关键点:
-r选项自动调整文件系统大小-L +33G指定增加33GB而非设置绝对值- 对于ext4文件系统,resize2fs在线完成调整
4.3 验证最终结果
确认各组件状态:
bash复制[root@watamem ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home fedora_watamem -wi-ao---- 53.48g
root fedora_watamem -wi-ao---- 90.00g
[root@watamem ~]# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/fedora_watamem-root 89G 50G 36G 59% /
[root@watamem ~]# vgs
VG #PV #LV #SN Attr VSize VFree
fedora_watamem 1 2 0 wz--n- 232.39g 88.91g
现在根分区已成功扩展到90GB,卷组仍有88.91GB剩余空间可供后续使用。
5. 常见问题与故障排除
5.1 growpart执行失败的可能原因
-
不是最后一个分区:
bash复制
growpart: partition 2 is not the last partition解决方案:只能扩展最后一个分区,中间分区需先调整后续分区
-
分区表已满:
MBR分区表最多支持4个主分区或3主分区+1扩展分区
解决方案:删除不必要分区或转换为GPT分区表 -
文件系统已挂载:
虽然growpart可以工作在已挂载分区上,但某些文件系统可能限制扩展
解决方案:卸载分区或使用LiveCD环境操作
5.2 LVM扩展问题排查
-
PV未自动扩展:
如果pvdisplay显示大小未变,需手动执行:bash复制
pvresize /dev/sda2 -
文件系统扩展失败:
当lvresize的-r选项失效时,需手动执行:bash复制
resize2fs /dev/fedora_watamem/root -
空间分配问题:
确保VG有足够空闲空间:bash复制
vgdisplay fedora_watamem | grep Free
5.3 不同文件系统的处理
对于非ext4文件系统,调整方式有所不同:
-
XFS:
bash复制
xfs_growfs /注意:XFS只能扩展不能缩小
-
Btrfs:
bash复制
btrfs filesystem resize +33G / -
ext3/ext2:
需要先卸载或进入单用户模式
6. 操作安全建议
-
备份重要数据:
bash复制
tar -cvpzf /backup/root-backup.tar.gz --exclude=/backup --exclude=/proc --exclude=/sys --exclude=/dev / -
使用--dry-run测试:
bash复制
growpart --dry-run /dev/sda 2 -
逐步扩展:
不要一次性使用所有可用空间,保留部分应急空间 -
监控工具准备:
bash复制watch -n 1 'df -h; lsblk; pvs; vgs; lvs' -
了解回退方案:
记录原始分区表:bash复制
sfdisk -d /dev/sda > sda-partition-backup.txt
这次扩容操作从发现问题到最终解决,整个过程相对顺利。LVM的灵活性再次得到体现,配合growpart工具,实现了无需重启的在线扩容。剩余的空间我计划保留一段时间,观察系统使用情况后再决定如何分配。