Vmware vsphere精简置备和厚置备转换过程记录2021年6月4日

本次版本是vsphere6.5 esxi

本文有两部分,先说下理论,然后过程教程

 

第一部分-理论部分:

关于虚机磁盘类型有三种:精简置备、厚置备置零、厚置备延迟置零

(1) thin provision就是一种按需分配的格式,创建时虚拟磁盘不会分配给所有需要的空间,而是根据需要,vmdk自动增大并一边zero一边使用这些新空间;vmdk文件的真实大小不等于创建的虚拟磁盘的大小,而只是等于实际数据的大小。(zero就是对磁盘空白处写入0,可以理解成或者翻译成初始化)。

(2) zeroedthick格式,在创建时分配给所有空间,vmdk文件大小等于创建的虚拟磁盘大小,虚拟磁盘中的空闲空间被预占,但空闲空间(empty space)并没有zeroed,需要在使用的时候再zero。由于磁盘在第一次写入时必须zero,这个类型的磁盘在第一次磁盘块写入时会有轻微的I/O性能损失。

(3) eagerzeroedthick,在创建时分配给所有空间,vmdk文件大小等于创建的虚拟磁盘大小,虚拟磁盘中的空闲空间被预占。另外,在创建磁盘时,会将所有数据块都初始化(zero),这将花费更多时间。这种格式的磁盘因为已经zero化,使用时不再需要zero,因此第一次写入数据到磁盘块时的性能较好。启用FT必须使用eagerzeoedthick格式的虚拟磁盘(如果原先不是,也会被转换成这种格式)

 

基本用法:

vmkfstools -i <Source-File> -d {thick|thin} <Dest-File>

thick细分为厚置备置零和厚置备延迟置零,即zeroedthick和leagerzeroedthick,因此在-d后面如果是转换为thick,参数不是thick,而是跟zeroedthick或者eagerzeroedthick

删除vmdk

vmkfstools -U xxx.vmdk 删除xxx.vmdk文件

重命名

vmkfstools -E xxx.vmdk  xxx_new.vmdk

或者用rm  mv也可以

 

然后vmkfstools也给出了直接转换,不需要clone,但是直接转换只支持thin转为thick,不支持thick直接转为thin

精简置备转换为厚置备置零: 

         vmkfstools --inflatedisk xxxxx.vmdk   

                           --inflatedisk可以用-j来替代,两个是等同的

厚置备延迟置零转换位厚置备置零: 

         vmkfstools --eagerzero xxxxxx.vmdk 

                          --eagerzero可以用-k来替代,等同的帮助文档里有写

厚置备转换为精简置备,是不可以直接转换的,需要使用clone方式

          vmkfstools -i xxxx.vmdk -d thin xxxx_new.vmdk

转换后可以进行磁盘检查/修复

         vmkfstools -x xxxx.vmdk

 

本次版本是vsphere6.5 esxi

Vmkfstools 语法

kvm 厚置备模式 精简模式 vmware厚置备_虚拟磁盘

 

第二部分-操作过程;

开始转换工作:

  1. 首先查看当前虚机磁盘格式,确定是精简置备

kvm 厚置备模式 精简模式 vmware厚置备_vmware_02

2.Ssh或者shell到宿主机后台

进入到对应存储目录下查看当前目标虚机相关文件

kvm 厚置备模式 精简模式 vmware厚置备_vmware_03

kvm 厚置备模式 精简模式 vmware厚置备_虚拟机_04

看红色圈出来的,就是虚机两个vmdk文件,这个地方有一个ELK_02.vmdk,这是因为这个截图是在我已经开始转换时候截图的。可以看到ELK_02-flat.vmdk是500G,而ELK_0-flat.vmdk是244.5G就可以看出来是精简置备还是厚置备了。

 

命令

vmkfstools -i ELK_0.vmdk -d eagerzeroedthick ELK_02.vmdk

参数:-i 指定源文件,有两个vmdk文件,要搞清楚,不是带有flat的vmdk文件。   -d 指定目的文件

一定注意搞清楚vmdk文件具体是哪一个

 

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] vmkfstools -i ELK_0.vmdk -d eagerzeroedthick ELK_02.vmdk

Destination disk format: VMFS eagerzeroedthick

Cloning disk 'ELK_0.vmdk'...

Clone: 49% done.

kvm 厚置备模式 精简模式 vmware厚置备_虚拟机_05

kvm 厚置备模式 精简模式 vmware厚置备_虚拟机_06

kvm 厚置备模式 精简模式 vmware厚置备_vsphere_07

然后处理文件,如果原来的不要了,可以直接把原来的两个vmdk删除掉,然后把两个vmdk改名为原来的名字,开机测试。

