VMwareESX/ESXi 精简置备(thin)与厚置备(thick)虚拟机磁盘之间转换

VMwareESX/ESXi 虚拟机磁盘thin与thick之间转换

注意:转换前请先关闭虚拟机!!!

一.  Thin to Thick转换

Thin to Thick转换比较简单,在图形界面即可操作;

1.    浏览数据存储

点击虚拟机所在的ESX/ESXi主机,在”配置”选项卡下的”存储器”内,浏览数据存储,

VMwareESX/ESXi 精简置备(thin)与厚置备(thick)虚拟机磁盘之间转换

VMwareESX/ESXi 虚拟机磁盘thin与thick之间转换

注意:转换前请先关闭虚拟机!!!

一.  Thin to Thick转换

Thin to Thick转换比较简单,在图形界面即可操作;

1.    浏览数据存储

点击虚拟机所在的ESX/ESXi主机,在”配置”选项卡下的”存储器”内,浏览数据存储,

怎么压缩esxi磁盘空间 esxi 磁盘格式_怎么压缩esxi磁盘空间

2.    进入相应虚拟机目录,选择相应磁盘的vmdk文件,右键”扩充”;

怎么压缩esxi磁盘空间 esxi 磁盘格式_运维_02

扩充的过程真心的慢!基本上扩了一天==!

二.  Thick to Thin转换

Thick转换为Thin模式没有直接的图形操作方式,需要使用SSH登录ESX/ESXi主机,默认ESX/ESXi主机没有开启SSH服务,需要先打开SSH;

1.开启SSH服务

选择虚拟机所在的ESX/ESXi主机,点击”配置”选项卡,点击”安全配置文件”,点击服务面板的”属性”;

怎么压缩esxi磁盘空间 esxi 磁盘格式_运维_03

怎么压缩esxi磁盘空间 esxi 磁盘格式_运维_04

怎么压缩esxi磁盘空间 esxi 磁盘格式_运维_05

2.使用SSH工具登陆并生成Thin磁盘

用户名:root

密码:使用vSphere Client登录ESX/ESXi的密码

<1> 进入虚拟机所在的datastore目录

# cd /vmfs/volumes/datastore1/

# ls

Data_base_SQL

RHEL-5.5-x64-temp

SQLServer2008

SUSE11

thick2thin

vCenter Server

该datastore目录下可能有很多与虚拟机同名的目录,本次转换的虚拟机为thick2thin,进入该虚拟机目录

# cd thick2thin/

# ls

thick2thin-c27753e1.vswp          thick2thin.vmxf

thick2thin-flat.vmdk              thick2thin_1-flat.vmdk

thick2thin.nvram                  thick2thin_1.vmdk

thick2thin.vmdk                   vmware.log

thick2thin.vmsd                  vmx-thick2thin-3262600161-1.vswp

thick2thin.vmx

该虚拟机目录下有许多以虚拟机名开头的文件,其中转换过程中需要用到的文件是vmdk磁盘文件,vmdk有两种,一种是”虚拟机名.vmdk”,另一种是”虚拟机名-flat.vmdk”,vmdk文件很小,存放了虚拟磁盘的一些配置信息(如虚拟磁盘数据文件等),实际数据都存放在flat.vmdk文件中,转换时需要使用vmdk文件而不是flat.vmdk文件;此例中有两个虚拟磁盘,所以vmdk和flat.vmdk文件各有两个;

<2>开始转换

转换思路:

A.       先使用vmkfstools将厚模式的vmdk文件克隆为精简的vmdk磁盘文件,克隆出的精简磁盘文件将包括vmdk和flat.vmdk文件;

B.       将原来的厚模式磁盘文件vmdk和flat.vmdk文件备份或删除(建议使用mv命令将其重命名备份,以免因转换失败而误删数据);

C.       将新生成的vmdk和flat.vmdk磁盘文件分别重命名为与原磁盘同名的磁盘文件

D.       重新从虚拟机清单中删除添加虚拟机

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)       转换磁盘

# vmkfstools -i thick2thin.vmdk -d thin thin.vmdk

Destination diskformat: VMFS thin-provisioned

Cloning disk'thick2thin.vmdk'...

Clone: 100% done.

克隆完成将生成两个新的vmdk和flat.vmdk文件

