zoukankan      html  css  js  c++  java
  • [转]调整 VirtualBox 虚拟机的磁盘大小

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

    使用 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:AppsOracleVirtualBoxVBoxManage.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:AppsOracleVirtualBoxVBoxManage.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/>。转载请保留此信息及相应链接。

  • 相关阅读:
    OpenCV4学习笔记(1.0)换一种方式从源码编译、安装 | OpenCV4.3.0以及Contrib | Win10 | CMakeGUI | VS2019 | HTTP代理
    Dapr初体验之服务调用
    Dapr初体验之Hello World
    adb shell input text 中文输入方法
    记一次Mongodb数据库查询之包含所有指定元素的数组或者都在指定元素的数组中 du
    CentOS 7.2 内核3升级到4或者5
    pv
    静态 pv 和动态 pv
    k8s 编写 yaml 文件格式
    把刚升级完成的内核设置成默认启动
  • 原文地址:https://www.cnblogs.com/freeliver54/p/10481679.html
Copyright © 2011-2022 走看看