这边是保留原来的两个vmdk,把新的vmdk移动到其他文件夹,然后再把非vmdk文件复制一份过去,过程如下截图,在存储目录新建了一个vmtemu目录。

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8] du -sh ELK
744.5G    ELK

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8] cd ELK/
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] ls
ELK.nvram         ELK.vmsd          ELK.vmx           ELK.vmxf          ELK_0-flat.vmdk   ELK_0.vmdk        ELK_02-flat.vmdk  ELK_02.vmdk       vmware.log

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK]
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK]
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK]
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] ls
ELK.nvram         ELK.vmsd          ELK.vmx           ELK.vmxf          ELK_0-flat.vmdk   ELK_0.vmdk        ELK_02-flat.vmdk  ELK_02.vmdk       vmware.log

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK]
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK]
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK]
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK]
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK]
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] mv ELK_02-flat.vmdk /vmfs/volumes/datastore1/vmtestmu/ELK_02-flat.vmdk

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] ls
ELK.nvram        ELK.vmsd         ELK.vmx          ELK.vmxf         ELK_0-flat.vmdk  ELK_0.vmdk       ELK_02.vmdk      vmware.log

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] mv ELK_02.vmdk /vmfs/volumes/datastore1/vmtestmu/ELK_02.vmdk

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] ls
ELK.nvram        ELK.vmsd         ELK.vmx          ELK.vmxf         ELK_0-flat.vmdk  ELK_0.vmdk       vmware.log

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK]
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK]
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK]
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] cp ELK.nvram  /vmfs/volumes/datastore1/vmtestmu/ELK.nvram

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] cp ELK.vmsd  /vmfs/volumes/datastore1/vmtestmu/ELK.vmsd

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] cp ELK.vmx  /vmfs/volumes/datastore1/vmtestmu/ELK.vmx

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] cp ELK.vmxf  /vmfs/volumes/datastore1/vmtestmu/ELK.vmxf

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] cp vmware.log  /vmfs/volumes/datastore1/vmtestmu/vmware.log

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] ls
ELK.nvram        ELK.vmsd         ELK.vmx          ELK.vmxf         ELK_0-flat.vmdk  ELK_0.vmdk       vmware.log

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/ELK] cd ..
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8] ls
ELK            ISO            T100报表       elk            oldvmfiles     storagebackup  vmtestmu

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8]
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8]
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8] cd vmtestmu/
[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/vmtestmu] ls
ELK.nvram         ELK.vmsd          ELK.vmx           ELK.vmxf          ELK_02-flat.vmdk  ELK_02.vmdk       vmware.log

[root@localhost:/vmfs/volumes/609aa4ce-ad232f16-1585-0894ef08dcc8/vmtestmu]

 

保持转换后的新的vmdk名字不变,修改配置文件的方式使得该虚机可以正常启动:

查看一下转换前的vmdk文件内容:

kvm 厚置备模式 精简模式 vmware厚置备_虚拟磁盘_08

在转换后的vmdk描述文件,发现RW 1048576000 VMFS "ELK_02-flat.vmdk" 实际上已经自动修改了,如果你还是原来的,就把这个位置的vmdk改成xxx-flat.vmdk

修改vmx文件,下面截图红色部分修改

kvm 厚置备模式 精简模式 vmware厚置备_kvm 厚置备模式 精简模式_09

修改为

kvm 厚置备模式 精简模式 vmware厚置备_虚拟机_10

 

这个地方有一个参数是displayName =  这个后面的名字就是虚机展示出来的名字,直接修改为ELK_02

kvm 厚置备模式 精简模式 vmware厚置备_kvm 厚置备模式 精简模式_11

在配置里还会看到下面这个截图红色部分,不用修改,因为在后面操作中,选择了“我已移动”或者“我已复制”会自动修改这部分配置,在本文后面也会提到

kvm 厚置备模式 精简模式 vmware厚置备_虚拟磁盘_12

 

注册虚机,如果你是改为原来名字,那需要取消原来虚机注册,然后重新注册一下,如果是移动到了另外位置,原来虚机保持不动,就像上面那样修改,则不需要取消注册,因为虚机名称已经改了,修改为ELK_02了,即刚displayName这个参数,配置文件也做了部分修改,因此找到虚机文件后直接“注册虚机”。

 

选择“我已复制”

kvm 厚置备模式 精简模式 vmware厚置备_vsphere_13

 

然后虚拟机开机

kvm 厚置备模式 精简模式 vmware厚置备_虚拟机_14

我们在去看一下配置文件里提到的vswp这个红色位置就自动更改了。

kvm 厚置备模式 精简模式 vmware厚置备_虚拟机_15