# ls

thick2thin-flat.vmdk    thick2thin.vmx          thin-flat.vmdk

thick2thin.nvram        thick2thin.vmxf         thin.vmdk

thick2thin.vmdk         thick2thin_1-flat.vmdk  vmware.log

thick2thin.vmsd         thick2thin_1.vmdk

使用mv重命名将原磁盘vmdk和flat.vmdk备份

# mvthick2thin.vmdk  thick2thin.vmdk.bak

# mvthick2thin-flat.vmdk  thick2thin-flat.vmdk.bak

将新生成的精简vmdk文件重命名为原厚模式的磁盘名称

# mv thin.vmdk  thick2thin.vmdk

注意:在vSphere Client中启动虚拟机,做到此步基本已经完成了Thick to Thin的转换,并且虚拟机已经可以正常启动,但是我们发现flat.vmdk文件并没有更改名字虚拟机也可以正常启动,因为新生成vmdk文件里指定了新的flat.vmdk文件,我们可以通过vi手动更改文件名来修改虚拟机的flat.vmdk名称以便于后期虚机的维护和管理;此时可以启动虚拟机进行测试一下;

更改磁盘名:

首先关闭虚拟机,使用ssh进入主机的虚拟机目录下,使用mv命令将新生成的thin-flat.vmdk文件更改成原来的虚机磁盘名称thick2thin-flat.vmdk

# mvthin-flat.vmdk thick2thin-flat.vmdk

此时如果在vSphere Client启动虚拟机将报”找不到磁盘文件”类似的错误,因为虚拟机启动时需要通过vmdk文件找到flat.vmdk文件,所以需要修改vmdk文件中的磁盘文件名;

使用vi修改其中一行含有flat.vmdk的参数,将该部分修改成新的磁盘文件名

# vi thick2thin.vmdk

# Extentdescription

RW 83886080 VMFS"thick2thin-flat.vmdk"       #注意,此处原来为转换成的thin-flat.vmdk

然后将虚拟机从清单中移除

怎么压缩esxi磁盘空间 esxi 磁盘格式_运维_06

在数据存储里将vmx文件添加到清单

怎么压缩esxi磁盘空间 esxi 磁盘格式_运维_07

保持默认下一步

怎么压缩esxi磁盘空间 esxi 磁盘格式_虚拟磁盘_08

按照原来的配置下一步

怎么压缩esxi磁盘空间 esxi 磁盘格式_虚拟磁盘_09

完成

怎么压缩esxi磁盘空间 esxi 磁盘格式_怎么压缩esxi磁盘空间_10

此时打开虚拟机的”编辑配置”选项

怎么压缩esxi磁盘空间 esxi 磁盘格式_运维_11

查看刚转换的磁盘,已经变成了精简置备模式

怎么压缩esxi磁盘空间 esxi 磁盘格式_运维_12

而原来的虚拟磁盘因为没有转换,仍为厚置备模式;

怎么压缩esxi磁盘空间 esxi 磁盘格式_运维_13

 

--------------------------------------------------------------------------------------------------------------------------------------------

vmkfstools 操作实例

