我在具有最初6GB磁盘空间的CentOS KVM主机上设置了一个Ubuntu来宾。如何从命令行增加Ubuntu guest虚拟机的磁盘空间?

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

评论

在线调整大小:serverfault.com/a/952868/30946

#1 楼


停止VM
运行qemu-img resize vmdisk.img +10G以将映像大小增加10Gb
启动VM,正常调整其内分区和LVM结构的大小


评论


用于在RHEL6.6上调整我的* .qcow2 img的大小。谢谢!

–雅各布·古尔登(Jacob Goulden)
15年3月12日在17:54

启动虚拟机,正常调整其中的分区和LVM结构的大小该怎么做?请解释一下。

– Waki
15年7月2日在19:17

您不可能将所有东西都放在盘子上。如果您尝试调整分区或LV的大小而失败,请打开一个新问题,描述您尝试过的内容以及不起作用的内容

–dyasny
15年7月2日在22:43

要调整分区和LVM的大小,请按照这篇出色的文章中所述的所有步骤进行操作:sandilands.info/sgordon/…

– skonsoft
16年7月3日在18:55

您为什么不只使用1.解决问题?模糊的部分是3 ....你在跟我开玩笑吗?

– d9ngle
20年5月4日15:47

#2 楼

联机方法(使用qemu,libvirt和virtio-block)

无论安装了目标虚拟磁盘,无论情况好坏,下面的命令都将运行。这在无法卸载磁盘(例如根分区),VM必须保留且系统所有者愿意承担数据损坏风险的环境中很有用。要消除这种风险,您需要先登录VM并卸载目标磁盘,但这并不总是可能的。

从KVM虚拟机管理程序执行以下操作。



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

qemu-img resize <my_vm>.img +10G



获取通过libvirt外壳(在此示例中为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



,然后登录到VM。运行dmesg应该报告virtio磁盘检测到容量更改。此时,请继续并根据需要调整分区和LVM结构的大小。

评论


qemu-img的手册页(日期为2016-05-08)说:“警告:切勿使用qemu-img来修改正在运行的虚拟机或任何其他进程正在使用的映像;这可能会损坏映像。此外,请注意,查询被另一个进程修改的图像可能会遇到不一致的状态。”因此,我不确定在虚拟机仍在运行时(第一步)是否安全。

–user44400
17年5月30日在7:51



在centos7 + kvm上不起作用

– e-info128
17/12/27在13:27

这对我来说非常有效。使用ceph和virtio块设备。我们将应用程序数据/ MySQL db存储在单独的分区上。停止应用程序访问此分区。卸下它。调整大小。 fsck。然后重新安装新的尺寸。无需关机。

–nelaaro
18年4月30日在14:44

与此答案相同,但使用libvirt而不是监视器控制台:serverfault.com/a/952868/30946

– Mircea Vutcovici
19年2月9日在17:18

#3 楼

这些serverfault问题类似,但更具体,KVM在线磁盘大小是否调整? &Centos Xen调整DomU分区和卷组的大小。第一个询问如何在线增加KVM guest虚拟机的问题,第二个询问使用LVM的XEN专用。我在问KVM离线时如何完成此操作。

注意:此链接对方法1有用,并显示了如何完成增加KVM的磁盘空间(基于ext3),方法:调整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手动启动文件,然后将现有分区扩展到新添加的磁盘空间中。最后一步基本上扩展了OS分区,以便可以利用额外的空间。

方法2:分区基于LVM

这里是我大致介绍的步骤然后调整内部使用LVM的KVM guest虚拟机的大小。


关闭VM
为guest虚拟机的“映像文件”添加更多空间(例如:cat old.img 10G_addon。原始>> new.img
启动VM(使用新创建的new.img)

在VM内部运行fdisk并删除并重新创建LVM分区

% 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.
%


重新启动VM

调整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.



以上是我的例子,但我遵循了此网站上的步骤

评论


这篇文章中的方法1似乎效果不佳-戴红色帽子的虚拟机管理器此后未报告新大小。在这方面,@ dyasny建议的方法至少效果更好。

–伊万·奥坎普
2014年5月30日晚上8:36

@IwanAucamp-有趣的是,在将KVM服务器迁移到KVM的较新版本(CentOS 5-> CentOS 6)之前,我使用virt-manager并广泛使用了方法#1和#2。我现在也使用qemu-img调整大小方法。

–slm
2014年5月30日晚上11:53

对于方法2,您可能会在步骤7中找到lvextend handier:lvextend / dev / Volgroup / lvname / dev / vda2(全部在一行上,其中/ dev / vda2是您的物理卷)。如果没有其他选择,它将使用该卷组中的最大大小。

– Mike S
2015年5月5日18:42



如果分区表中有逻辑卷,则方法2,步骤4将不起作用。重新分区的扩展类型后,第一个可用扇区将不再与更改前的扇区匹配。例如。如果逻辑分区的第一个扇区为1001472,则更改后为1003518(假设大小调整前为10G,调整后为50G)。有人知道如何在同一第一个扇区上尽可能重建逻辑卷吗?

– ILIV
16年11月17日在17:18

这是由于fdisk在默认情况下将对齐约束(1MB步骤)应用于分区。要解决此问题,请接受默认值1003518,进入专家模式(x),然后选择b并将第一个扇区设置为1001472。有关详细信息,请参见unix.stackexchange.com/a/320447。

– ILIV
16年11月17日在18:06

#4 楼

一步来调整和扩展内部分区

我有一台带有qcow2 guest虚拟机文件映像的Ubuntu主机,想要一步调整磁盘大小并扩展适当的分区。它要求您设置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)关闭来宾:

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

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

3)创建新文件(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虚拟机并仔细测试新磁盘文件,然后再删除原始文件

7)利润!

评论


