本文转自:https://cnzhx.net/blog/resizing-lvm-centos-virtualbox-guest/

发表于 2013-08-20 作者 H Zeng 
更新于 2016-12-19

使用 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         <uuid>|<filename>
[--type normal|writethrough|immutable|shareable|
readonly|multiattach]
[--autoreset on|off]
[--compact]
[--resize <megabytes>|--resizebyte <bytes>]

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 的磁盘管理来重新调整分区大小以占用所有可用磁盘空间。©

本文发表于水景一页。永久链接:<https://cnzhx.net/blog/resizing-lvm-centos-virtualbox-guest/>。转载请保留此信息及相应链接。

[转]调整 VirtualBox 虚拟机的磁盘大小的更多相关文章

  1. 增加VirtualBox虚拟机的磁盘空间大小(Host:Win7 VirtualBox5.0.16 VM:Win10)

    1 前言 网上关于增加VirtualBox虚拟机的磁盘空间大小的文章非常非常多,这里我之所以再写一篇,是因为在参照这些文章做的时候,由于VirtualBox的版本更新以及其他一些环境问题,碰到到一些问 ...

  2. 怎样调整XenServer下面Linux虚拟机的磁盘大小

    登录到XenServer. 修改虚拟机磁盘大小修改storage 磁盘大小 启动虚拟机 修改分区大小Hex code (type L to list codes): 8eChanged system ...

  3. 如何扩大VMware中的ubuntu虚拟机的磁盘大小

    我是在VMware中安装的ubuntu. 最近虚拟机磁盘空间不够,需要扩展,在虚拟机中设置了扩展20G,然后在ubuntu中发现扩展的20G并不能用.... 正确的扩展方法是: 1.先在虚拟机中的se ...

  4. 调整JVM虚拟机的内存大小

    jvm默认只有64M; public static void main(String[] args){ byte b[] = new byte[1024*1024*65];//此时会报内存溢出: } ...

  5. Vmvare扩展虚拟机磁盘大小

    Vmvare设置好虚拟机的磁盘大小之后,发现磁盘空间不够了,这个时候怎么扩展磁盘的大小呢? 首先,在确保虚拟机关闭的情况下,右键设置,选择硬盘,扩展,这样就可以增加磁盘的大小. 但是由于未进行分区和磁 ...

  6. 虚拟机ubuntu磁盘扩容

    1.虚拟机把磁盘大小进行改动 2.sudo apt-get install gparted 3.打开安装好的应用 4.进行分区改动 5.理论删除sda2和sda5重整后边即可,但此时sda2和sda5 ...

  7. 扩大VirtualBox虚拟机磁盘的方法

    之前在VirtualBox里安装了一个XP系统,当时只分配了10G磁盘空间,随着使用,空间不足了. 在虚拟机管理器里不能直接调整磁盘的大小,这里要用到VirtualBox安装目录下的VBoxManag ...

  8. virtualbox ubuntu 磁盘大小扩容

    前言 虚拟机软件: virtuabox 虚拟机运行的系统: Ubuntu 18.04.3 desktop 如果需要扩容的虚拟机在运行中,请将需要扩容的虚拟机进行关机 方法 先设置虚拟机的虚拟硬盘的大小 ...

  9. 调整ESX的VMFS磁盘格式的块大小,让单个虚拟磁盘支持更大容量

    调整ESX的VMFS磁盘格式的块大小,让单个虚拟磁盘支持更大容量 前因:客户搭建了VMware ESX企业版的测试平台:有一天接到一个需求,是测试数据库的,需要一个300G的磁盘. 解决过程: 1.按 ...

随机推荐

  1. ACM计划

    原文 :http://027xbc.blog.163.com/blog/static/128159658201141371343475/ ACM主要是考算法的,主要时间是花在思考算法上,不是花在写程序 ...

  2. angular-控制器

    controller 控制器 四.作用域:($rootScope)对整个页面相当于全局变量 也就是只要是用$rootScope定的东西它一定是作用于全局,而其它的只是对它控制器所在的那一部分 列如: ...

  3. SpringMVC拦截静态资源的处理办法

    SpringMVC拦截静态资源导致  JS  CSS  无法加载  可以在配置文件中加入以下代码 <mvc:resources location="/statices/" m ...

  4. Using iSCSI On Ubuntu 10.04 (Initiator And Target)

    This guide explains how you can set up an iSCSI target and an iSCSI initiator (client), both running ...

  5. 使用 VSTS 进行 CI 的过程中,无法识别 .NET Core 2.x 的情况处理

    大概是由于 .NET Core 2.1 还没有正式发布,使用 VSTS 进行持续集成(CI)的过程中,自动 Build 的环节无法识别 .NET Core 2.1 的框架,查看日志会提示如下错误: V ...

  6. Java学习图

  7. Cannot load php5apache2_4.dll into server

    配置PHP开发环境的时候,当进行到在Apache的httpd.conf文件中配置加载PHP模块时发生如下错误 httpd: Syntax error on line 185 of D:/wamp/Ap ...

  8. 第80节:Java中的MVC设计模式

    第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...

  9. 微信小程序内嵌网页的一些(最佳)实践

    前言 3 个月前,微信小程序推出了 web-view 组件引发了一波小高潮,笔者所在的大前端团队写过一篇浅析,详情可见:浅谈微信小程序前端生态. 我们曾大胆猜想,这一功能,可能直接导致小程序数量增长迎 ...

  10. 【hadoop】1、MapReduce进行日志分析,并排序统计结果

    1.网上很多关于搭建Hadoop集群的知识,这里不多做叙述,并且本机运行Hadoop程序是不需要hdfs集群的,我们本机运行只做个demo样式,当真的需要运行大数据的时候,才需要真正的集群 2.还有就 ...