如何在Virtualbox中对Ubuntu系统根分区扩容

之前在Virtualbox中安装了一个Ubuntu 12.04的系统,用来搞开发。安装的时候对后续用途估算不足,才给它分配了30G的空间。结果,用着用着,发现空间不够了。目前,30G的空间,就只剩1G了。整天报错,说空间不足,实在没办法了,于是开始倒腾如何给系统扩容。

需要说明的是,我这里的扩容,是基于linux根分区的扩容。因为我当时安装系统时,将所有硬盘空间直接挂载主分区下,然后建立了一个swap分区,并没有额外建立其他的分区。所以,现在如果要扩容,就意味着要对系统根分区进行扩容。打给比方,好比是在windows系统下对C盘进行扩容,而不是在E盘后面再增加一个F盘之类的做法。

百度了一下,很多人都发表了帖子来介绍扩容的方法。但是,看来看去,大多数都是不是基于根分区的,而是基于别的分区,就像我上面说的在E盘后面增加一个F盘之类。最后,好不容易找到了一个类似的帖子,提供了一个思路,然后经过我自己一番折腾和摸索,终于把这件事成功搞定,下面就是全过程的详细记录!

一、虚拟机物理空间扩容

首先要在Virtualbox中进行设置,给虚拟机再多分配点硬盘空间。比如我的虚拟机,本来分配的是30G,我想要调成80G。于是,要利用Virtualbox自带的工具VboxManage,该工具位于安装目录C:\Program Files\Oracle\VirtualBox下。为了使用方便,建议将该目录加入到系统的环境变量中,否则每次都要跳转到该目录下才能使用,比较麻烦。至于如何加入环境变量,此处就不解释了,不懂的请自行百度。

请注意,本步骤无需启动虚拟机。如果已经启动了的,请关掉退出。

1、获取虚拟机目标

C:\Users\leon>VboxManage.exe list hdds
UUID:           c078b5bd-2340-470a-ab82-9536d123ba36
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       E:\V_VtSystem\A_Systems\Ubuntu 12.04_HUD.vdi
Storage format: VDI
Capacity:       30720 MBytes
Encryption:     disabled

2、增加硬盘空间

C:\Users\leon>VBoxManage.exe modifyhd c078b5bd-2340-470a-ab82-9536d123ba36 --resize 81920
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
done!

3、查看执行结果

C:\Users\leon>VboxManage.exe list hdds
UUID:           c078b5bd-2340-470a-ab82-9536d123ba36
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       E:\V_VtSystem\A_Systems\Ubuntu 12.04_HUD.vdi
Storage format: VDI
Capacity:       81920 MBytes
Encryption:     

可以看出,Virtualbo给目标虚拟机分配的硬件空间已经提升到了80G。不过,这仅仅是Virtualbox这端分配的值提升了,这个数据还没传达到虚拟机里面去,虚拟机里还要另外设置。

二、Ubuntu磁盘分区重配

1、安装磁盘管理工具

启动虚拟机,进入系统后,安装并启动磁盘管理工具gparted。

sudo apt-get install gparted
sudo gparted

启动界面如下图所示:
这里写图片描述
图中可以看出,新增的50G的空间仍处于未分配的状态,Ubuntu是不能识别的,必须进行相应的处理。

2、删除原有磁盘空间

处于安全起见,第一步首先要禁用swap交换空间。右击swap空间的磁盘,选择禁用交换空间。如下图所示:
这里写图片描述
然后删除该交换空间。如下图所示:
这里写图片描述
然后将交换空间所属的磁盘分区整个删除。如下图所示:
这里写图片描述
此时可以看到,交换空间所属的磁盘分区,与刚刚新分配的磁盘分区合并到一起了,成为了一个更大的磁盘分区。

3、重新生成磁盘分区

根据linux-gparted管理工具的原则,想要修改某个分区的大小,必须从它临近的另外一个分区来操作。因此,必须在sda1分区后紧接着生成一个空的分区,最终才能将整个新分区的容量合并到sda1分区中去。所以,我们必须在目前这个未分配的分区中,生成2个分区。第一个分区是新加入的50G的空间,第二个分区是swap分区。

首先生成50G的新分区。在未分配的分区中右击选择新建,如下图所示:
这里写图片描述
在弹出的对话框中输入新创建的分区的数据。这里要注意的是,分区的文件系统一定要选择成与目前sda1分区的文件系统一样的格式ext4。同时,为了给swap分区预留空间,因此要设置该分区之后的空余空间为2G。如下图中蓝色框部分所示:
这里写图片描述
创建完这个50G的分区之后,剩下的就是swap分区的空间了。再次重复上述步骤,创建swap分区即可。这里要注意的是,分区的文件系统一定要记得改成linux-swap格式,否则就不是swap分区了。如下图蓝色框部分所示:
这里写图片描述
4、磁盘分区写入分区表

分区创建完毕,选择立即生效即可。如下图中蓝色框部分所示:
这里写图片描述
分区表信息写入成功。如下图所示:
这里写图片描述
此时可以看到,系统已经生成了3个分区。原来的sda1分区仍然存在,紧接着是新生成的50G的补充分区sda2,最后是swap分区sda3。要注意的是,这3个分区的顺序不能错,也就是说,swap分区必须位于最后,否则将不能执行合并!
这里写图片描述
至此,gparted工具的所有操作全部完成。可以退出该工具,同时重启系统。

