zl程序教程

您现在的位置是:首页 >  其他

当前栏目

VisualBox虚拟机扩容硬盘及分区空间

2023-03-15 23:21:59 时间

在VisualBox管理器中可查看虚拟机的存储空间及格式,也可在终端进入VisualBox安装目录使用VBoxManager.exe工具来查看:

$ cd C:安装目录VirtualBox
$ VBoxManage.exe list hdds
UUID:           3174cfbd-2da3-4ae7-b16b-f417e6f651b6
Parent UUID:    base
State:          locked write
Type:           normal (base)
Location:       C:用户目录.dockermachinemachinesdefaultdisk.vmdk
Storage format: VMDK
Capacity:       20000 MBytes
Encryption:     disabled

开始扩容,注意要先关闭虚拟机

对于vdi格式的存储,可以直接扩容(参考下方直接使用modifyhd命令),对于vmdk格式的存储,需要先复制转换为vdi格式,扩容后可以直接使用vdi格式的硬盘,便于以后扩容:

# 使用clonehd命令复制转换格式
$ VBoxManage.exe clonehd "C:用户目录.dockermachinemachinesdefaultdisk.vmdk" "C:用户目录.dockermachinemachinesdefaultdocker.vdi" --format vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vdi'. UUID: 7ea0cb49-98b3-45c7-ba05-599fdac9f947

# 对vdi格式进行扩容,单位为M,这里我扩容到35G(注意,这种方法不能用来缩容)。
$ VBoxManage.exe modifyhd "C:用户目录.dockermachinemachinesdefaultdocker.vdi" --resize 35840
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

此时直接去管理器挂载新硬盘会提示UUID重复,需要重置一下UUID:

# 其实不带.exe后缀也能使用VBoxManage
$ VBoxManage internalcommands sethduuid "C:用户目录.dockermachinemachinesdefaultdocker.vdi"
UUID changed to: b3202d65-0097-4e93-833c-4e2b463dcf89

此时去管理器的虚拟机设置界面,找到存储,删除之前的vmdk盘片(不会真的删除,文件夹中还存在),添加盘片——添加已有磁盘,然后在目录中找到刚扩容的vdi格式磁盘添加即可。

PS:如果之前有做过快照的(在磁盘文件所在目录下或其default子目录中会有一个Snapshots文件夹,看里面有没有快照文件),还需要对快照做处理,因为本文操作不涉及,需要的可以自行搜索。

现在在虚拟机的设置界面查看存储可以发现磁盘的虚拟空间已经到了35G。重新启动虚拟机试试。

我们输入fdisk -l命令查看磁盘空间:

$ fdisk -l
Disk /dev/sda: 35 GB, 37580963840 bytes, 73400320 sectors
4568 cylinders, 255 heads, 63 sectors/track
Units: cylinders of 16065 * 512 = 8225280 bytes

Device  Boot StartCHS    EndCHS        StartLBA     EndLBA    Sectors  Size Id Type
/dev/sda1    123,0,1     1023,254,63    1975995   40949684   38973690 18.5G 83 Linux
/dev/sda2    0,1,1       122,254,63          63    1975994    1975932  964M 82 Linux swap

Partition table entries are not in disk order

从结果的第一行我们可以看到/dev/sda: 35 GB,磁盘总空间确实在35G,但再看下面/dev/sda1,依然还是18.5G,没有扩容,怎么回事?

其实这是因为新增的磁盘空间并没有被挂载上去,这类似于我们给电脑加了个新存储条,但没分区是一回事。

此时我们可以选择将新增的空间添加到新分区,也可以选择增加到老分区去扩充其空间。在此我的需求是新增老分区/dev/sda1的空间,但其实都可以通过下面的方法做到。

现在我们需要用到Gparted这个工具。

先去其官网下载其iso文件:http://gparted.sourceforge.net/download.php,我下载的版本是gparted-live-1.0.0-3-i686.iso。

现在再次关闭虚拟机,我们要做的是用这个iso文件来启动虚拟机,并分配新的空间。

使用虚拟机管理器,进入设置的“存储”标签,添加一个IDE控制器,然后在IDE控制器下选择添加光驱,从已有磁盘中选择我们刚才下载的gparted-live-1.0.0-3-i686.iso。

然后去“系统”标签下,将光驱的启动顺序拉到最前面。重新启动虚拟机(带界面)。现在能看到,虚拟机通过Gparted启动了。

一路回车,全用默认推荐设置,打开Gparted,我们可以看到我们目前已有的分区和未被分区的空间。这里我们可以右键选择修改一个已有分区的大小(可以拉取到最大,将空闲空间全部使用),也可以将空闲空间放入一个新分区。 操作界面参考这两篇博客: https://www.cnblogs.com/zhcncn/articles/2948508.html https://www.cnblogs.com/xueweihan/p/5923937.html

操作完后提交,然后关闭虚拟机,去掉存储中的IDE控制器,再重新打开就会以之前的系统和磁盘来启动了。现在再来检查一下空间:

$ fdisk -l
Disk /dev/sda: 35 GB, 37580963840 bytes, 73400320 sectors
4568 cylinders, 255 heads, 63 sectors/track
Units: cylinders of 16065 * 512 = 8225280 bytes

Device  Boot StartCHS    EndCHS        StartLBA     EndLBA    Sectors  Size Id Type
/dev/sda1    123,0,1     1023,254,63    1975995   73400319   71424325 34.0G 83 Linux
/dev/sda2    0,1,1       122,254,63          63    1975994    1975932  964M 82 Linux swap

Partition table entries are not in disk order

可以看到/dev/sda1分区已经扩大到34G了,全部利用了我添加的空间,原本分区中的内容也还存在着