VirtualBox虚拟机Ubuntu扩容记
在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工具软件