微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

windows – 如何“真正”减少KVM VM映像的大小?

我花了很多时间在网上搜索如何缩小KVM虚拟磁盘映像,特别是对于 Windows客户,没有运气.

我发现的只是将虚拟机可用空间归零,对虚拟磁盘进行碎片整理(从Windows),然后运行qemu-img convert -c …(-c flag to compress).

我有一个Windows 7 VM,虚拟驱动器大小为100 GB.最初,此VDD在主机存储上花费了40 GB.一旦它被归零,VDD就会在主机上实现真正的100 GB.并且qemu-img -c …创建了91 GB,这与我的预期完全不同.

在现代网站上,我们可以下载小于10 GB的W7虚拟机,这怎么可能?有没有办法“真正”压缩VM映像?

感谢@dyasny,我用virt-sparsity做了一个小测试.我清理了W7 VM磁盘,禁用休眠,因此VDD仅消耗20 GB.再次降级磁盘,再次运行sdelete -z.使用–compress标志运行virt-sparsity可提供80 GB的虚拟驱动器.远非我所希望的.

编辑 – 2016年2月16日:
“刷新”这个问题,因为这里讨论的缩小VM的方法非常有效,但有一个主要缺点:它删除了所有VM快照.如果有人知道如何在保留快照的同时缩小虚拟机,请随时分享

要缩小Windows Guest OS,您必须缩小guest虚拟机中的分区,关闭VM,创建所需大小的新较小磁盘,将数据从旧磁盘复制到新的较小磁盘,交换磁盘名称并重新引导VM.

它很简单,但如果做得不当可能会导致数据丢失和头发丢失.

以下是使用QCOW2格式的KVM与100 GB的Windows Server 2012 guest虚拟机的步骤,我们希望将其缩小到35 GB.

重要信息:此方法不涉及修改虚拟机定义.相反,它只需要磁盘映像操作.

客人的假设:

> Guest是Windows Server 2012
> QCOW2格式的100 GB磁盘映像
>两个分区:

> 350 MB的启动
> 99.6 GB的C:驱动器,使用20 GB的空间

>我们希望将C:从99.6 GB缩小到34 GB

主持人的假设:

> Ubuntu 16 LTS服务器
> KVM(libvirt)
> 250 GB驱动器
>位于/ var / lib / libvirt / images中的虚拟映像

第1步:准备Windows Guest,缩减主C:分区

在这一步中,我们将直接从Windows减少我们的Windows分区.在此步骤结束时生成的磁盘映像将是启动分区,C:驱动器(简化)和我们将删除的剩余未使用空间(通过不将其复制到新磁盘)的总和.

>登录Windows Guest
>打开“计算机管理”实用程序,使用开始菜单搜索功能找到它.
>在左侧,单击“存储 – >磁盘管理”Storage Disk Management screenshot
>在新屏幕上,右键单击C:分区,单击“Shrink Volume …”,这会在对话框出现之前花一点时间.耐心点.
>出现“Shrink C:”对话框窗口后,在“要缩小的空间量”中输入空间量,使“收缩后的总大小(以MB为单位)”值接近所需的35 GB.然后单击“收缩”.

注意:如果新空间太小,您可能会收到错误消息,在这种情况下,您应该逐渐减少“缩小的空间量”1GB,直到错误消失并发生收缩.在实践中,我们希望保留10 GB的可用空间.

假设您能够将C:分区缩小到34 GB.
>完成后,通过打开命令提示符并键入:shutdown / s / t 0来关闭VM
>您的Windows客户已准备就绪.

第2步:收缩VM主机上的磁盘

该过程实际上不是缩小,而是我们将创建一个新的磁盘(最终大小),我们将从原始磁盘复制两个分区,并跳过未使用的空间.

目标是创建一个总大小=启动分区C:分区的磁盘.我们最终会得到一些微小的剩余空间(除非你的数学是完美的),不要担心,因为我们将在最后一步处理.

>登录linux主机
>切换到超级用户:sudo su
>转到存储虚拟映像的位置:cd / var / lib / libvirt / images
>列出文件:ls -l
>找到您的客人形象(其他地方的大量教程).我们假设我们的windows客户图像被称为“windows.qcow2”
>我们做一个备份:

