oracle vm virtualbox 增加硬盘空间,调整 VirtualBox 虚拟机的磁盘大小

使用 VM VirtualBox 创建了一个 CentOS 虚拟机,划分了 3GB 的磁盘空间,使用了动态分配存储的方式,文件系统为 LVM。折腾了一段时间之后,却发现磁盘容量不够了。读了一些资料之后,终于给 VirtualBox 的虚拟机增加了磁盘容量,并让 CentOS 的 LVM 将其利用上。

下面特地新建了一个磁盘大小为 3GB 的虚拟机,然后将其调整为 5GB,并记录了操作步骤。

先看看虚拟机中虚拟磁盘的的分区表:

# fdisk -l /dev/sda

Disk /dev/sda: 3221 MB, 3221225472 bytes

255 heads, 63 sectors/track, 391 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00052338

Device Boot Start End Blocks Id System

/dev/sda1 * 1 64 512000 83 Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2 64 392 2632704 8e Linux LVM

Partition 2 does not end on cylinder boundary.

可以看到,磁盘总大小为 3221MB。

1. VirtualBox 的磁盘管理

下面使用 VirtualBox 的命令行将该虚拟机的磁盘分配从 3GB 调整为 5GB。

VirtualBox 的说明文档中明确给出了调整虚拟机磁盘大小的方法。

VBoxManage modifyhd |

[--type normal|writethrough|immutable|shareable|

readonly|multiattach]

[--autoreset on|off]

[--compact]

[--resize |--resizebyte ]

modifyhd 指令就是用来调整磁盘大小的。对象可以是虚拟机的 uuid,也可以直接指定要调整大小的虚拟机磁盘文件名(全路径)。需要注意的是,如果安装 VirtualBox 的时候没有将其路径添加到系统路径之中,运行命令行的时候需要指定路径,如,

C:\>D:\Apps\Oracle\VirtualBox\VBoxManage.exe modifyhd "D:\CentOS2.vdi" --resize 5120

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

上述指令将 D 盘根目录下的 CentOS2.vdi 这个虚拟机磁盘调整为(参数 –resize)5120,单位是 MB。

Linux 下的指令为,

$ VBoxManage modifyhd "/path/to/CentOS2.vdi" --resize 5120

如果想查看对应的 uuid,可以使用指令:

C:\>D:\Apps\Oracle\VirtualBox\VBoxManage.exe list hdds

UUID: 7a0b7b7a-298d-4fcf-b9d0-09ae2737441d

Parent UUID: base

Format: VDI

Location: D:\CentOS2.vdi

State: created

Type: normal

Usage: CentOSi (UUID: 34a666fa-24c9-4510-9cca-50e2a04c8e98)

调整虚拟磁盘大小的时候,虚拟机必须关闭!

以上指令在 64bit Windows 7 + VirtualBox 4.2.16 下测试过。另于20161219在 openSUSE Tumbleweed + VirtualBox 5.1.10 下测试过。不过要注意的是,如果该虚拟机有快照(snapshot),则只有在删除快照后才能在虚拟机客户系统里看到更改后的磁盘容量。

2. CentOS 的 LVM 管理

重新启动该虚拟机。再来看看磁盘情况:

# fdisk -l /dev/sda

Disk /dev/sda: 5368 MB, 5368709120 bytes

255 heads, 63 sectors/track, 652 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00052338

Device Boot Start End Blocks Id System

/dev/sda1 * 1 64 512000 83 Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2 64 392 2632704 8e Linux LVM

Partition 2 does not end on cylinder boundary.

现在,磁盘大小为 5368MB。磁盘占用情况为:

# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root

1.7G 1.5G 83M 95% /

tmpfs 250M 0 250M 0% /dev/shm

/dev/sda1 485M 117M 343M 26% /boot

试试看用 dd 命令创建一个大小为 1GB 的块文件:

# dd if=/dev/zero of=1.0G.img bs=1M count=1000

