一、引言
在Ubuntu虚拟机中编译项目时,你是否也遇到过这样的窘境——编译进度条走到一半,突然提示“磁盘空间不足”,几个小时的编译时间瞬间白费?重新创建大容量虚拟机虽然直接,但迁移环境、重装配置的麻烦不言而喻。今天,我将分享一种更优雅的方式:不重建虚拟机,直接在线扩展磁盘空间。
环境:VMware+Ubuntu20.04(需要保证环境一致,版本不同可能操作也有所不同)
二、实操流程
可以看到当前我的Ubuntu环境/dev/sda5下面挂载了294G,我们的目标是将这个分区扩展10G,到304G,一起跟着博主来手把手完成这个目标吧!

1.VMware虚拟磁盘扩展
①先保证Ubuntu关闭的情况下,在左边栏右键点击我们需要扩展磁盘空间的虚拟机,在出现的对话框选择“设置”。

②在弹出的“虚拟机设置”界面打开找到“磁盘(SCSI)”,右边栏会出现“扩展磁盘容量的选项”,我们点击扩展。

③填入我们需要扩展的目标大小之后点击“扩展(E)”即可完成虚拟磁盘扩建的扩展。

到这里我们的第一步就完成啦!
2.Ubuntu内部操作
注意我们上一步的操作只是预留了一片虚拟空间给到Ubuntu,这片空间还并没有挂载到我们的文件系统上面,因此不能够直接使用。可以看到我们的空间还是和原来一样的294G,并没有增加。

下面就主要来详细介绍一下挂载的流程,这里博主主要采用的是fdisk命令行的方式完成。
fdisk 是 Linux 下最经典的磁盘分区工具,用于创建、删除、调整和管理磁盘分区表
1.获取root权限并重新扫描磁盘
sudo su
echo 1 > /sys/class/block/sda/device/rescan

2.进入fdisk的操作界面
fdisk /dev/sda

这里主要介绍一下常用操作指令:
- p :打印当前分区表
- n :创建分区
- 创建分区类型
p:主分区(Primary,最多4个)e:扩展分区(Extended,用于容纳逻辑分区)l:逻辑分区(Logical,编号从5开始,在扩展分区内)
- 设置分区大小
- 直接按回车:使用默认值
+10G:增加10GB空间+100M:增加100MB空间
- 创建分区类型
- d :删除分区(选完之后后面需要跟删除哪个分区号,例如1,2,5)
- t :更改分区ID类型
- w :写入分区表并退出(保存更改)
- q :退出而不保存更改
3.fdisk指令操作
接下来的操作需要按照顺序执行
①可以先查看一下我们当前的分区表

/dev/sda5即使我们需要扩展的磁盘空间
②删除原有分区
指令执行顺序为 d–>5–>d–>2

我想大家可能会有一个疑问,我们需要扩展的是5号分区,为什么2号分区也需要连带着删除呢?我们可以理解为2号分区是承载5号分区的容器。他们的结构如下:
磁盘 /dev/sda (300G)
├── /dev/sda1 (主分区1, 512M)
└── /dev/sda2 (扩展分区2, 300G)
└── /dev/sda5 (逻辑分区5, 300G)
sda5是我们真正使用到的空间,而它依附于sda2这片空间,删除sda2的意义相当于是给sda5换一个更大的杯子,这样他才能够承载更多的水。我们如果给sda5扩展到了310G,超过了sda2的空间,相当于水的体积比杯子的容积还要大,这种情况肯定是不符合逻辑的呀。
③重建扩展分区
执行顺序为:n–>e–>2–>回车(使用默认起始扇区)–>回车(使用默认结束扇区)。

再次 p 查看分区,可以看到当前的他的Size已经增大了大约10G左右。

按照同样的方式,再创建我们目标的5号分区。
执行顺序为:n(自动编号为5号分区)–>回车(使用默认起始扇区)–>回车(使用默认结束扇区)。
注意!他会问你一句话“Do you want to remove the signature?”我们一定要选择 N 进行保留,否则可能会出现原来数据丢失的情况。

④写入更改并退出
执行指令w

看到Failed了不要慌!因为操作的系统分区正在被使用,内核拒绝重新加载分区表,我们只需要重启一下就可以了!
4.重启Ubuntu系统
reboot
5.验证扩展结果
sudo resize2fs /dev/sda5 #扩展文件系统,将扩展的分区真正挂载到文件系统下面
df -h #验证挂载情况

可以看到我们的目标完成了!从原先的294G,扩展到了304G。