注意事项:
操作前请先关闭虚拟机
操作前需要打开ESXI ssh 服务,并需要登陆到ESXI
用户名:root
密码:使用vSphere Client登录ESX/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 
converter-four-57.74  converter-win-xp      ovf-cos-5.7 
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 
64.0k   vmware-4.log 
1.0M    vmware-5.log 
1.0M    vmware-6.log 
1.0M    vmware-7.log 
1.0M    vmware-8.log 
64.0k   vmware-9.log 
64.0k   vmware.log 
1.3 需要注意:转换过程中需要用到的文件是vmdk磁盘文件,vmdk有两种,一种是”虚拟机名.vmdk”,另一种是”虚拟机名-flat.vmdk”,vmdk文件很小,
存放了虚拟磁盘的一些配置信息(如虚拟磁盘数据文件等),实际数据都存放在flat.vmdk文件中,转换时需要使用vmdk文件而不是flat.vmdk文件 
1.4 开始转换 
1.4.1 使用vmkfstools将厚模式的vmdk文件克隆为精简的vmdk磁盘文件,转换磁盘完成后将生成两个新的vmdk和flat.vmdk文件 
/vmfs/..../converter-two-57.72 # vmkfstools -i converter-two.vmdk  -d thin converter-two_new.vmdk   
Destination disk format: VMFS thin-provisioned 
Cloning disk 'converter-two.vmdk'... 
Clone: 100% done. 
/vmfs/..../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 
7.9G    converter-two_new-flat.vmdk 
64.0k   converter-two_new.vmdk 
64.0k   vmware-4.log 
1.0M    vmware-5.log 
1.0M    vmware-6.log 
1.0M    vmware-7.log 
1.0M    vmware-8.log 
64.0k   vmware-9.log 
64.0k   vmware.log 
1.4.2 将原来的厚模式磁盘文件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  
1.4.3 将新生成的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 
1.4.4 编辑 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" 
1.4.5 启动虚拟机检查是否工作正常,对比精简置备与厚置备大小 
/vmfs/..../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 
0   converter-two.vmsd 
64.0k   converter-two.vmx 
64.0k   converter-two.vmxf 
64.0k   converter-two_old.vmdk 
64.0k   vmware-10.log 
64.0k   vmware-11.log 
1.0M    vmware-6.log 
1.0M    vmware-7.log 
1.0M    vmware-8.log 
64.0k   vmware-9.log 
64.0k   vmware.log


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 调整虚拟磁盘大小 
/vmfs/..../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  
No valid command specified 
OPTIONS FOR FILE SYSTEMS:  
vmkfstools -C --createfs vmfs3 
               -b --blocksize #[mMkK] 
               -S --setfsname fsName 
           -Z --spanfs span-partition 
           -G --growfs grown-partition 
   deviceName 
           -P --queryfs -h --humanreadable 
           -T --upgradevmfs 
   vmfsPath 
OPTIONS FOR VIRTUAL DISKS:  
vmkfstools -c --createvirtualdisk #[gGmMkK] 
               -d --diskformat [zeroedthick| 
                                thin| 
                                eagerzeroedthick] 
               -a --adaptertype [buslogic|lsilogic|ide] 
           -w --writezeros 
           -j --inflatedisk 
           -k --eagerzero 
           -K --punchzero 
           -U --deletevirtualdisk 
           -E --renamevirtualdisk srcDisk 
           -i --clonevirtualdisk srcDisk 
               -d --diskformat [zeroedthick| 
                                thin| 
                                eagerzeroedthick| 
                                rdm:<device>|rdmp:<device>| 
                                2gbsparse] 
           -X --extendvirtualdisk #[gGmMkK] 
               [-d --diskformat eagerzeroedthick] 
           -r --createrdm /vmfs/devices/disks/... 
           -q --queryrdm 
           -z --createrdmpassthru /vmfs/devices/disks/... 
           -v --verbose # 
           -g --geometry 
           -x --fix [check|repair] 
   vmfsPath 
OPTIONS FOR DEVICES:  
           -L --lock [reserve|release|lunreset|targetreset|busreset|readkeys|readresv] /vmfs/devices/disks/... 
           -B --breaklock /vmfs/devices/disks/...   
-----------------------------------------------------

---------------------------------------------------------------------------------------

了解VM硬碟VMDK檔案的分配

如果我們使用VMDK模式幫VM配置硬碟,不管是什麼型態的硬碟,都會存放在一組VMDK檔案中。在ESX的Console下,是由多個VMDK組成的,視其檔名不同而有不同的意義,一般來說會有三種,並且和你從vSphere Client下看到的不一樣。下面就是說明。

1、XXXX-flat.vmdk:這是真正存放檔案內容的地方,當建立VMDK時,所有的資料都會存放在這個檔案中。這個檔案有一小部分是處理VM虛擬機的處理資料。這個檔案在Console下顯示的大小和你建立VMDK的大小相等,不管你有沒有用Thin Provisioning功能,但實際並沒有佔用這麼大。

怎么压缩esxi磁盘空间 esxi 磁盘格式_运维_14

