我在一台CentOS KVM主机上安装了一个最初6GB磁盘空间的Ubuntu guest虚拟机。 我如何去从命令行增加Ubuntu客户的磁盘空间?
编辑#1:我正在使用磁盘映像文件(qemu)。
qemu-img resize vmdisk.img +10G
将图像大小增加10Gb 这些服务器故障的问题是类似的,但更具体的, 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来宾的大小。
在虚拟机内部运行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. %
重启虚拟机
调整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 ...
调整LVM逻辑卷的大小
% lvresize /dev/VolGroup00/LogVol00 -l +640 Extending logical volume LogVol00 to 43.88 GB Logical volume LogVol00 successfully resized
增长文件系统
% 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.
以上是我的例子,但我遵循这个网站上的步骤
从KVMpipe理程序执行以下操作。
增加磁盘映像文件本身的大小(指定增加的数量):
qemu-img resize <my_vm>.img +10G
通过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]
指示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
制备:
* 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:
sudo pvcreate /dev/vdb
将新驱动器标记为LVM的物理卷 sudo vgextend vgWWW /dev/vdb
扩展卷组以包含此新磁盘块 sudo lvextend --extents +100%FREE /dev/vgWWW/root
(或类似sudo lvextend --size +8G /dev/vgWWW/root
东西)来扩展逻辑卷以占据新的空间一路增长,这个例子会增加8Gb的音量) resize2fs /dev/vgWWW/root
调整文件系统的大小 注意:上面假设vg / lv的名字和我的例子是一样的,不太可能,根据情况改变,如果虚拟机已经有一个名为vdb
的虚拟驱动器,那么新的虚拟驱动器就是其他的东西( vdc
等等)
注意: resize2fs
只能在ext2,ext3和ext4文件系统上运行。 如果你正在使用别的东西,它会出错,什么都不做。
注意:当您调整实时文件系统的大小时, resize2fs
不会提示您首先运行fsck
因为它会针对卸载的文件系统运行,只会继续。 在继续操作之前,您可能需要运行只读文件系统检查。
如果您使用的是virtio驱动器和LVM,则有可能在不重新启动VM的情况下增加虚拟机磁盘的大小。
(可选)使用fdisk创build主分区以获取/ dev / vdb1,然后使用kpartx -a / dev / vdb重新读取分区表
使用vgextend vg_name / dev / vdb1(或/ dev / vdb如果您没有创build分区)
你完成了。
这样你可以扩展你想要的分区:
# 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,那么这是非常简单和快速的。
sudo system-config-lvm
)*。 我发现GUI非常直观,但如果遇到问题,请按照下一步操作。
注意! 至less在CentOS 6 LVM GUI上默认没有安装,但是你可以用yum install system-config-lvm
来安装它。
另一种方法来做到这一点
truncate -s +2G vm1.img
在进行磁盘重新扫描后,你可以做你的lvmresize。
调整图片大小:
qemu-img resize vmdisk.img +16G
将图像大小增加16 GB。
如果您的映像具有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
。
增加分区大小以填充所有可用空间:
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时才需要。
使用partx -u $MY_DRIVE
或partprobe
重新启动或重新读取分区。
扩展分区,例如ext2
, ext3
或ext4
:
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