zoukankan      html  css  js  c++  java
  • 如何在Virtualbox中对Ubuntu系统根分区扩容

    转载:
     
     
     
     
     
     
    参见博客:
    https://blog.csdn.net/LEON1741/article/details/56494797

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

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

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

    一、虚拟机物理空间扩容

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

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

    1、获取虚拟机目标(一种方法,在D:/Program Files/Oracle/VirtualBox下

    C:Usersleon>VboxManage.exe list hdds
    UUID:           c078b5bd-2340-470a-ab82-9536d123ba36
    Parent UUID:    base
    State:          created
    Type:           normal (base)
    Location:       E:V_VtSystemA_SystemsUbuntu 12.04_HUD.vdi
    Storage format: VDI
    Capacity:       30720 MBytes
    Encryption:     disabled
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    8

    • 9

    2、增加硬盘空间

    • 1
    • 2
    • 3

     C:Usersleon>VBoxManage.exe modifyhd

    c078b5bd-2340-470a-ab82-9536d123ba36 --resize 81920

    0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% done!

    3、查看执行结果

    C:Usersleon>VboxManage.exe list hdds
    UUID:           c078b5bd-2340-470a-ab82-9536d123ba36
    Parent UUID:    base
    State:          created
    Type:           normal (base)
    Location:       E:V_VtSystemA_SystemsUbuntu 12.04_HUD.vdi
    Storage format: VDI
    Capacity:       81920 MBytes
    Encryption:     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    7

    8

    • 9

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

    进入命令行,以Windows系统为例(令一种方法)

    (特别注意空格和中文)

    1.启动CMD命令行,进入VirtualBox的安装目录。如

    运行:cmd C:/Users/Administrator/>D: D:/> cd  "/Program Files/Oracle/VirtualBox"D:/Program Files/Oracle/VirtualBox>VBoxManage.exe modifyhd YOUR_HARD_DISK.vdi --resize SIZE_IN_MBD:/Program Files/Oracle/VirtualBox>其中参数 YOUR_HARD_DISK.vdi 是您要修改的 VirtualBox 虚拟硬盘镜像文件。而参数 SIZE_IN_MB 是指修改后的硬盘容量,单位是MB。 3. 调整磁盘空间为15G:比如下面这行命令将会把名为"ubuntu.vdi "的 VirtualBox 硬盘容量修改为15*1024MB。C:/Program Files/Oracle/VirtualBox>VBoxManage.exe modifyhd "E:/dds/VirtualBox VMs/linux/linux-bak.vdi" --resize 15360
    0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%.
    D:/Program Files/VirtualBox>

    注意:如果路径中包含空格或中文,整个路径要用英文状态引号"括起来,在WIN7的CMD下可以输入部分路径然后按TAB键补全,CMD监测到路径中有空格会自动为路径名加引号的,如:

    D:/Program Files/Oracle/VirtualBox>VBoxManage.exe modifyhd "F:/VirtualBox/my ubuntu.vdi"--resize 15360

    D:/Program Files/Oracle/VirtualBox>VBoxManage.exe modifyhd "F:/虚拟机/my ubuntu.vdi"--resize 15360

    另,VBOX好像对MS的文件系统,比如NTFS的可能无法更改大小,一网友测试没成功,相对来说对Linux系的支持更好一些

    C:/Program Files/Oracle/VirtualBox>VBoxManage.exe modifyhd "E:/dds/VirtualBox VMs/linux-bak/linux-bak.vdi" --resize 20480

    0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

    C:/Program Files/Oracle/VirtualBox>cd E:/dds/VirtualBox VMs

    二、Ubuntu磁盘分区重配

    1、安装磁盘管理工具

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

    sudo apt-get install gparted sudo gparted

    • 1

    • 2

    • 3

    启动界面如下图所示:

    这里写图片描述

    图中可以看出,新增的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 forleon: 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda1 28G 26G 995M 97% / udev 1.5G 12K 1.5G 1% /dev tmpfs 301M 780K 301M 1% /run none 5.0M 05.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 = 扇区 of1 * 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 * 2048587202552935910483 Linux /dev/sda2 587202561616348155145728083 Linux /dev/sda3 121634816 125829119 2097152 82 Linux 交换 / Solaris

    • 1

    • 2

    • 4

    6

    • 7

    8

    9

    10

    11

    • 12

    13

    • 14

    • 15

    • 16

      1

    19

    • 20

    21

    22

    2、关闭swap分区

    leon@Ubuntu:~$ free -m total used free shared buffers cached Mem:30098292180027334 -/+ buffers/cache:4682541 Swap:000 leon@Ubuntu:~$ swapoff -a leon@Ubuntu:~$ free -m total used free shared buffers cached Mem:30098292180027334 -/+ buffers/cache:4672541 Swap:000

    • 1

    • 2

    5

    • 6

    • 7

    8

    9

    • 10

    • 11

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

    leon@Ubuntu:~$ sudo fdisk /dev/sda 命令(输入 m 获取帮助): p Disk /dev/sda: 84.4 GB, 84424509440bytes 255 heads, 83 sectors/track, 7832 cylinders, total 125829120 sectors Units = 扇区 of 1 * 512 = 512bytes Sector size (logical/physical): 512bytes / 512bytes I/O size (minimum/optimal): 512bytes / 512bytes Disk identifier: 0x000ca15e 设备 启动 起点 终点 块数 Id 系统 /dev/sda1 * 2048587202552935910483 Linux /dev/sda2 587202561616348155145728083 Linux /dev/sda3 161634816165829119209715282 Linux 交换 / Solaris 命令(输入 m 获取帮助): d 分区号 (1-4): 1 命令(输入 m 获取帮助): d 分区号 (1-4): 2 命令(输入 m 获取帮助): p Disk /dev/sda: 84.4 GB, 84424509440bytes 255 heads, 83 sectors/track, 7832 cylinders, total 125829120 sectors Units = 扇区 of 1 * 512 = 512bytes Sector size (logical/physical): 512bytes / 512bytes I/O size (minimum/optimal): 512bytes / 512bytes Disk identifier: 0x000ca15e 设备 启动 起点 终点 块数 Id 系统 /dev/sda3 161634816165829119209715282 Linux 交换 / Solaris

    • 1

    • 2

    • 32

    • 33

    可以看出,前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 20481616348158081638483 Linux /dev/sda3 161634816165829119209715282 Linux 交换 / Solaris

    • 1

    • 2


    • 14

    可以看出,新的分区信息建立完毕,主分区已经有了80G的空间了。但是,此时还没完全结束,还要把分区信息写入到分区表里去。5、分区信息写入分区表命令(输入 m 获取帮助): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed witherror16: 设备或资源忙. The kernel still uses the old table. The new table will be used at the next reboot orafter you run partprobe(8) or kpartx(8) Syncing disks.
    • 1

    2

    3
    • 4

    5

    • 6
    78
    • 9
    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 05.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 05.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 = 扇区 of1 * 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 20481635778558178790483 Linux /dev/sda3 163577856167772159209715282 Linux 交换 / Solaris
    • 1
    2
    • 3
    4
    • 5
    6
    • 7

    8

    9
    • 10
    11
    • 12
    1314
    • 15
    16
    • 17
    1819
    • 20
    21
    • 22
    23242526272829303132333435363738

    39

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

    搞定,收工!

  • 相关阅读:
    数组指针和指针数组的区别
    C++虚函数
    C++容器
    红黑树
    COM RTS/CTS, DTR/DSR
    linux和windows多线程的异同
    socket
    C++vector使用
    select函数详解
    linux下头文件
  • 原文地址:https://www.cnblogs.com/mohuishou-love/p/10090207.html
Copyright © 2011-2022 走看看