2、XXXX.vmdk:在新版的ESX4中,這個檔案不再是真正存放資料的地方了。在ESX4中,VMDK檔案變成一個VMDK描述檔,其中記錄了flat.vmdk的大小及資料存放結構。VMDK是一個純文字檔,除了記錄前面flat.vmdk的檔名之外,也記錄了這個VMDK檔案的模式,如Thin Provisioned,SCSI的介面卡型號,磁柱、磁頭、磁軌等等。我們可以用vi直接開啟這個檔案來查看。

怎么压缩esxi磁盘空间 esxi 磁盘格式_虚拟磁盘_15

3、XXXX-delta.vmdk:一般來說這是快照的REDO Log檔案,這是一個二元檔,當你建立了Snapshot時,就會建立這個檔案。建立快照之後,所有存入VMDK檔案的動作都會轉移到這個檔案上來,保持VMDK的不變。一開始這個檔案一定很小,但當你一直使用VM之後,就會越來越大。這個檔案是寫入VMDK的位元對應檔,是Bit by Bit記錄的,因此大小不可能超過VMDK。當建立一個Snapshot時就會建立一個-delta.vmdk檔案,刪除快照或還原回去時就會自動刪除。

怎么压缩esxi磁盘空间 esxi 磁盘格式_虚拟磁盘_16

操作ESX中VM的VMDK檔案

在ESX指命下操作VMDK檔案就是用vmkfstools這個工具。vmkfstools功能強大到所有和VMDK檔案有關的事情都可以處理。也可以處理vmfs3的檔案系統,但在本例中我們不介紹能用vSphere Client能處理的動作,而是看看大家最想知道的VMDK檔案複製要怎麼做,也順便舉幾個常用的實例。

怎么压缩esxi磁盘空间 esxi 磁盘格式_数据存储_17

這邊特別要說明的是,使用者對VM硬碟的操作指令時,都要以.vmdk檔案為主,而不是flat.vmdk,讀者們不要以為flat.vmdk是真正存放的地方而去操作,是無法成功的,vmkfstools是針對.vmdk這個描述檔的

實例一:複製一個VMDK檔案

指令:vmkfstools -i [來源檔案] -d [檔案格式] [目的檔案]

範例:vmkfstools -i /vmfs/volumes/Storage1/2003/2003.vmdk -d thin /vmfs/volumes/Storage1/2003c/2003c.vmdk

指令說明:

上面的指令使用「-i」來進行虛擬機VMDK的複製,來源是「/vmfs/volumes/Storage1/2003/2003.vmdk」,目的是「/vmfs/volumes/Storage1/2003c/2003c.vmdk」,特別要注意的是其檔案格式為「thin」,表示這個轉換出來的檔案是「Thin Provisioning」的,也就是檔案的大小會隨著使用而成長,而非一次就固定大小。這個功能是在vSphere Client中無法達成的。

怎么压缩esxi磁盘空间 esxi 磁盘格式_虚拟磁盘_18

實例二:讓VMDK變大

指令:vmkfstools -X [來源檔案] [新的大小]

範例:vmkfstools -X /vmfs/volumes/Storage1/2003/2003.vmdk 20G

指令說明:

上面的指令使用「-X」來進行虛擬機VMDK的增大成20GB,特別要注意的是增大後,原來的分割區大小會不變,但會多一些未配置空間,因此你還是要用磁碟工具將分割區重新改變大小。舉例來說,原來是10G的大小,只有一個C分割區,在變大之後,還是一個C,10G,但後面會多出一個10G的未配置空間。這個功能在vSphere Client也是可以改變的。

怎么压缩esxi磁盘空间 esxi 磁盘格式_运维_19

要特別注意的是,如果你已經有Snapshot,千萬不要用這個指令改變大小,如果改變了,這個VMDK就無法開機了,內部的資料會全部消失!

怎么压缩esxi磁盘空间 esxi 磁盘格式_数据存储_20

實例三:將Thin Provisioned的硬碟放大回Thick型態

指令:vmkfstools -j [來源檔案]

範例:vmkfstools -j /vmfs/volumes/Storage1/2003/2003.vmdk

指令說明:

當我們使用Thin Provisioning來規劃硬碟時,也許有時因為效能的問題而需要將這個硬碟轉換成真實對應而非自動增長大小的型態,此時可以用「-j」指令還原,這在vSphere Client中也做不到的。

怎么压缩esxi磁盘空间 esxi 磁盘格式_怎么压缩esxi磁盘空间_21