VMware Ubuntu 12.04分区动态调整小记

时间:2022-12-16 12:24:48

概述

       在WMware中安装Ubuntu 12.04时,分区大小默认使用了20G,安装完成后根目录大小只有12G。因为一开始打算将源码放到单独挂载的分区中,所以觉得12G应该也足够。但在Android源码编译过程中遇到了空间不足的问题,源码编译最后会将相关的img文件压缩成zip包,这个步骤会暂时利用/tmp这个目录。因为根目录只有12G,再加上/home下存放了一点东西,Android源码编译最后打包时,提示根目录空间不足打包操作被终止。

       本文的目的是,动态调整分区大小,扩大根分区容量,避免Android编译无法打包。

转载请务必注明出处http://blog.csdn.net/yihongyuelan

步骤

分区扩展计划

       在概述中已提到原有根分区只有12G,本文计划将其替换为20G。这里说的是替换,也就是用20G的根分区替换12G的根分区,那么也就还会剩下12G的容量,计划将这12G给/home独立使用。调整之后的硬盘挂载情况如图1所示:

VMware Ubuntu 12.04分区动态调整小记

图1 调整之后WMware挂载硬盘信息

       在Ubuntu中使用df -h查看分区情况如图2所示:

VMware Ubuntu 12.04分区动态调整小记

图2 Ubuntu中查看分区信息

       从图2中可以看到,根分区从/dev/sda1变成了/dev/sdc1而大小由12G变成了20G,原来的/dev/sda1则挂载到了/home目录。

新建虚拟硬盘

       在WMWare->Settings中添加新的硬盘,步骤比较简单具体不表。在指定磁盘容量的时候,建议勾选上立即分配所有磁盘空间,如图3:

VMware Ubuntu 12.04分区动态调整小记

图3 勾选"立即分配所有磁盘空间(A)"

根分区迁移

       在完成新硬盘的添加之后,记得在Ubuntu中使用fdisk或者Disk Utility工具对新硬盘进行分区和格式化,之后就需要对原来的根目录进行备份了。新硬盘格式化和分区完成之后,这里即/dev/sdc1,其挂载到/new_root,在终端中执行:

sudo mkdir /new_root
sudo mount /dev/sdc1 /new_root
       因为需要对当前的根目录进行迁移,所以需要建一个备份目录/old_root,并将当前根目录挂载到/old_root (当前根目录即/dev/sda1) ,因此操作如下:
sudo mkdir /old_rootsudo mount /dev/sda1 /old_root
       接着就需要使用rsync指令来完成根目录的迁移了。

       rsync是类unix系统下的数据镜像备份工具,即remote sync。rsync是Linux系统下的文件同步和数据传输工具,可以在客户机和远程文件服务器之间进行文件同步,也可以在本地系统中,将数据从一个分区备份到另一个分区上。如果rsync在备份过程中出现了数据传输中断,恢复后可以继续传输不一致的部分,并且rsync可以执行完整备份或增量备份(具体信息可以man一下,中文翻译参考这里)。

使用rsync命令,将/old_root备份到/new_root:

sudo rsync -lva /old_root/. /new_root
参数解释:

-l表示保持软链接;

-a表示archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD;

-v表示操作过程详细输出;

       完成之后卸载old_root:

sudo umount /old_root

修改/etc/fstab

       因为/new_root后续就是新的根分区,所以需要修改/new_root下的fstab文件,即/new_root/etc/fstab,修改如下:

#UUID=46df0a25-8f0f-4ef5-90c0-8a665f4ab82d /               ext4    errors=remount-ro 0       1
/dev/sdc1 / ext4 errors=remount-ro 0 1
       第一行表示注释掉原来的根目录挂载,第二行表示新的设备为/dev/sdc1挂载到根目录。

       因为要把启动分区切换到/dev/sdc1,所以要将启动相关的信息更新到grub菜单中,继续在终端中执行:

sudo grub-install /dev/sdc
       在grub启动菜单中加入/dev/sdc,之后更新grub启动菜单:
sudo update-grub

更改启动顺序

       现在设备/dev/sda1即原来的根目录(old_root),新设备/dev/sdc1即新的根目录(new_root),都已经加入了grub启动菜单,需要设置哪个设备优先加载,即启动顺序。修改启动顺序实际上就是进入BIOS中,设置硬盘的加载顺序。

       完成以上操作之后,选择重启,并快速短按F2(虚拟机开机时有提示),进入BIOS操作界面,通过左右方向键选择"Boot"菜单,并通过上下方向键选择Hard Drive子菜单,如图4所示:

VMware Ubuntu 12.04分区动态调整小记

图4 WMware BIOS界面

       将新添加的硬盘/dev/sdc1通过+/-调节到Bootable Add-in Cards下第一个,这里即VMware Virtual SCSI Hard Drive (0:2),之后通过F10保存并退出,重启即可进入系统。完成以上操作之后,根分区的迁移大致就已完成。

独立/home分区

       根分区已经从/dev/sda1切换到了/dev/sdc1,因此/dev/sda1已经没有用了,为了资源最大化利用,我打算将其作为/home独立分区,而操作步骤和备份根分区时的操作差不多。新建一个/home_new,将/dev/sda1挂载到/home_new,将/dev/sda1中原有的内容删掉,并通过rsync将/home中的内容同步到/home_new,将/home重命名为/home_bak,将/home_new重命名为/home,并修改/etc/fstab如下:

/dev/sda1       /home ext4 defaults,user,exec,dev,suid 0 0

       保存之后重启,通过df -h就能看到如图5中的效果了:

VMware Ubuntu 12.04分区动态调整小记

图5 调整后的分区

遇到的问题

虽然文章中描述的步骤明确,但在实际操作过程中也遇到了很多坑,如:

1. 如果不建立/old_root文件夹就开始执行

sudo rsync -lva / /new_root
这样会导致递归备份,即/new_root/new_root/new_root/....无限循环下去;

2. 如果发现/new_root目录下./ 和 .. / 的ower和group不对,可执行

sudo chown root:root ./ ../

总结

       因为之前将根分区设置得太小,导致源码编译打包时空间不足,从而无法完成打包操作,根分区扩展后问题解决。如果遇到重装系统的问题,独立的/home分区可以复用,许多配置不用重新再设置一遍。