mkdir backup
cp windows.qcow2 backup/windows.qcow2.bak

(去喝咖啡,因为大盘需要一段时间)
>安装您可能缺少的guestfs包:

apt-get install libguestfs-tools

>好的,让我们通过使用virt-filesystems探索windows映像来仔细检查我们的Windows磁盘:

virt-filesystems --long --parts --blkdevs -h -a windows.qcow2

输出这个:

Name       Type       MBR  Size  Parent 
/dev/sda1  partition  07   350M  /dev/sda
/dev/sda2  partition  07   34G   /dev/sda
/dev/sda   device     -    100G  -

请注意,我们的/ dev / sda1是我们的Windows启动分区350 MB,/ dev / sda2是我们的C:分区,现在是34 GB,总磁盘映像/ dev / sda /是100 G一堆空间来修剪.

所以这是重要的一步:算一算:34 G 350M适合35 G,因此我们将创建一个35 GB的图像.我们不可避免地会留下一些剩余的空间 – 除非你的数学是完美的 – 但不要担心,我们将在下面处理它.
>让我们创建一个新的虚拟QCOW2磁盘,我们称之为newdisk.qcow2,总大小为35 GB:

qemu-img create -f qcow2 -o preallocation=Metadata newdisk.qcow2 35G

哪个输出

Formatting 'newdisk.qcow2',fmt=qcow2 size=37580963840 encryption=off cluster_size=65536 preallocation=Metadata lazy_refcounts=off refcount_bits=16`

>让我们通过将旧磁盘复制到新分配的磁盘来调整磁盘大小.这是绝对棒的.大多数其他指南显示一些非常复杂的东西.这只是通过这个命令完成的,之后你应该去喝更多的咖啡 – 这可能需要一段时间:

virt-resize windows.qcow2 newdisk.qcow2`

输出这个:

[   0.0] Examining windows.qcow2
100% ?¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦? --:--
**********
Summary of changes:
/dev/sda1: This partition will be left alone.
/dev/sda2: This partition will be left alone.
There is a surplus of 439.8M.  An extra partition will be created for the surplus.
**********
[   8.8] Setting up initial partition table on newdisk.qcow2
[   9.9] copying /dev/sda1
100% ?¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦? 00:00
[  15.1] copying /dev/sda2
100% ?¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦? 00:00
Resize operation completed with no errors.  Before deleting the old disk,carefully check that the resized disk boots and works correctly.

请注意,该工具找到了多余的空间……回想一下关于Math的注释…所以你可以取消它并重新创建磁盘,或者像我们这样继续前进并像在STEP 3上那样扩展sda2分区.
>完成后.检查生成的图像:

virt-filesystems --long --parts --blkdevs -h -a newdisk.qcow2

输出这个:

Name       Type       MBR  Size  Parent
/dev/sda1  partition  07   350M  /dev/sda
/dev/sda2  partition  07   34G   /dev/sda
/dev/sda3  partition  83  439.8M   /dev/sda
/dev/sda   device     -    35G  -

注意/ dev / sda3的类型是什么类型的linux for the laftover space.剩下的空间没问题,除非你的数学运算完全正确.我们将在下面进一步介绍来自windows guest的额外分区.现在,请忽略它.
>交换磁盘映像:

mv windows.qcow2 backup/
mv newdisk.qcow2 windows.qcow2

>启动您的VM.

第3步:完成Window Guest上的磁盘操作

在这一步中,我们确认Windows启动正常,我们将把C分区扩展到额外的空间.

>登录Windows客户
>打开“计算机管理”实用程序,单击“存储 – >磁盘管理”
>你应该看到3个分区:boot,C:和一个439 MB的小分区(最右边). Screenshot of Computer Management showing the 3 partitions
>通过右键单击删除linux分区 – >删除卷. (对任何提示单击是)
>右键单击C:分区并单击“扩展”,然后单击对话框上的“下一步”和“确定”.它应该只提供延长最后一个分区的数量.完成后,您已调整C:的大小,并且只剩下两个分区.
>就是这样.您的Windows客户端现在只使用35 GB左右.请记住,由于所有开销等原因,实际磁盘映像可能更大(可能接近38 GB).

检查一切正常并删除映像备份或将其脱机移至存储.

原文地址:https://www.jb51.cc/windows/366720.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