当我们使用VirtualBox创建虚拟机时,常常因为对磁盘空间估算不准确,导致磁盘空间设置的比较小。然而在实际使用过程当中,随着数据的积累,磁盘空间捉襟见肘。此时需要我们扩展虚拟机虚拟磁盘大小。

命令行扩展

1、在Virtualbox安装目录下找到VBoxManage.exe可执行文件
2、.\VBoxManage.exe modifyhd D:\virtual_machine\ubuntu\ubuntu.vdi --resize 40960
40960是扩展后的磁盘大小,单位为M
3、查看磁盘大小:.\VBoxManage.exe list hdds
UUID:           035b1a14-d307-4731-a591-57fd0ff5e09f
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       D:\virtual_machine\ubuntu\ubuntu.vdi
Storage format: VDI
Capacity:       40960 MBytes
Encryption:     disabled

管理界面扩展

1、界面入口:
管理(F) -> 虚拟介质管理 -> 虚拟硬盘 -> 我们创建并使用的虚拟磁盘 -> 大小(手动修改或拖动滑框修改)

配置

前边两步的操作仅仅是将虚拟磁盘扩容,系统会产生一块新的磁盘。我们需要将这块新的磁盘挂在到需要的目录中

查看空闲磁盘
sudo fdisk -l
分区设置
sudo fdisk /dev/sda
n
p
默认回车
最后输入w保存分区信息
sudo fdisk -l 查看分区信息
这行完这些操作后重启虚拟机,不重启是否会生效,笔者没试过,可以尝试一下
格式化分区
sudo mkfs -t ext4 /dev/sda3

解释

/dev/sda3是我们新创建的分区
ext4: 第四代扩展文件系统(fourth extended filesystem),是linux系统下的日志文件系统,是ext3文件系统的后续版本

挂载分区

sudo mount /dev/sda3 /home
注意:
挂载分区时,如果我们分区挂载到/home时,重启后会导致/home文件夹下的其他文件丢失。从而无法使用系统个,此时不要担心,因为文件并未被删除。
原因:这是由于linux的VFS(虚拟文件系统)机制导致的。我们登陆后,所看到的目录,文件都是内核在加载的时候构造在内存中的VFS目录树,而不是直接看到硬盘上的实际目录树。当你挂在一个设备到VFS挂载点时(比如/home),系统就把VFS的这个挂载点/home指向你新挂载的设备上。而新设备上没有以前的文件,因此会看不到。umount /dev/sda3 /home取消挂在后就可以看到了.

挂载分区并copy数据

为了解决上边的问题,我们需要提前将数据做copy
sudo mkdir /new ## 临时目录
sudo mount /dev/sda3 /new ## 先挂载到临时目录上
sudo cp -R /home/* /new ## 数据备份
sudo rm -rf /home/* ## 清空挂载点数据,可以不执行
sudo mount /dev/sda3 /home ## 将分区挂载到/home挂载点上
此时你会发现原来/home文件夹下的内容已被全部转移来了
sudo umount /dev/sda3 /new ## 取消临时文件夹下的挂载 如果无法取消,可以尝试 umount -fl 强制卸载

重启虚拟机后再次进入时,会发现无法进入/home/userPath 目录,这是因为重启后无法自动挂载导致的

启动自动挂载

sudo vim /etc/fstab
在文件的最后一行添加
/dev/sda3 /home ext4 defaults 0 1
保存,退出,重启虚拟机即可。

ps:
第一次登陆可能会慢一点,登陆完成会出现一个报错

/usr/bin/xauth: error in locking authority file /home/*/.Xauthority

这是文件权限问题,在/home目录下,执行

sudo chown -R user:user ./user 
即可
备注: user需要替换为自己的用户名