当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] KVM:如何扩展或缩小虚拟机磁盘大小?

作者:精品下载站 日期:2024-12-14 20:11:59 浏览:16 分类:玩电脑

KVM:如何扩展或缩小虚拟机磁盘大小?


在本文中,我们将讨论如何调整流行磁盘类型的 KVM 虚拟机磁盘大小。我们将展示如何在 Linux 上的 KVM 管理程序中正确增加虚拟机磁盘大小而不丢失数据,并讨论减少磁盘大小的选项。

如何增加/扩展 KVM 虚拟机磁盘大小?

在KVM上增加虚拟磁盘

让我们考虑一个增加 20GB 虚拟磁盘大小的示例。在更改虚拟磁盘设置之前关闭虚拟机。

要查看 KVM 虚拟机的虚拟磁盘设置,请使用以下命令:

qemu-img info /path_to_disk

你会看到这样的结果:

[玩转系统] KVM:如何扩展或缩小虚拟机磁盘大小?

我们看到有两个字段显示大小:virtual_size 和 disk_size:

  • virtual_size - 是创建或扩展磁盘时虚拟磁盘集的大小(在本例中,最大磁盘大小为20GB);

  • disk_size — 是磁盘文件的当前大小,即。即磁盘在物理服务器上占用了多少空间(仅适用于 qcow 磁盘格式)。在我们的示例中,虚拟磁盘仅占用 1.6GB 存储空间。

还有一些关于 KVM 磁盘类型(格式)的内容。我建议在 KVM 中创建虚拟机时使用 qcow2 而不是 raw。稍后我会解释原因。

在下一步中,我将把虚拟机的大小增加 5GB(为了正确扩展磁盘,虚拟机不能有任何快照!)。

# qemu-img resize /path to disk +5G
Image resized.

如果您检查虚拟磁盘设置,您会发现它已被扩展:

# qemu-img info /path_to_disk
image: /path_to_disk
file format: qcow2
virtual size: 25G (26843535600 bytes)
disk size: 1.6G
cluster_size: 65536
Format specific information:
compat: 0.10
refcount bits: 16

我们已经完成了部分工作,但我们还需要在虚拟机的来宾操作系统中进行一些操作。现在我们将展示如何扩展来宾 CentOS 7 和 Windows Server 2012 R2 中的磁盘大小。

如果您要在 KVM 管理程序中为 VM 添加另一个虚拟磁盘,

qemu-img

virsh

使用工具。

如何在运行 CentOS Linux 的虚拟机中扩展分区?

增加 KVM 服务器端的虚拟磁盘大小后,启动虚拟机并连接到它。我们将使用硬盘分区管理工具fdisk来扩展分区和文件系统大小。

通过 SSH 连接到 VM 来宾操作系统,并确保出现额外的 5 Gb 磁盘空间。

df -h
fdisk -l

[玩转系统] KVM:如何扩展或缩小虚拟机磁盘大小?

截图显示/dev/vda2大小为20GB,可用磁盘空间为25GB。

让我们将 /dev/vda2 扩展到最大可用大小:

# fdisk /dev/vda
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d
Partition number (1,2, default 2):
Partition 2 is deleted
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (2-4, default 2):
First sector (1050624-52428799, default 1050624):
Using default value 1050624
Last sector, +sectors or +size{K,M,G} (1050624-52428799, default 52428799):
Using default value 52428799
Partition 2 of type Linux and of size 24.5 GiB is set
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 or after you run partprobe(8) or kpartx(8)
Syncing disks.

然后重新启动虚拟机并运行将应用新磁盘大小的命令:

# xfs_growfs /dev/vda2
meta-data=/dev/vda2 isize=512 agcount=4, agsize=1277888 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=5111552, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 5111552 to 6422272
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 6.6M 489M 2% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda2 25G 1.3G 24G 6% /
/dev/vda1 488M 100M 353M 23% /boot
tmpfs 100M 0 100M 0% /run/user/0

这样我们就得到了一个扩展分区/dev/vda2。这就是我们所做的:

  • fdisk /dev/vda — 我们运行 fdisk 并连接到 /dev/vda;

  • /d — 我们删除了分区。默认情况下,它是我们需要的分区2,所以我们只需在下一项中按Enter键即可;

  • /n - 我们创建了一个新分区,然后按 Enter 或 p,然后再次按 Enter,因为我们尝试创建的分区默认为 2;

  • 当指定第一个和最后一个扇区时,如果您想将分区扩展到最大,我们也只需按 Enter 键即可。如果要设置具体大小,则在菜单中输入最后一个扇区的磁盘大小+size{K,M,G};

  • /w — 应用新设置。

VM 重新启动后,使用以下命令检查磁盘:

xfs_growfs /dev/vda2

一些来源建议使用以下命令:

resize2fs /dev/vda2

但它不适用于 XFS 文件系统!

因此,您已经扩展了运行 CentOS 7 的虚拟机上的磁盘大小。

如何增加来宾 Windows 服务器中的磁盘大小?

