Vmware vsphere精简置备和厚置备转换过程教程
2021年6月4日
本次版本是在vsphere6.5 esxi
本文仅仅是使用命令和只有esxi情况下的过程,如果有vcsa然后集群形式,那可以在webclien界面使用秦迁移来达到改变磁盘类型、或者使用虚机为模板,然后模板新建虚机时候选择类型。web页面操作就不赘述了。
本文有两部分,先说下理论,然后过程教程
第一部分-理论部分:
关于虚机磁盘类型有三种:精简置备、厚置备置零、厚置备延迟置零
(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 语法
第二部分-操作过程;
开始转换工作:
- 首先查看当前虚机磁盘格式,确定是精简置备
2.Ssh或者shell到宿主机后台
进入到对应存储目录下查看当前目标虚机相关文件
看红色圈出来的,就是虚机两个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指定目的文件
[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.
然后处理文件,如果原来的不要了,可以直接把原来的两个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文件内容:
在转换后的vmdk描述文件,发现RW 1048576000 VMFS "ELK_02-flat.vmdk" 实际上已经自动修改了,如果你还是原来的,就把这个位置的vmdk改成xxx-flat.vmdk
修改vmx文件,下面截图红色部分修改
修改为
这个地方有一个参数是displayName = 这个后面的名字就是虚机展示出来的名字,直接修改为ELK_02
在配置里还会看到下面这个截图红色部分,不用修改,因为在后面操作中,选择了“我已移动”或者“我已复制”会自动修改这部分配置,在本文后面也会提到
注册虚机,如果你是改为原来名字,那需要取消原来虚机注册,然后重新注册一下,如果是移动到了另外位置,原来虚机保持不动,就像上面那样修改,则不需要取消注册,因为虚机名称已经改了,修改为ELK_02了,即刚displayName这个参数,配置文件也做了部分修改,因此找到虚机文件后直接“注册虚机”。
选择“我已复制”
然后虚拟机开机
我们在去看一下配置文件里提到的vswp这个红色位置就自动更改了。