在VirtualBox中使用ubuntu系统,一开始分配的硬盘空间太小,使用一段时间后发现空间不够用了怎么办?

本篇记录自己在使用VirtualBox中的ubuntu系统时,对ubuntu系统的进行磁盘扩容的实际操作记录。

0 起因

之前在VirtualBox中安装了ubuntu虚拟机,分配了29G的磁盘容量,最近发现不够用了,就想着如何给它扩充容量。

VirtualBox中,ubuntu虚拟机系统是保存在一个vdi文件中,而我之前又是单独给这个vdi文件在Windows系统中分配了一个30G的磁盘,所以,以我目前的情况,想要为ubuntu扩容,就先要为Window系统中的这个I盘扩容

1 为Windows系统的磁盘扩容(失败)

Window中为磁盘扩容,可以使用Window系统自带的磁盘管理器,从相邻的磁盘中借一些空间。

比如从我目前H盘中借来40G,先将H盘压缩出来40G:

然后就出现了40G的未分配空间

接着再将这40G空间尝试扩展到ubuntu所在的I盘

最后一步出现警告提示:你选定的操作会将选定的基本磁盘转换成动态磁盘,如果将磁盘转换成动态,你将无法从这些盘上的任何卷(除了当前启动卷)启动已安装的操作系统,你确定要继续吗?

没太看懂是什么意思,但貌似确定后,可能会造成系统无法启动。

保险起见,点击否,换另一种方式继续扩容。

2 vdi文件复制转移测试

由于ubuntu虚拟机系统只是一个vdi文件,所以理论上该文件支持复制与转移吧,比如将该文件复制到其它地方后,VirtualBox可以再次设置这个ubuntu的vdi文件位置吧。

那就来试一下,将该文件从I盘复制到我的移动硬盘中:

然后在VirtualBox中打开对应的ubuntu虚拟机设置,先点击删除目前的vdi文件:

然后点击注册,选择移动硬盘中的vdi文件:

确定之后,出现错误提示,两个vdi文件的uuid一样,不能使用。这是因为每个vdi文件都有一个唯一的uuid,而VirtualBox不允许注册重复的uuid。

这时我们可以使用VirtualBox自带的命令行工具对vdi文件进行clone,这样的复制方式,uuid就不一样了。

注意,复制的时候,要从已能使用(已注册)的vdi文件作为复制源,并且新的vdi要取一个新的名字,且源文件和目标文件不能在一个目录中,否则会提示vdi already exists.。

比如我使用移动硬盘中还未使用过的vdi文件进行clone操作,就会报错:

换用从之前ubuntu系统所在的I盘复制,就能正常复制:

1
VBoxManage.exe clonehd “I:\ubuntuTest.vdi” “J:\xxx\ubuntuTest0104.vdi

复制时会用进度提示,复制完会产生一个新的UUID:

然后我们再来将这个clone的vid文件注册到VirtualBox的ubuntu虚拟机中,看看能不能用:

这次没有报错,已经注册成功了:

启动ubuntu,也一切正常,所以,根据实际测试,vdi文件可以使用clone的方式复制,复制后的vdi可以正常使用

3 再次为Windows系统的磁盘扩容(成功)

上面已经测试了vdi文件支持复制,所以,将vdi复制出一份后,就可以对Window磁盘大胆的改造了

直接对ubuntu所在的I盘清空和删除,然后从相邻的H盘借出40G,最初70G的未分配空间:

然后将这70G空间,再重新分配为I盘,作为ubuntu的使用空间

接着,就可以将移动硬盘的vdi文件再复制回I盘了,注意,这两个vdi文件,理论上都可以使用,为了和之前一样,还将原始的vdi文件复制回来。从另一方面看,刚才的clone操作其实是多余的,只要先将原来的vdi文件复制出去,等Window的磁盘扩大之后,再将原来的vdi文件复制回来就能继续使用。

然后重新将VitrualBox中ubuntu的磁盘设置为I盘中的vdi文件,加载成功

查看Windows中I盘的容量,已经扩展为70G,还有很多可用空间够ubuntu使用:

4 为vdi文件扩容(假扩容)

上面只是先把ubuntu的vdi所在的Windows系统的I盘进行了扩容,下面要继续把vdi文件进行扩容,我们先来看一下I盘的使用情况,假设要将vdi扩展到69G,现在计算器中计算一下大小:

注意,我这里一开始计算错了,多了一个0,696320是680G。

然后使用VirtualBox自带的命令行工具(resize指令)对vdi文件进行扩容

扩容之后来VirtualBox是设置界面看一下,已经变了680G:

实际我是想改到68G的,再使用命令行来改下大小。

但是命令行中提示不能由大往小的改。

好吧,那就把这个vdi删掉,把刚才移动硬盘备份的vdi文件复制过来,再操作一遍吧。

1
VBoxManage modifyhd "I:\ubuntuTest.vdi" --resize 69632

重新操作一遍后,VirtualBox是设置界面里,已经显示ubuntu的空间为68G了

不过,这个时候的vdi文件的大小,其实是没有变大,因为vdi文件是动态分配的大小的,当实际的使用空间变大上,vdi文件自动变大

5 为/dev/sda1扩容(真扩容)

当我后续又继续使用ubuntu一段时间后,vdi文件确实变大了。

但使用时,ubuntu系统仍会弹窗提示空间不足,什么情况?不是已经给vdi文件扩容了吗?

实际情况是,虽然给vdi文件扩容了,但扩充的容量,ubuntu系统还不能直接使用!!!就像是window电脑多加了一个硬盘,但还没进行格式化,还不能直接使用。

使用df -H指令看一下就明白了。可以看到/dev/sda1仍然是29G的总大小,目前使用率已经是100%了

使用fdisk指令查看/dev/sda的大小,可用看到有68G,但真正能用的sda1是29G。

先尝试了网上了一些方法,如下图,没有成功:

也没看太懂具体的执行原理:

还是先使用ubuntu自带的disk软件,通过图形化的方式查看一下磁盘的使用情况:

可用看到剩余的42G是属于/dev/sda2,且是Unknow状态。

ubuntu自带的disk软件其实也不太好用,网上有搜索了一番,发现另一个更好用的GParted软件,先使用命令安装:

1
sudo apt-get install gparted

然后打开该软件,它是使用方法和Window的磁盘管理器比较像,将未分配的空间先格式化为unallocated状态:

然后在/dev/sda1上进行扩容即可

通过拉动箭头的方式,我直接将剩余的空间都分配给sda1:

分配后的效果如下,da1显示为68G了

最后一步,要点击对号按钮进行确认,刚才的磁盘分配操作才会生效:

确认之后,会提示磁盘分配操作成功:

**最后再来使用df -H指令来查看,可用大小/dev/sda1已经是68G了,使用率是42%**,至此,VirtualBox中的ubuntu磁盘扩容才算真正完成。

6 总结

本篇介绍了自己在使用VirtualBox中的ubuntu系统时,对ubuntu系统的进行磁盘扩容的实际操作记录,其中的一些过程走了弯路,总结下来,扩容的步骤分3部:

  • 对ubuntu的vdi文件所在的window磁盘进行扩容(如果磁盘容量够用则该步可跳过)

  • 对ubuntu的vdi文件进行扩容,方法是使用VirtualBox自带的命令行工具,进行resize

  • 对ubuntu的**/dev/sda1文件进行扩容**,方式是使用GParted工具软件