1、 虚拟磁盘类型
node
厚置备延迟置零 //默认选项
建立过程当中为虚拟磁盘分配所需空间。建立时不会擦除物理设备上保留的任何数据,可是之后从虚拟机首次执行写操做时会按须要将其置零
2.厚置备置零
建立支持群集功能的厚磁盘。在建立时为虚拟磁盘分配所需的空间。建立中会将物理设备上保留数据置零。建立所需的时间可能会比建立其余类型的磁盘长。
3.精简置备
使用该磁盘最初所须要的数据存储空间。若是之后精简磁盘须要更多空间,则它能够增加到为其分配的最大容量。
2、 vmkfstools 操做实例
操做前请先关闭虚拟机,打开ESXI配置里的安全配置文件里的 ssh 服务,并须要登录到ESXI,输入用户名及密码。
1 虚拟磁盘类型转换,thick to thin
vmkfstools 命令格式
# vmkfstools -i<source-disk-name.vmdk>-d {thin|thick}<destination-disk-name.vmdk>
参数解释:
-i <source-disk-name.vmdk>参数:原vmdk磁盘名
-d {thin|thick}<destination-disk-name.vmdk> :目标磁盘的格式,thin或thick; <destination-disk-name.vmdk>为要生成的目标vmdk磁盘名;
1.1 进入虚拟机所在的datastore目录,每一个目录为一个虚拟机
# cd /vmfs/volumes/datastore1
/vmfs/volumes/4f3cedd3-1b48e924-3d7d-0022195a4404 # ls
cobbler-5.85 converter-two-57.72 datanode2-57.78
1.2 这次转换的虚拟机为converter-two-57.72,进入该虚拟机目录
/vmfs/volumes/4f3cedd3-1b48e924-3d7d-0022195a4404 # cd converter-two-57.72/
/vmfs/volumes/4f3cedd3-1b48e924-3d7d-0022195a4404/converter-two-57.72 # du -sh *
20.0G converter-two-flat.vmdk 64.0k converter-two.nvram
64.0k converter-two.vmdk 0 converter-two.vmsd
64.0k converter-two.vmx 64.0k converter-two.vmxf
1.3 转换过程当中须要用到的文件是vmdk磁盘文件,vmdk有两种,一种是“虚拟机名.vmdk”,vmdk文件很小,存放了虚拟磁盘的一些配置信息(如虚拟磁盘数据文件等);另外一种是“虚拟机名-flat.vmdk”,实际数据都存放在flat.vmdk文件中,转换时须要使用vmdk文件而不是flat.vmdk文件。
1.4 开始转换过程
A:使用vmkfstools将厚模式的vmdk文件克隆为精简的vmdk磁盘文件,转换后将生成两个新的vmdk和flat.vmdk文件
/vmfs/..../converter-two-57.72 # vmkfstools -i converter-two.vmdk -d thin converter-two_new.vmdk
/vmfs/..../converter-two-57.72 # du -sh *
20.0G converter-two-flat.vmdk
64.0k converter-two.vmdk
64.0k converter-two.vmx
64.0k converter-two.vmxf
7.9G converter-two_new-flat.vmdk
64.0k converter-two_new.vmdk
B:将原来的厚模式磁盘文件vmdk和flat.vmdk文件备份
/vmfs/..../converter-two-57.72 # mv converter-two.vmdk converter-two_old.vmdk
/vmfs/..../converter-two-57.72 # mv converter-two-flat.vmdk converter-two-flat_old.vmdk
C:将新生成的vmdk和flat.vmdk磁盘文件分别重命名为原有磁盘名称
/vmfs/..../converter-two-57.72 # mv converter-two_new.vmdk converter-two.vmdk
/vmfs/..../converter-two-57.72 # mv converter-two_new-flat.vmdk converter-two-flat.vmdk
D:编辑 vmdk 文件,确保 # Extent description "converter-two-flat.vmdk" 为原有磁盘名称
/vmfs/..../converter-two-57.72 # cat converter-two.vmdk
# Disk DescriptorFile
version=1
encoding="UTF-8"
CID=9cad19cd
parentCID=ffffffff
isNativeSnapshot="no"
createType="vmfs"
# Extent description
RW 41932416 VMFS "converter-two_new-flat.vmdk"
# The Disk Data Base
#DDB
ddb.deletable = "true"
ddb.toolsVersion = "0"
ddb.geometry.biosHeads = "255"
ddb.geometry.biosSectors = "63"
ddb.geometry.biosCylinders = "2610"
ddb.virtualHWVersion = "7"
ddb.longContentID = "364b422b2ceb3f6f0a4e88d09cad19cd"
ddb.uuid = "60 00 C2 94 89 93 59 2c-d9 22 d3 e4 e6 b3 a4 22"
ddb.geometry.cylinders = "2610"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.thinProvisioned = "1"
ddb.adapterType = "lsilogic"
E:启动虚拟机检查是否工做正常,对比精简置备与厚置备大小
/converter-two-57.72 # du -sh *500.0M converter-two-326dc793.vswp
7.9G converter-two-flat.vmdk
20.0G converter-two-flat_old.vmdk
64.0k converter-two.nvram
64.0k converter-two.vmdk
1.5其它方式
精简置备转换至厚置备置零:
vmkfstools --inflatedisk /vmfs/volumes/DatastoreName/VMName/VMName.vmdk
厚置备延迟置零转换至厚置备置零:
vmkfstools --eagerzero /vmfs/volumes/DatastoreName/VMName/VMName.vmdk
2 更改虚拟磁盘(vmdk)大小
要特別注意的是,若是此虚拟机已有快照,请先删除全部快照在执行如下操做,不然这个VMDK将出错,內部的资料丢失。
2.1 vmkfstools 命令格式
vmkfstools -X [新的大小] [目的vmdk文件]
2.2 当前虚拟机虚拟磁盘大小
[root@bz-cl2 ~]# fdisk -l /dev/sda
Disk /dev/sda: 21.4 GB, 21469396992 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
2.3 关闭虚拟机,登录ESXI 调整虚拟磁盘大小
/converter-two-57.72 # vmkfstools -X 40g converter-two.vmdk
2.4 开启虚拟机,验证虚拟磁盘大小
[root@bz-cl2 ~]# fdisk -l /dev/sda
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
三 vmkfstools 命令参数
/bin # vmkfstools
vmkfstools -C --createfs vmfs3
-b --blocksize #[mMkK]
-S --setfsname fsName
-Z --spanfs span-partition
-G --growfs grown-partitionios
问题补充:windows
给虚机VM1精简配置了1TB空间,通过长期的运行,如今在VM1的windows系统里看到数据只有200GB左右,可是vmdk文件已有1TB。我以为,造成的缘由是精简配置只增加不收缩。安全
解决:ssh
经过Storage vMotion在同一文件系统且磁盘区块大小同样的存储之间是没法回收膨胀的Thin Provision的VMDK空间的。由于NTFS文件系统的机制,被写入过的文件即便将文件删除系统也不会将磁盘区块置零,下次再写入数据只会优先操做标记为零的区块来写。目前比较简单方便的方法是,在VM上下载一个SDelete.exe的程序,而后用cmd运行,参数用-z,这个参数是将那些被写入过数据的区块标记为零,而且是针对虚拟机使用,在物理机上这个参数无效。格式如:sdelete.exe -z c:,运行过程比较慢,耐心等待,期间在操做系统中会看见你的磁盘会被占满,等运行完成后又会回到正常的容量。
命令运行完成后,用SSH链接到ESXi主机上进到须要回收空间的.vmdk目录下,运行vmkfstools工具,参数用-K(由于ESXi主机是Linux的底层OS因此注意大小写),如vmkfstools -K VirtualMachine.vmdk,而后等运行完成后就可以成功回收膨胀的Thin Provision空间了。
该方法仅限于Windows系统,Linux和其余非NTFS文件系统目前我还没找到回收的方法。
附上测试图一张(回收空间以前个人vCenter Server.vmdk的占用空间是96.0GB):ide