使用RDP或VNC连接到Windows Server虚拟机并扩展磁盘。

  1. 打开服务器管理器->工具->计算机管理;

  2. 在左侧窗格中选择存储 -> 磁盘管理。添加的所有磁盘分区和未分配空间都会出现;

    [玩转系统] KVM:如何扩展或缩小虚拟机磁盘大小?

  3. 选择需要增加的分区,点击扩展卷

    [玩转系统] KVM:如何扩展或缩小虚拟机磁盘大小?

  4. 默认情况下,将提供所有可用空间以增加磁盘大小;

    [玩转系统] KVM:如何扩展或缩小虚拟机磁盘大小?

  5. 单击“下一步”完成扩展。之后,分区的大小将会增加。

    [玩转系统] KVM:如何扩展或缩小虚拟机磁盘大小?

我想指出的是,在虚拟机磁盘扩展之前,我建议您备份虚拟磁盘。停止虚拟机并将磁盘映像复制到具有一些可用空间的备份目录。如果扩展过程中出现问题,您始终可以从备份中恢复虚拟磁盘映像。

如何减少KVM虚拟机的磁盘大小?

在我的工作中,我经常遇到这个问题,但不幸的是,您无法安全地减少 KVM 中虚拟机的磁盘大小。减少物理存储上的虚拟磁盘大小的唯一可接受的方法是转换磁盘。

网上有很多指南讲述如何减少 KVM 虚拟机中的磁盘空间,但这不起作用。

我将举一些我遇到和测试过的例子。

使用 Qemu 减少 KVM 磁盘大小

一些资源描述了您可以使用 qemu 工具执行的操作。他们提供使用以下命令来减少虚拟机磁盘空间:

qemu-img resize /path_to_disk -5G

— 将磁盘空间缩小 5G

或者使用以下选项设置特定虚拟磁盘大小:

qemu-img resize /path_to_disk 25G 

— 将磁盘大小设置为 25G

运行此命令后会发生什么?启动服务器后,系统无法启动:

Unable to verify superblock, continuing...
Sorry, could not find valid secondary superblock. Exiting now.

[玩转系统] KVM:如何扩展或缩小虚拟机磁盘大小?

我尝试先使用 fdisk 减小系统中的磁盘大小,但即使您跳过缩小物理服务器上的磁盘,系统也不会启动。这是非常合乎逻辑的。我们尝试减少的分区是系统分区,操作系统将无法启动,因为在尝试减少其大小时,其上的信息显然会被擦除。

使用映像替换减小虚拟磁盘大小

这些指南中不太受欢迎的变体是使用磁盘更换来减少磁盘空间。这意味着您创建了一个具有所需磁盘大小的新虚拟机。然后,您将新的磁盘映像替换为旧的磁盘映像,它会根据不同来源的描述进行工作。我检查了这个方法,文件系统变得无法操作,就像之前的变体一样。以下是该命令的示例:

virt-resize /old_disk_image /new_disk_image

还有一些方法使用从原始格式到 qcow2 格式的磁盘转换,但我最初以这种格式创建机器,这里是我这样做的解释。

KVM 磁盘格式和 QCOW2 磁盘压缩

在文章开头我提到了这两种磁盘格式:raw 和 qcow。

原始优势是最大的性能和通用性。但它也有很多缺点,主要是:

  • 虚拟磁盘文件占用了物理服务器上分配给它的所有空间;

  • 您无法拍摄快照。

Qcow2 是原生 QEMU 和 QEMU-KVM 虚拟机管理程序格式。它是 KVM 支持的所有其他格式中最方便的虚拟磁盘格式。磁盘镜像随着虚拟机中数据的积累而增加,并且支持快照。

qcow2有什么优点?您无需减小虚拟磁盘的大小,因为它仅在服务器存储上占用所需的空间。如果您的服务器上的数据不断被覆盖,并且磁盘已经膨胀,您可以轻松地压缩它。让我们考虑一下这个选项。我将用零填充一些虚拟磁盘空间,然后删除该文件:

dd if=/dev/zero of=/mytempfile
rm -rf /mytempfile

[玩转系统] KVM:如何扩展或缩小虚拟机磁盘大小?

从服务器上查看,之前磁盘镜像的大小是2.4G,后来变成了5.9G:

# du -sh /image_path
2.4G *****

# du -sh /图像路径

5.9G *****

这意味着删除虚拟机中的信息后,虚拟磁盘大小并没有缩小。为了使虚拟磁盘文件能够获得其实际大小,我使用以下方法:

备份虚拟磁盘文件,停止虚拟机,然后执行以下步骤:

qemu-img convert -O qcow2 /old_image /new_image

然后您可以比较两个磁盘的大小:

# du -sh /new_disk
1.6G /****
# du -sh /old_disk
5.8G /****

可以看到,压缩后的磁盘大小为1.6G。根据需要重命名新的磁盘映像文件并启动虚拟机:

# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 6.6M 489M 2% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda2 25G 1.3G 24G 6% /
/dev/vda1 488M 100M 353M 23% /boot
tmpfs 100M 0 100M 0% /run/user/0

这个方法有效。我一直使用它,没有出现过虚拟机中的文件系统出现故障的情况。但我强烈建议在执行任何操作之前备份磁盘,以免丢失任何数据。

这就是我在这篇文章中想要讲述的全部内容。如果本网站的任何访问者知道任何其他真正可行的方法来减少 KVM 上的磁盘大小(不是压缩),请在此处描述它们,我将测试它们。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