1. 正确扩容虚拟硬盘:修改虚拟硬盘和快照的虚拟硬盘大小
- 打开VirtualBox所在目录,打开cmd,输入命令
VBoxManage list hdds
,这样能够列出所有的虚拟磁盘。 - 找到你需要扩容的磁盘
- 输入命令
VBoxManage" modifyhd "D:\Pat\to\VM\Ubuntu20.04.3LTS.vdi" --resize 20480
,其中.vdi
为你的Ubuntu系统的虚拟磁盘,注意,我使用的虚拟硬盘是动态分配存储方式。其中20480
是磁盘容量,单位是MB
- 如何你的Ubuntu使用了快照进行备份,还需要修改备份文件的
vdi
大小,这一点非常重要,如果你不修改,那么也许你在VirtualBox的设置中显示了虚拟硬盘大小为20408MB
,但是进入Ubuntu系统之后,大小依然是原来的大小,因为Ubuntu系统使用的是快照vdi
文件。
NOTE:如果不修改快照大小,后续Ubuntu的gparted软件无法更新为扩容后大小
例如
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的设置--存储
中,看见对应的磁盘大小改变了。
参考资料:Guest system does not see the updated disk size in VirtualBox
2 修改Ubuntu系统的容量:卸载–>扩容–>挂载
这里我们扩容了虚拟磁盘的大小,但是Ubuntu系统并不会自动扩容,你还需要为其分配空间。
你需要安装gparted
软件,sudo apt-get install gparted
。
打开软件
这里的未分配空间,就是我们扩容的大小,你要将其分配。
选中要扩容的分区,右键单击,再扩容即可。
之后确认。
特别注意,如果你像我一样,想要扩容根目录/
下的磁盘,这种方法会失败,因为【磁盘扩容前必须卸载之后再扩容】
先卸载磁盘,让其停止运行,之后扩容,之后再mount
挂载磁盘。
而根目录是无法在系统启动的时候卸载的,这种情况,你只能使用U盘启动方式,这里不讲解这个,假设你可以卸载磁盘并扩容,到此就完成了。
关于硬盘分区,自动挂载,你可以参考Linux Ubuntu 硬盘挂载方法
3 无法卸载情况下的其他解决方案
我们需要扩容某个常用的文件夹,将其挂载到一个大容量的新磁盘下。
-
为系统添加一个新的虚拟硬盘
-
将该文件夹(假设文件夹名称为
name1
)的所有内容拷贝到该虚拟硬盘- 在
name1
相同路径下,创建一个文件夹mkdir name2
- 把磁盘挂载到
name2
下,sudo mount /dev/sdb1 name2
,dev/sdb1
为新添加的磁盘,请使用sudo fdisk -l
命令查看该磁盘的名称。 - 把
name1
文件夹下所有文件夹和文件,拷贝到name2
下,使用命令sudo cp -v -a name1/* ./name2
- 在
-
偷梁换柱,让
name1
在系统看起来没变化,实际上name1
存储到了新的磁盘中- 修改
name2
的权限,由root
改为用户权限,chown -R user:group ./name2
- 把
name1
的文件名修改为别的,mv name1 name3
- 把
name2
修改为name1
,mv name2 name1
- 修改
-
运行
name1
中的程序,看是否可以正确运行,此时name3
其实你可以删掉了,但是以防万一,还是备份呆着比较好
解释一下为什么这样做:文件夹本来在原磁盘中,挂载到新磁盘之后,会显示新磁盘的内容,而原磁盘的内容会被隐藏,这导致很麻烦。通过完全拷贝的方式,解决这个问题。
此外注意一下cp
命令,我们不需要把name1
文件夹及其子文件夹拷贝,只需要拷贝其子文件夹,因此使用了name1/*
。如果直接把name1
拷贝到name2
下,name1
将会成为name2
的子文件夹,这样和原有路径不一样了。
对于cp
命令,如果使用cp -a name1 ./name333
,而name333
本来不存在,就相当于拷贝整个name1
并改名为name333
,而不是把name1
文件夹作为name333
的子文件夹存储。而挂载磁盘的文件夹是必须存在的,就不能通过这种方式复制。