就我而言,这几乎可以完成工作。可悲的是,几乎。重新启动客户机(CentOS 7服务器)后,它会发现扩展磁盘无法启动。

–Urhixidur
16-10-14在19:08

对我来说很棒。省略-o preallocation = metadata将创建一个稀疏文件。使用该选项,它将预分配整个大小。

–丹尼斯·威廉姆森
16 Dec 14'1:28

太好了,这个答案对我很重要。非常感谢!不幸的是,libguestfs的“官方”文档(libguestfs.org/virt-resize.1.html)编写得不好,最终导致混乱。

–贝罗
17年8月16日在14:27

对我来说效果很好,请记住,您实际上不需要使用-o preallocation = metadata,如果不需要,则也应跳过截断步骤。无论如何,virt-resize都会适当增加文件。

–amoe
17年11月13日在16:29

#5 楼

可以在线调整大小。 libvirtd本身支持此功能:
查找块设备名称。应该是类似“ vda”的东西
$ virsh domblklist <libvirtd_vm_name>

调整虚拟设备的大小:
$ virsh blockresize --domain <libvirtd_vm_name> --path <block_device_name> --size <new_size>

这里是一个示例,我将vda50GB磁盘扩展到51GB VM的undercloud。 />
[root@localhost ~]# virsh domblklist undercloud
Target     Source
------------------------------------------------
vda        /home/images/undercloud.qcow2

现在看一下.qcow2图像文件的详细信息:
[root@localhost ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 50G (53687091200 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

现在让我们调整vda块设备的大小:
[root@localhost ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized

并确认:
/>
[root@localhost ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 51G (54760833024 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
[root@localhost ~]#

然后您可以在VM中使用此脚本来显示用于调整块设备和fs大小的命令:https://github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh。

#6 楼

如果要在VM中使用LVM,最简单的方法是在VM中添加新的虚拟磁盘,然后在其上扩展卷组和逻辑卷。

检查是否正在使用LVM运行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


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

如果VM中使用了LV :


关闭VM
在主机上创建一个新的虚拟磁盘文件并将其添加到VM
重新启动VM并登录
将新驱动器作为具有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名称与我的示例相同,这不太可能,请适当更改,如果VM已经有一个名为vdb的虚拟驱动器,则新的虚拟驱动器将是其他名称(vdc,依此类推)

注意:resize2fs仅适用于ext2,ext3和ext4文件系统。如果您使用的是其他东西,它将出错并且不执行任何操作。

注意:由于您要调整实时文件系统的大小,因此resize2fs不会像未卸载的文件系统那样提示您首先运行fsck。前进吧。您可能要运行只读文件系统检查,然后再进行操作。

评论


也可以使用非常不错的centos.org/docs/5/html/Deployment_Guide-zh-CN/US的GUI来完成...

– Nux
13年6月7日在16:13

#7 楼

如果使用virtio驱动器和LVM,则可以在不重新引导VM的情况下增加VM磁盘的大小。


使用virt-manager或virsh定义新的空磁盘
内核应该看到一个新的/ dev / vdb
(可选)使用fdisk创建一个主分区以获取/ dev / vdb1,然后使用kpartx -a / dev / vdb重新读取分区表。
使用vgextend vg_name / dev / vdb1(如果未创建分区,则使用/ dev / vdb)
使用lvextend -l + 100%FREE / dev / vg_name / lv_name
使用resize2fs / dev / vg_name / lv_name扩展文件系统

您已完成。

评论


我要补充一点,libguestfs.org/virt-resize.1.html也应该有所帮助。

–FearlessFuture
2015年11月12日17:49



#8 楼

这样,您可以扩展所需的分区:

    # 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


在此处查看更多示例。

#9 楼

完成此操作的另一种方法

truncate -s +2G vm1.img 


进入重新扫描磁盘的步骤,然后可以调整lvm的大小。

#10 楼

如果您的VM中有LVM,那么这非常容易且快捷。


关闭VM(来宾计算机)。
在主机中添加新的存储设备。
打开来宾。
打开系统->管理->逻辑卷管理(或在终端中键入sudo system-config-lvm)*。

我发现GU​​I非常直观,但是如果您这样做,请按照以下步骤操作遇到问题。


打开“未初始化的实体”并找到新的驱动器。
选择新的驱动器后,在图像下方应找到一个初始化按钮。按下它。
它将询问您有关分区的信息-您不需要它。
完成后,将驱动器添加到现有的卷组中。
最后,您需要增加逻辑卷-这是通过编辑卷的属性在组的“逻辑视图”中完成的。
保存并完成。无需重新启动VM。

注意!至少默认情况下未安装CentOS 6 LVM GUI,但是您可以使用yum install system-config-lvm进行安装。

#11 楼


关闭VM

调整图像大小:

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时parted修复不起作用(例如,使用Vagrant进行配置时),所以我使用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]\+\).*//p'
i
EOF
)

gdisk $MY_DRIVE <<EOF
d
n

$MY_PARTITION_FIRST_SECTOR


x
a
2

c
$MY_PARTITION_GUID
w
Y
EOF


x a 2 <Enter>部分是可选的,如果您使用的是旧版BIOS,则该部分是必需的。
MY_PARTITION_GUID=...c $MY_PARTITION_GUID部件也是可选的,并且仅当在/etc/fstab或其他地方使用分区UUID时才需要。

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

扩展分区,例如ext2ext3ext4的示例:

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




#12 楼

您可以在已挂载gparted的情况下使用solus vm。与gparted一起使用后,您可以轻松启动系统并调整空间。确保设置了正确的启动优先级。作为参考,请参考以下可能方便的网址。
https://greencloudvps.com/knowledgebase/11/How-to-Extend-the-Hard-drive-on-KVM-after-upgradeing-VPS .html