如何增加KVM客户机的磁盘空间?

我在一台CentOS KVM主机上安装了一个最初6GB磁盘空间的Ubuntu guest虚拟机。 我如何去从命令行增加Ubuntu客户的磁盘空间?

编辑#1:我正在使用磁盘映像文件(qemu)。

    1. 停止虚拟机
    2. 运行qemu-img resize vmdisk.img +10G将图像大小增加10Gb
    3. 启动虚拟机,正常调整其中的分区和LVM结构

    这些服务器故障的问题是类似的,但更具体的, KVM在线磁盘resize? Centos Xen调整DomU分区和卷组的大小 。 第一个问题是如何在线上增加KVM客户端,第二个是使用LVM的XEN。 我在问KVM离线时如何做到这一点。

    注意:这个链接对于方法#1很有用,并且展示了如何实现增加KVM的磁盘空间(基于ext3), HOWTO:调整KVM虚拟机镜像的大小 。

    有一点需要注意的是,KVM guest虚拟机的内部分区可以影响你使用哪种方法增加磁盘空间。

    方法#1:分区是基于ext2 / ext3 / ext4的

    这种方法的坚果如下:

     # 1. stop the VM # 2. move the current image mv mykvm.img mykvm.img.bak # 3. create a new image qemu-img create -f raw addon.raw 30G # 4. concatenate the 2 images cat mykvm.img.bak addon.raw >> mykvm.img 

    现在使用更大的mykvm.img文件,引导gparted并将现有分区扩展到新添加的磁盘空间。 这最后一步基本上扩展了操作系统分区,以便它可以利用额外的空间。

    方法#2:分区是基于LVM的

    以下是我粗略遵循的步骤来调整内部使用LVM的KVM来宾的大小。

    1. closuresVM
    2. 给客人的“图像文件”添加更多的空间(如:cat old.img 10G_addon.raw >> new.img
    3. 启动虚拟机(使用新创build的new.img)
    4. 在虚拟机内部运行fdisk并删除并重新创buildLVM分区

       % fdisk /dev/vda ... Device Boot Start End Blocks Id System /dev/vda1 * 1 13 104391 83 Linux /dev/vda2 14 3263 26105625 8e Linux LVM Command (m for help): d Partition number (1-4): 2 Command (m for help): p Disk /dev/vda: 48.3 GB, 48318382080 bytes 255 heads, 63 sectors/track, 5874 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/vda1 * 1 13 104391 83 Linux Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (14-5874, default 14): 14 Last cylinder or +size or +sizeM or +sizeK (14-5874, default 5874): Using default value 5874 Command (m for help): p Disk /dev/vda: 48.3 GB, 48318382080 bytes 255 heads, 63 sectors/track, 5874 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/vda1 * 1 13 104391 83 Linux /dev/vda2 14 5874 47078482+ 83 Linux Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 8e Changed system type of partition 2 to 8e (Linux LVM) Command (m for help): p Disk /dev/vda: 48.3 GB, 48318382080 bytes 255 heads, 63 sectors/track, 5874 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/vda1 * 1 13 104391 83 Linux /dev/vda2 14 5874 47078482+ 8e Linux LVM Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks. % 
    5. 重启虚拟机

    6. 调整LVM物理卷的大小

       % pvdisplay --- Physical volume --- PV Name /dev/vda2 VG Name VolGroup00 PV Size 24.90 GB / not usable 21.59 MB Allocatable yes (but full) PE Size (KByte) 32768 Total PE 796 Free PE 0 ... % pvresize /dev/vda2 % pvdisplay --- Physical volume --- PV Name /dev/vda2 VG Name VolGroup00 PV Size 44.90 GB / not usable 22.89 MB Allocatable yes PE Size (KByte) 32768 Total PE 1436 Free PE 640 ... 
    7. 调整LVM逻辑卷的大小

        % lvresize /dev/VolGroup00/LogVol00 -l +640 Extending logical volume LogVol00 to 43.88 GB Logical volume LogVol00 successfully resized 
    8. 增长文件系统

        % resize2fs /dev/VolGroup00/LogVol00 resize2fs 1.39 (29-May-2006) Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required Performing an on-line resize of /dev/VolGroup00/LogVol00 to 11501568 (4k) blocks. The filesystem on /dev/VolGroup00/LogVol00 is now 11501568 blocks long. 

    以上是我的例子,但我遵循这个网站上的步骤

    在线方法(使用qemu,libvirt和virtio-block)

    从KVMpipe理程序执行以下操作。

    1. 增加磁盘映像文件本身的大小(指定增加的数量):

       qemu-img resize <my_vm>.img +10G 
    2. 通过libvirt shell(在本例中为drive-virtio-disk0 )获取virtio设备的名称:

       virsh qemu-monitor-command <my_vm> info block --hmp drive-virtio-disk0: removable=0 io-status=ok file=/var/lib/libvirt/images/<my_vm>.img ro=0 drv=raw encrypted=0 drive-ide0-1-0: removable=1 locked=0 tray-open=0 io-status=ok [not inserted] 
    3. 指示virtio驱动程序检测新的大小(指定新的总容量):

       virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp 

    然后login到虚拟机。 运行dmesg应报告virtio磁盘检测到容量更改。 此时,请根据需要调整分区和LVM结构的大小。

    一步调整和扩大内部分区

    我有一个Ubuntu主机与qcow2客人文件图像,并希望resize的磁盘,并扩大适当的分区一步到位。 它需要你设置libvirt guest文件系统实用程序,但是这些实用程序是有用的。

    从这里启发: http : //libguestfs.org/virt-resize.1.html

    这里的关键命令是: virt-resize

    • 这是一个libvirt实用程序
    • 它可以扩展客户磁盘并一步扩展分区
    • 它复制磁盘,它不会就地扩展它
      • 这是很好的,因为你有原始的原始备份

    制备:

     * Install libvirt file system utilities package * sudo apt-get install libguestfs-tools * Test to see if it works (it won't) -- you need to see "===== TEST FINISHED OK =====" at the bottom: * sudo libguestfs-test-tool * If you don't see "===== TEST FINISHED OK =====" at the bottom then repair it: * sudo update-guestfs-appliance * Run the test again and verify it works * sudo libguestfs-test-tool 

    现在执行以下操作:

    1)closures客人:

    2)检查当前的大小,并使用libvirt实用程序查看要扩展的分区名称:

    sudo virt-filesystems --long --parts --blkdevs -h -a name-of-guest-disk-file

    3)创build新的(40G)输出磁盘:

     qcow: sudo qemu-img create -f qcow2 -o preallocation=metadata outdisk 40G img: sudo truncate -s 40G outdisk 

    4)在扩展适当的分区时(假设你的步骤2的磁盘分区是/ dev / sda1),将旧的复制到新的分区:

     sudo virt-resize --expand /dev/sda1 indisk outdisk 

    5)将indisk文件重命名为备份,将outdisk重命名为indisk(或者修改guest XML)

    6)在删除原始文件之前,重新启动guest虚拟机并仔细testing新的磁盘文件

    7)利润!

    如果您在VM内使用LVM,最简单的方法是将新的虚拟磁盘添加到VM,并将卷组和逻辑卷扩展到VM上。

    要检查你是否使用LVM运行sudo pvs; sudo vgs; sudo lvs sudo pvs; sudo vgs; sudo lvs sudo pvs; sudo vgs; sudo lvs ,你会得到这样的东西:

     PV VG Fmt Attr PSize PFree /dev/vda1 vgWWW lvm2 a- 30.00g 0 VG #PV #LV #SN Attr VSize VFree vgWWW 1 2 0 wz--n- 30.00g 0 LV VG Attr LSize root vgWWW -wi-ao 28.80g swap vgWWW -wi-ao 1.19g 

    如果虚拟机的操作系统正在使用LVM。 在上面的示例中,虚拟机具有一个30G字节的虚拟磁盘,使用LVMconfiguration一个名为vgWWW的卷组,其中包含两个逻辑卷,一个用于交换,另一个用于其他所有卷。

    如果虚拟机中正在使用LV:

    1. closures虚拟机
    2. 在主机上创build一个新的虚拟磁盘文件并将其添加到虚拟机
    3. 重新启动虚拟机并login
    4. 使用sudo pvcreate /dev/vdb将新驱动器标记为LVM的物理卷
    5. 使用sudo vgextend vgWWW /dev/vdb扩展卷组以包含此新磁盘块
    6. 使用sudo lvextend --extents +100%FREE /dev/vgWWW/root (或类似sudo lvextend --size +8G /dev/vgWWW/root东西)来扩展逻辑卷以占据新的空间一路增长,这个例子会增加8Gb的音量)
    7. 使用resize2fs /dev/vgWWW/root调整文件系统的大小

    注意:上面假设vg / lv的名字和我的例子是一样的,不太可能,根据情况改变,如果虚拟机已经有一个名为vdb的虚拟驱动器,那么新的虚拟驱动器就是其他的东西( vdc等等)

    注意: resize2fs只能在ext2,ext3和ext4文件系统上运行。 如果你正在使用别的东西,它会出错,什么都不做。

    注意:当您调整实时文件系统的大小时, resize2fs不会提示您首先运行fsck因为它会针对卸载的文件系统运行,只会继续。 在继续操作之前,您可能需要运行只读文件系统检查。

    如果您使用的是virtio驱动器和LVM,则有可能在不重新启动VM的情况下增加虚拟机磁盘的大小。

    1. 使用virt-manager或virsh来定义一个新的空盘
    2. 内核应该看到一个新的/ dev / vdb
    3. (可选)使用fdisk创build主分区以获取/ dev / vdb1,然后使用kpartx -a / dev / vdb重新读取分区表

    4. 使用vgextend vg_name / dev / vdb1(或/ dev / vdb如果您没有创build分区)

    5. 使用lvextend -l + 100%FREE / dev / vg_name / lv_name
    6. 使用resize2fs / dev / vg_name / lv_name来扩展你的文件系统

    你完成了。

    这样你可以扩展你想要的分区:

      # see what partitions you have? virt-filesystems --long -h --all -a olddisk truncate -r olddisk newdisk truncate -s +5G newdisk # Note "/dev/sda2" is a partition inside the "olddisk" file. virt-resize --expand /dev/sda2 olddisk newdisk 

    看到更多的例子。

    如果你的虚拟机中有LVM,那么这是非常简单和快速的。

    1. closures虚拟机(来宾机器)。
    2. 在你的主机上添加新的存储设备。
    3. 打开客人。
    4. 打开系统 – >pipe理 – > 逻辑卷pipe理 (或在terminalinputsudo system-config-lvm )*。

    我发现GU​​I非常直观,但如果遇到问题,请按照下一步操作。

    1. 打开“未初始化的实体”,find你的新驱动器。
    2. select新的驱动器后,在图像下面你应该find一个初始化button。 按下它。
    3. 它会问你分区 – 你不需要它。
    4. 完成后,将驱动器添加到现有的卷组中。
    5. 最后,您需要增加您的逻辑卷 – 这是通过编辑卷的属性在组的逻辑视图中完成的。
    6. 保存并完成。 无需重启虚拟机。

    注意! 至less在CentOS 6 LVM GUI上默认没有安装,但是你可以用yum install system-config-lvm来安装它。

    另一种方法来做到这一点

     truncate -s +2G vm1.img 

    在进行磁盘重新扫描后,你可以做你的lvmresize。

    1. closuresVM
    2. 调整图片大小:

       qemu-img resize vmdisk.img +16G 

      将图像大小增加16 GB。

    3. 如果您的映像具有GPT(GUID分区表),那么GPT中使用的驱动器大小将与新大小不同,您需要使用gdisk修复它:

       MY_DRIVE=/dev/vda gdisk $MY_DRIVE <<EOF w Y Y EOF 

      parted

       parted $MY_DRIVE print Fix 

      出于某种原因,在没有提供tty的情况下(例如使用Vagrant进行configuration时), parted修复程序不工作,因此我使用gdisk

    4. 增加分区大小以填充所有可用空间:

       MY_PARTITION_GUID=$( gdisk $MY_DRIVE <<EOF | sed -n -e 's/^Partition unique GUID: //p' i EOF ) MY_PARTITION_FIRST_SECTOR=$( gdisk $MY_DRIVE <<EOF | sed -n -e 's/^First sector: \([0-9]\+\).*/\1/p' i EOF ) gdisk $MY_DRIVE <<EOF d n $MY_PARTITION_FIRST_SECTOR x a 2 c $MY_PARTITION_GUID w Y EOF 

      xa 2 <Enter>部分是可选的,如果您使用的是传统BIOS,则需要使用该部分。 MY_PARTITION_GUID=...c $MY_PARTITION_GUID部分也是可选的,只有在/etc/fstab或其他地方使用分区UUID时才需要。

    5. 使用partx -u $MY_DRIVEpartprobe重新启动或重新读取分区。

    6. 扩展分区,例如ext2ext3ext4

       MY_PARTITION="${MY_DRIVE}1" resize2fs $MY_PARTITION 

    您可以使用gparted安装的solus vm。 一旦与gparted一起使用,您可以轻松启动系统并调整空间。 确保你有正确的启动优先级设置。 作为参考,请参阅下面的URL可以来得心应手。 https://greencloudvps.com/knowledgebase/11/How-to-Extend-the-Hard-drive-on-KVM-after-upgrading-VPS.html