dd: writing `1.0G.img': No space left on device

1+0 records in

0+0 records out

8192 bytes (8.2 kB) copied, 0.00300509 s, 2.7 MB/s

提示说磁盘空间不足(No space left on device)。虽然我们给了虚拟机足够的空间,但是虚拟机里的系统(这里是 CentOS)并没有将这一部分空间利用上。可以看到,虚拟机里的磁盘空间只有 1.7G,原始分配的 3G 没有用完。这同时也说明,即使创建虚拟机的时候使用动态分配磁盘大小,虚拟机里的系统也并不会自动修改自己的磁盘。如果是正常使用,即使虚拟机的虚拟磁盘足够大,还是可能会在虚拟机中遇到磁盘空间不足的警告。

下面调整虚拟机操作系统的文件系统,使之将所有空间利用上。

A. 将空余磁盘创建为 sda3

重新启动虚拟机,登入 CentOS,使用 fdisk 将虚拟磁盘的空闲空间创建为一个新的分区。注意要使用代表 Linux LVM 的分区号 8e 来作为 ID。

# fdisk /dev/sda

n {new partition}

p {primary partition}

3 {partition number}

t {change partition id}

3 {partition number}

8e {Linux LVM partition}

w

上述命令执行后,可以使用

fdisk -l /dev/sda

来查看 sda3 是否成功创建并标记为 LVM,如果没有,则需要重新启动。可惜我忘记保存结果记录了。

reboot

B. 调整 LVM 大小

先看看当前 Volume Group:

# vgdisplay

--- Volume group ---

VG Name VolGroup

System ID

Format lvm2

Metadata Areas 1

Metadata Sequence No 3

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 2

Open LV 2

Max PV 0

Cur PV 1

Act PV 1

VG Size 2.51 GiB

PE Size 4.00 MiB

Total PE 642

Alloc PE / Size 642 / 2.51 GiB

Free PE / Size 0 / 0

VG UUID m42pDq-K830-cfly-cKR2-1AQF-IsyX-3X2ADy

名称为 VolGroup,可调整大小(resizable),当前大小为 2.51GB。活动的 LVM 卷有,

# lvscan

ACTIVE '/dev/VolGroup/lv_root' [1.67 GiB] inherit

ACTIVE '/dev/VolGroup/lv_swap' [856.00 MiB] inherit

先将分配过来的新磁盘空间创建为一个新的物理卷,

pvcreate /dev/sda3

然后使用新的物理卷来扩展 LVM 的 VolGroup,

# vgextend VolGroup /dev/sda3

No physical volume label read from /dev/sda3

Writing physical volume data to disk "/dev/sda3"

Physical volume "/dev/sda3" successfully created

Volume group "VolGroup" successfully extended

然后扩展 LVM 的逻辑卷 VolGroup-lv_root,

# lvextend /dev/VolGroup/lv_root /dev/sda3

Extending logical volume lv_root to 3.66 GiB

Logical volume lv_root successfully resized

最后,调整逻辑卷文件系统的大小,

resize2fs /dev/VolGroup/lv_root

resize2fs 1.41.12 (17-May-2010)

Filesystem at /dev/VolGroup/lv_root is mounted on /; on-line resizing required

old desc_blocks = 1, new_desc_blocks = 1

Performing an on-line resize of /dev/VolGroup/lv_root to 959488 (4k) blocks.

The filesystem on /dev/VolGroup/lv_root is now 959488 blocks long.

完成。看看效果:

# lvscan

ACTIVE '/dev/VolGroup/lv_root' [3.66 GiB] inherit

ACTIVE '/dev/VolGroup/lv_swap' [856.00 MiB] inherit

另外,几个有用的 LVM 指令(lvm2):

lvmdiskscan

vgdisplay

pvdisplay

lvdispay

vgcreate

pvcreate

lvscan

pvscan

vgscan

我这里用的是 CentOS 系统。如果是 Windows 就更简单了,可通过 Windows 的磁盘管理来重新调整分区大小以占用所有可用磁盘空间。©

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值