在Vmware 9.0下安装了Ubuntu 14.04.2 Desktop LTS版本,接着下载了Ubuntu内核源码树并用该源
码编译了内核,完成后又想在Ubuntu系统下安装源码阅读工具以及一些其他一些辅助工具,结果发现磁
盘空间不够了,总不能重新安装系统把这些动作重来一遍或者拷贝大量的数据吧?这实在是太浪费时间
了。还好,Vmware为我们提供了便利。
这里,其实我最终的目标是要达到扩大磁盘分区的容量。这要分两步来走:
第一步,要扩大安装Ubuntu系统时所创建的磁盘的容量。
这可以很方便的通过Vmware自身的工具来完成。操作步骤如下面两图:
填入自己最终想要的磁盘容量大小,这个操作步骤很容易也很快就完成了。更多关于Vmware磁盘操作的
细节可参考Vmware软件help目录下的文档或Vmware官方网站文档。
第二步,接下来使用工具GParted来扩展磁盘分区的容量。
到SourceForge去下载GParted的ISO镜像、文件。配置Vmware的CD/DVD(IDE)项,载入该ISO镜像文
件,并同时勾选上"Connect at power on"(这个很重要),否则即使Vmware BIOS里设置了光盘引导,
也不会由GParted镜像文件引导系统,后面的一切自然无法进行。
接下来配置Vmware BIOS的BOOT优先级,将CDROM设为第一优先级。Vmware 9.0进入BIOS的快捷键是F2,
我疯狂的按啊,也没能进去,这是我暂时没能搞明白的问题,有网上文章说这是启动速度太快的原因,但事
实并非如此,因为至少有2个事实做为佐证来否认这个判断:第一,我有过在Vmware 9.0按Esc键选择启动设
备成功的经验,而这次无论怎么按Esc键都无法成功;第二,通过修改.vmx配置文件加长启动延时,仍然没
能够成功。我这里是采用修改Vmware的配置文件的方法来进入Vmware BIOS的。打开Guest OS(我这里是
Ubuntu 14.04.2)所在的目录,找到后缀为.vmx文件,用文本编辑器打开它,在其最后一行添加一句:
bios.forceSetupOnce="TRUE"
上面的可以强制启动一次BIOS,之后再启动系统不会再进入BIOS。事实上,Vmware是通过更新.vmx配置文件将该配置项的值置为FALSE来做到的。另外,在你添加上面的语句到.vmx配置文件之前,你需要先确
认.vmx文件中没有bios.forceSetupOnce配置项,如果该配置项已经存在,将它的值直接修改为TRUE就行
了。如果重复配置该项,启动Guest OS时Vmware会报错。
下面是配置Vmware BIOS的截图,将CD-ROM Drive配置为首选启动设备。
接下来会进入到GParted进行最后的步骤:磁盘分区扩展。
根分区扩展前的截图:
根分区扩展后,重建扩展、交换分区后的截图:
上面的截图显示/dev/sda1分区已经被扩展为33.92GiB。在进入上面的画面前会有针对一些针对GParted
的配置或选择,全部选择默认的即可(就是直接敲回车键)。
我原本的磁盘分区非常简单,只有一个位于主分区的根分区、一个位于扩展分区的交换分区。由于扩展
前两个分区的空间都是紧挨着的,如果要扩展,需先将原来的扩展分区(包括其中的交换分区)删除,然后
用Resize/Move菜单来扩展主分区从而扩展根分区的大小,剩下的空间分别用于建立新的扩展分区,并从扩展分区中重新建立交换分区,最后用Apply菜单真正的将更改写回磁盘,完成后退出GParted工具。
完成上面的两步后,重启系统,系统已经能够工作了。但我们依然还有些收尾的工作要做,在启动
界面的会看到一个提示信息,如下图:
上面的提示信息是说有UUID=9f8f36cb-4a9f-4aab-97bd-b27b86f86f00磁盘驱动器没有准备好或者根本不
存在。这样的信息够吓人,但好在我们还能进入系统。UUID应用于磁盘管理,是为了避免在多个磁盘或
者其他磁盘驱动器加载顺序变动造成的混乱,将每个分区用唯一的UUID来标识,这样可以避免这样的问
题。
回到我们的问题,到底是什么造成了这个提示信息呢?因为和磁盘驱动器加载有关,所以我先查看
了配置文件/etc/fstab,发现提示信息中UUID对应于swap分区的配置项;然后又用sudo blkid查看了重
新调整了分区后swap的UUID,发现swap分区的UUID已经发生了变化(这是必然的,因为UUID是唯一的,
UUID的生成规律是根据系统时间等等等等结合产生的)。到此,问题明了了,提示信息里UUID对应的旧
的swap分区已经不存在了,要解决这个问题,需要将/etc/fstab中的swap分区的UUID更改为新的UUID。
另外,由于Ubuntu系统从休眠状态唤醒也使用到了swap分区的UUID,所以还需要修改配置文件
/etc/initramfs-tools/conf.d/resume,否则系统将无法从休眠状态正确恢复,系统会重启。将该配置文件中swap分区的UUID更新为新的swap分区UUID,然后运行命令
sudo update-initramfs -u -k $(uname -r)
更新目录/boot/下当前内核对应的initrd.img-xxx镜像文件,如果你有多个内核镜像在/boot目录下,要用
-k参数指定你想要更新的内核版本,否则只会更新默认启动的内核版本的对应文件,而不是更新你当前运行
内核的对应文件initrd.img文件。
至此,修改完成,重启系统后,前面的提示信息不会再出现了。
至此,磁盘分区的扩展工作告一段落。当我们不能就此止步不前,是吧?学海无涯啊!除了上面提
到的磁盘工具外,Ubuntu另外还有些其他工具很是值得学习,如lsblk会打印磁盘block的一些信息,fdisk可以查看磁盘挂载,使用状况,磁盘分区等,mkfs在磁盘上建立Linux文件系统,tune2fs修改磁盘
的文件系统信息。另外一些关于和磁盘信息相关的文件,如/dev/disk/by-uuid,/proc/磁盘信息文件等
等等等。