前言
博主做期末大作业时用到 VirtualBox 6.1 安装的 Ubuntu 16.04 LTS 虚拟机,开始只分配了 20GB 硬盘,跑实验时发现空间不够,需要对磁盘扩容,折腾了半天,在此做一个小记录。
警告:博主并不精通 Linux,具体操作方法都是我在网上搜索的,虽然这里提供的方案包括了备份步骤,但磁盘分区总体来说是很危险的操作,不保证百分百安全。
操作
关闭虚拟机,在 VirtualBox 控制台中,点击左上角 管理 —— 虚拟介质管理。
找到需要扩容的磁盘,拖动滑条,更改磁盘最大容量。我这里将原来的 20GB 扩展到 60GB。
启动虚拟机,运行
sudo apt-get install gparted
安装磁盘分区工具 gparted。
如果报错 “gparted : 依赖: libglibmm-2.4-1v5 (>= 2.54.0) 但是 2.46.3-1 正要被安装”,“无法修正错误,因为您要求某些软件包保持现状,就是他们破坏了软件包见的依赖关系”,除了网上其它解决方案,请打开系统设置 —— 软件和更新 —— 其它软件,看一下配置的源和你的 Ubuntu 版本符不符合!!博主在安装这步一直提示各种冲突折腾了半天,结果发现是在 Ubuntu 16 上配置了 bionic 也就是 Ubuntu 18 的源!!真想锤死两个月前配环境时直接抄其它博客的自己(怒)
安装完成后,启动 gparted。
sudo gparted
然而,我发现分区结构是长这样的:
无语了,swap 分区把主分区和新扩展的容量分隔开了,右键 sda1 分区可以看到我们不能像网上其它教程那样直接扩展到未分配的容量。关闭系统,回到 VirtualBox 控制台的虚拟介质管理,创建一块新的 VDI 虚拟硬盘,并将容量选为扩展后的容量。然后在虚拟机设置中,将这块新的硬盘也挂载上。
启动虚拟机,在 gparted 中现在能看到挂载了两块硬盘,其中 sdb 是未分区的。
先在 gparted 中为其创建分区表,然后在终端中运行:
sudo dd if=/dev/sda of=/dev/sdb bs=1M
该操作将原硬盘中的所有数据拷贝到新硬盘,根据你原盘的数据量大小需要耗费一段时间,然后在 gparted 中能看到 sdb 变成了和 sda 一样的分布。在终端中:
swapoff -a
暂时关闭 swap 功能,接着在 sdb 中,将中间的 swap 分区和套在外面的扩展分区删掉,然后就可以扩展左边的 sdb1 分区了。我这里原来的 swap 分区是 1GB 左右,所以将 sdb1 的大小拉到剩余 1GB 左右的位置。然后在剩余的 1GB 左右未分配空间上,新建,文件系统选 linux-swap,于是 sdb 变成如下结构,主分区扩展成功:
再启动 swap 分区:
swapon -a
关闭虚拟机,将挂载的原磁盘 Master 卸载,只保留新磁盘 Master_1,然后再次开机,打开 gparted,可以看到新磁盘已经代替了原来的 sda。
确认运行稳定后可以将原磁盘删除或留作备份。