三、Ubuntu磁盘分区表重写

1、查看当前磁盘分区情况

leon@Ubuntu:~$ sudo df -h
[sudo] password for leon: 
文件系统          容量  已用  可用   已用% 挂载点
/dev/sda1        28G   26G  995M   97% /
udev            1.5G   12K  1.5G    1% /dev
tmpfs           301M  780K  301M    1% /run
none            5.0M     0  5.0M    0% /run/lock
none            1.5G  152K  1.5G    1% /run/shm
dir_esd         293G   79G  214G   27% /mnt/share/esd
dir_hud         293G   79G  214G   27% /mnt/share/hud

leon@Ubuntu:~$ sudo fdisk -l /dev/sda
Disk /dev/sda: 84.4 GB, 85424509440 bytes
255 heads, 83 sectors/track, 7832 cylinders, total 125829120 sectors
Units = 扇区 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ca15e
     设备   启动       起点         终点         块数   Id    系统
/dev/sda1   *        2048    58720255    29359104   83  Linux
/dev/sda2        58720256   161634815    51457280   83  Linux
/dev/sda3       121634816   125829119     2097152   82  Linux 交换 / Solaris

2、关闭swap分区

leon@Ubuntu:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          3009        829       2180          0         27        334
-/+ buffers/cache:        468       2541
Swap:            0          0          0
leon@Ubuntu:~$ swapoff -a
leon@Ubuntu:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          3009        829       2180          0         27        334
-/+ buffers/cache:        467       2541
Swap:            0          0          0

3、删除现有磁盘分区信息

leon@Ubuntu:~$ sudo fdisk /dev/sda

命令(输入 m 获取帮助): p

Disk /dev/sda: 84.4 GB, 84424509440 bytes
255 heads, 83 sectors/track, 7832 cylinders, total 125829120 sectors
Units = 扇区 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ca15e

      设备  启动       起点         终点         块数   Id    系统
/dev/sda1   *        2048    58720255    29359104   83  Linux
/dev/sda2        58720256   161634815    51457280   83  Linux
/dev/sda3       161634816   165829119     2097152   82  Linux 交换 / Solaris

命令(输入 m 获取帮助): d
分区号 (1-4): 1

命令(输入 m 获取帮助): d
分区号 (1-4): 2

命令(输入 m 获取帮助): p

Disk /dev/sda: 84.4 GB, 84424509440 bytes
255 heads, 83 sectors/track, 7832 cylinders, total 125829120 sectors
Units = 扇区 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ca15e

      设备  启动       起点         终点         块数   Id    系统
/dev/sda3       161634816   165829119     2097152   82  Linux 交换 / Solaris

可以看出,前2个分区已经消失了。

4、重新建立新的分区信息

命令(输入 m 获取帮助): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分区号 (1-4,默认为 1): 1
起始 sector (2048-125829119,默认为 2048): 
将使用默认值 2048
Last sector, +扇区 or +size{K,M,G} (2048-121634815,默认为 121634815): 
将使用默认值 121634815

命令(输入 m 获取帮助): p

Disk /dev/sda: 84.4 GB, 84424509440 bytes
255 heads, 83 sectors/track, 7832 cylinders, total 125829120 sectors
Units = 扇区 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ca15e

   设备 启动      起点          终点     块数   Id  系统
/dev/sda1            2048   161634815    80816384   83  Linux
/dev/sda3       161634816   165829119     2097152   82  Linux 交换 / Solaris

可以看出,新的分区信息建立完毕,主分区已经有了80G的空间了。但是,此时还没完全结束,还要把分区信息写入到分区表里去。

5、分区信息写入分区表

命令(输入 m 获取帮助): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

6、重启系统并生效

立即重启系统,重启完后,执行下述命令,让系统完成分区表的刷新和重载。

leon@Ubuntu:~$ sudo df -h
[sudo] password for leon: 
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda1        28G   11G   16G   39% /
udev            1.5G   12K  1.5G    1% /dev
tmpfs           301M  808K  301M    1% /run
none            5.0M     0  5.0M    0% /run/lock
none            1.5G   76K  1.5G    1% /run/shm
dir_esd         293G   80G  214G   27% /mnt/share/esd
dir_tmp         293G   80G  214G   27% /mnt/share/tmp

leon@Ubuntu:~$ sudo resize2fs /dev/sda1
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 5
The filesystem on /dev/sda1 is now 20446976 blocks long.

leon@Ubuntu:~$ sudo df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda1        77G   11G   64G   14% /
udev            1.5G   12K  1.5G    1% /dev
tmpfs           301M  808K  301M    1% /run
none            5.0M     0  5.0M    0% /run/lock
none            1.5G  124K  1.5G    1% /run/shm
dir_esd         293G   80G  214G   27% /mnt/share/esd
dir_tmp         293G   80G  214G   27% /mnt/share/tmp
leon@Ubuntu:~$ 
leon@Ubuntu:~$ sudo fdisk -l /dev/sda

Disk /dev/sda: 85.9 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors
Units = 扇区 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ca15e

   设备 启动      起点          终点     块数   Id  系统
/dev/sda1            2048   163577855    81787904   83  Linux
/dev/sda3       163577856   167772159     2097152   82  Linux 交换 / Solaris

可以看出,Ubuntu的硬盘空间,已经由原来的30G成功升级为80G!本次任务圆满完成!

搞定,收工!

  • 19
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值