Ubuntu Server 24.04 LVM 分区扩容

一、背景

公司买了一台机架式服务器(512G + 8T),出厂没有预装系统,后面装了个 Ubuntu Server 24.04,装的过程中没有手动设置分区,装完之后看各分区的容量发现跟实际的硬盘对不上,没有哪个分区有 512G 或者 8T,应该是大容量硬盘没有挂载,所以需要把硬盘挂载到目标分区,实现扩容。

二、分区扩容

1. 查看分区情况

可以看到一共有 8 个分区,最大分区容量是根目录的 98G,但是 512G 的 /dev/sdb 没有使用到,8T 的 /dev/sda 划分了 sda1,sda2 和sda3 三个分区,但只有 sda1 和 sda2 分别挂载到了 /boot 分区和 /boot/efi 分区,剩下 7.3T 的 sda3 没有使用。

因为当时安装系统时,在磁盘分区那里选择的默认方式(Set up this disk as an LVM group),系统使用了 LVM 分区方式,所以 / 对应的是 /dev/mapper/ubuntu--vg-ubuntu-lv 逻辑卷,在分配容量时并不会使用所有硬盘容量,当分区空间不足时就需要利用 LVM 进行扩容。

2. 主目录扩容

系统的分区列表里没有 /home,所以在扩容之前需要先创建 /home。(在此之前还有一步对根目录 LV 进行缩容,实操时由于根目录的占用问题导致缩容一直失败,不同方法尝试了很多次,即使进入单用户模式操作也不行,最终放弃这一步,直接扩容。)

bash 复制代码
# 缩小根目录文件系统
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv 20G

# 缩小LV容量
lvreduce -L 20G /dev/mapper/ubuntu--vg-ubuntu--lv
(1)创建新 LV

分配 /dev/sda3 全部剩余空间给 /home

bash 复制代码
# 查看卷组剩余空间(确认大小)
vgdisplay ubuntu-vg | grep "FREE PE"

# 创建 /home 的 LV(名称 home-lv,大小用全部剩余空间)
lvcreate -l 100%FREE -n home-lv ubuntu-vg
(2)格式化 LV
bash 复制代码
# 格式化 /home 的 LV
mkfs.ext4 /dev/mapper/ubuntu--vg-home--lv
(3)挂载新 LV
bash 复制代码
# 临时挂载新LV
mkdir /mnt/tmp_home
mount /dev/mapper/ubuntu--vg-home--lv /mnt/tmp_home

# 复制现有/home数据到新LV(保留权限)
rsync -av /home/ /mnt/tmp_home/

# 备份原 /home,修改挂载
mv /home /home.bak
mkdir /home
umount /mnt/tmp_home
mount /dev/mapper/ubuntu--vg-home--lv /home

# 验证数据,确认复制完整(应看到原有用户目录)
ls /home
(4)永久挂载
bash 复制代码
# 查看新 LV 的 UUID
blkid /dev/mapper/ubuntu--vg-home--lv

# 写入 fstab,替换 UUID
echo "UUID=your UUID /home ext4 defaults 0 2" >> /etc/fstab

# 验证挂载(无报错则正常)
mount -a

3. 根目录扩容

将 /dev/sdb 加入 LVM,扩展根目录

(1)创建分区
bash 复制代码
# 分区工具
fdisk /dev/sdb

依次输入并回车:

  • g:创建GPT分区表;
  • n:新建分区(默认全部空间,按回车确认起始/结束扇区);
  • t:修改分区类型为LVM(输入8e或1LV);
  • w:保存分区表。
(2)创建 PV 并加入卷组
bash 复制代码
# 将 /dev/sdb1 创建为 LVM 物理卷
pvcreate /dev/sdb1

# 将 PV 加入ubuntu-vg 卷组
vgextend ubuntu-vg /dev/sdb1
(3)扩展根目录
bash 复制代码
# 扩展根目录 LV 到卷组全部剩余空间,包含 /dev/sdb1 的 447G
lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv

# 刷新文件系统,使容量生效
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

4. 验证

bash 复制代码
# 查看 LV 分配
lvs

# 查看挂载和空间
df -h / /home

可以看到扩容之后的根目录有 538G,主目录有 7.2T。扩容完成。上述操作都是在单用户模式下进行的。

三、总结

第一次搞服务器系统,虽然差别不大,但确实没有桌面版操作的方便,好在过程还算顺利,除了第一步缩容失败,但是看来对结果没啥影响,记录一下当做一个学习的过程吧。(主要还是靠豆包了)

参考资料

1\] [安装 Ubuntu Server 24.04 LTS 图文教程-知乎](https://zhuanlan.zhihu.com/p/698434939 "安装 Ubuntu Server 24.04 LTS 图文教程-知乎") \[2\] [解决 Linux /dev/mapper/ubuntu--vg-ubuntu--lv 磁盘空间不足的问题-博客园](https://www.cnblogs.com/gcc2020/p/16601857.html "解决 Linux /dev/mapper/ubuntu--vg-ubuntu--lv 磁盘空间不足的问题-博客园") \[3\] [ubuntu的ubuntu--vg-ubuntu--lv磁盘扩容-博客园](https://www.cnblogs.com/guangdelw/p/17822292.html "ubuntu的ubuntu--vg-ubuntu--lv磁盘扩容-博客园")

相关推荐
charlie1145141911 小时前
嵌入式Linux驱动开发——新 API 字符设备驱动完整教程 - 从设备结构体到应用测试
linux·运维·驱动开发
飞Link2 小时前
2000 亿砸向算力:字节跳动 AI 基建跨越,后端与运维的“万亿 Token”生死战
运维·人工智能
消失的旧时光-19432 小时前
C语言对象模型系列(四)《Linux 内核里的 container_of 到底是什么黑魔法?》—— 一篇讲透 Linux 内核的“对象模型”核心技巧
linux·c语言·算法
SWAGGY..2 小时前
Linux系统编程:(二)基础指令详解
linux·运维·服务器
kdxiaojie2 小时前
U-Boot分析【学习笔记】(3)
linux·笔记·学习
烛衔溟2 小时前
TypeScript 接口继承与混合类型
linux·ubuntu·typescript
张文君3 小时前
上古世纪服务端编译安装AAEmu docker编译安装
运维·docker·容器
蜡笔婧萱3 小时前
Linux--远程登录服务ssh
linux·服务器·ssh
雾岛心情3 小时前
小铭邮件管理工具箱的界面(公司版)
运维·服务器·工具·o365·小铭邮件工具箱(公司版)
一只鹿鹿鹿3 小时前
数据库运维与管理规范(WORD)
运维·数据库