> 文章列表 > VirtualBox下Ubuntu系统磁盘扩容

VirtualBox下Ubuntu系统磁盘扩容

VirtualBox下Ubuntu系统磁盘扩容

1. 正确扩容虚拟硬盘:修改虚拟硬盘和快照的虚拟硬盘大小

  1. 打开VirtualBox所在目录,打开cmd,输入命令VBoxManage list hdds,这样能够列出所有的虚拟磁盘
  2. 找到你需要扩容的磁盘
  3. 输入命令VBoxManage" modifyhd "D:\\Pat\\to\\VM\\Ubuntu20.04.3LTS.vdi" --resize 20480,其中.vdi为你的Ubuntu系统的虚拟磁盘,注意,我使用的虚拟硬盘是动态分配存储方式。其中20480是磁盘容量,单位是MB
  4. 如何你的Ubuntu使用了快照进行备份,还需要修改备份文件的vdi大小,这一点非常重要,如果你不修改,那么也许你在VirtualBox的设置中显示了虚拟硬盘大小为20408MB,但是进入Ubuntu系统之后,大小依然是原来的大小,因为Ubuntu系统使用的是快照vdi文件。

NOTE:如果不修改快照大小,后续Ubuntu的gparted软件无法更新为扩容后大小

例如
VirtualBox下Ubuntu系统磁盘扩容

UUID:           0172d852-fd6f-438c-a10c-ecb8c35289ea
Parent UUID:    ccd7d5e2-cf11-4312-bc08-5ce68a983bc7
State:          locked write
Type:           normal (differencing)
Location:       E:\\Ubuntu20.04.3LTS\\Ubuntu20.04.3LTS\\Snapshots/{0172d852-fd6f-438c-a10c-ecb8c35289ea}.vdi
Storage format: VDI
Capacity:       150000 MBytes
Encryption:     disabled

这是我的Ubuntu系统,快照对应的vdi文件,如果不知道对应哪个,就新建一个快照,跟新建之前对比,多出来的就是了。

注意:\\Snapshots/{0172d中的/要改成\\,再把它的大小修改成和刚刚一样的大小。

然后你会在virtualbox的设置--存储中,看见对应的磁盘大小改变了。
VirtualBox下Ubuntu系统磁盘扩容

参考资料:Guest system does not see the updated disk size in VirtualBox

2 修改Ubuntu系统的容量:卸载–>扩容–>挂载

这里我们扩容了虚拟磁盘的大小,但是Ubuntu系统并不会自动扩容,你还需要为其分配空间。

你需要安装gparted软件,sudo apt-get install gparted

打开软件

VirtualBox下Ubuntu系统磁盘扩容

这里的未分配空间,就是我们扩容的大小,你要将其分配。

VirtualBox下Ubuntu系统磁盘扩容

选中要扩容的分区,右键单击,再扩容即可。

VirtualBox下Ubuntu系统磁盘扩容

之后确认。

特别注意,如果你像我一样,想要扩容根目录/下的磁盘,这种方法会失败,因为【磁盘扩容前必须卸载之后再扩容】

VirtualBox下Ubuntu系统磁盘扩容

先卸载磁盘,让其停止运行,之后扩容,之后再mount挂载磁盘。

而根目录是无法在系统启动的时候卸载的,这种情况,你只能使用U盘启动方式,这里不讲解这个,假设你可以卸载磁盘并扩容,到此就完成了。

关于硬盘分区,自动挂载,你可以参考Linux Ubuntu 硬盘挂载方法

3 无法卸载情况下的其他解决方案

我们需要扩容某个常用的文件夹,将其挂载到一个大容量的新磁盘下。

  1. 为系统添加一个新的虚拟硬盘
    VirtualBox下Ubuntu系统磁盘扩容

  2. 将该文件夹(假设文件夹名称为name1)的所有内容拷贝到该虚拟硬盘

    1. name1相同路径下,创建一个文件夹mkdir name2
    2. 把磁盘挂载到name2下,sudo mount /dev/sdb1 name2dev/sdb1为新添加的磁盘,请使用sudo fdisk -l命令查看该磁盘的名称。
    3. name1文件夹下所有文件夹和文件,拷贝到name2下,使用命令sudo cp -v -a name1/* ./name2
  3. 偷梁换柱,让name1在系统看起来没变化,实际上name1存储到了新的磁盘中

    1. 修改name2的权限,由root改为用户权限,chown -R user:group ./name2
    2. name1的文件名修改为别的,mv name1 name3
    3. name2修改为name1mv name2 name1
  4. 运行name1中的程序,看是否可以正确运行,此时name3其实你可以删掉了,但是以防万一,还是备份呆着比较好

解释一下为什么这样做:文件夹本来在原磁盘中,挂载到新磁盘之后,会显示新磁盘的内容,而原磁盘的内容会被隐藏,这导致很麻烦。通过完全拷贝的方式,解决这个问题。

此外注意一下cp命令,我们不需要把name1文件夹及其子文件夹拷贝,只需要拷贝其子文件夹,因此使用了name1/*。如果直接把name1拷贝到name2下,name1将会成为name2的子文件夹,这样和原有路径不一样了。

对于cp命令,如果使用cp -a name1 ./name333,而name333本来不存在,就相当于拷贝整个name1并改名为name333,而不是把name1文件夹作为name333的子文件夹存储。而挂载磁盘的文件夹是必须存在的,就不能通过这种方式复制。

常见知识分享