原虛擬機名稱為:OLD_VMNAME
需要修改成:NEW_VMNAME
vmware創建虛擬機時,會以虛擬機名稱存儲對應的磁盤和配置文件。如果只在vcenter界面上修改虛擬機名稱存儲端名稱是不會修改的(只會修改.vmx文件中的displayName),這樣對以后的運維留下隱患。可通過以下方式將存儲端修改成對應的名稱。
一、虛擬機關機,並從清單移除
二、修改虛擬機目錄名稱
ssh 登錄宿主機,進入虛擬機所在的存儲目錄
mv OLD_VMNAME/ NEW_VMNAME
cd NEW_VMNAME
三、修改文件夾下的所有虛擬機相關的文件名稱
mv OLD_VMNAME.vmx NEW_VMNAME.vmx
mv OLD_VMNAME.vmdk NEW_VMNAME.vmdk
mv OLD_VMNAME-flat.vmdk NEW_VMNAME-flat.vmdk
...
四、修改虛擬機配置文件(xxx.vmx)
sed -i 's#OLD_VMNAME#NEW_VMNAME#g' NEW_VMNAME.vmx
五、修改磁盤配置文件
磁盤相關的文件是以.vmdk結尾,大致有以下幾類
5.1 修改系統盤配置文件
sed -i 's#OLD_VMNAME#NEW_VMNAME#g' NEW_VMNAME.vmdk
#如果有快照則同樣需要修改快照的配置(名稱一般為VM_NAME-00000N.vmdk)
sed -i 's#OLD_VMNAME#NEW_VMNAME#g' NEW_VMNAME-000002.vmdk
sed -i 's#OLD_VMNAME#NEW_VMNAME#g' NEW_VMNAME-000003.vmdk
...
sed -i 's#OLD_VMNAME#NEW_VMNAME#g' NEW_VMNAME-00000N.vmdk
5.2 修改數據盤配置文件(如果無數據盤,此步驟可忽略)
sed -i 's#OLD_VMNAME_N#NEW_VMNAME_N#g' NEW_VMNAME_M.vmdk
#如果數據盤有快照則同樣需要修改快照的配置(名稱一般為VM_NAME_M-00000N.vmdk)
sed -i 's#OLD_VMNAME#NEW_VMNAME#g' NEW_VMNAME-000002.vmdk
sed -i 's#OLD_VMNAME#NEW_VMNAME#g' NEW_VMNAME-000003.vmdk
...
sed -i 's#OLD_VMNAME#NEW_VMNAME#g' NEW_VMNAME-00000N.vmdk
六、修改快照配置文件
VMNAME.vmsd為所有快照的概要信息,記錄了快照的目錄結構,如下:
VMNAME-SnapshotN.vmsn為每個快照詳細信息(N代表第幾個快照)。
6.1 修改vmsd配置文件
sed -i 's#OLD_VMNAME#NEW_VMNAME#g' NEW_VMNAME.vmsd
6.2 修改.vmsn配置文件
sed -i 's#OLD_VMNAME#NEW_VMNAME#g' NEW_VMNAME-Snapshot1.vmsn
sed -i 's#OLD_VMNAME#NEW_VMNAME#g' NEW_VMNAME-Snapshot3.vmsn
...
sed -i 's#OLD_VMNAME#NEW_VMNAME#g' NEW_VMNAME-SnapshotN.vmsn
注:對於有快照的虛擬機以上步驟在VSPHERE6.5的環境操后,在切換快照時任務里提示“無法訪問文件 snapshot”,查看日志(/storage/log/vmware/vpxd/vpxd.log)報如下錯誤:
-----------------------------------------------------------------------------------------------------------------------------------------------------
VpxLRO] -- ERROR task-10169 -- vm-439 -- vim.VirtualMachine.revertToCurrentSnapshot: vim.fault.CannotAccessFile:
--> Result:
--> (vim.fault.CannotAccessFile) {
--> faultCause = (vmodl.MethodFault) null,
--> faultMessage = (vmodl.LocalizableMessage) [
--> (vmodl.LocalizableMessage) {
--> key = "msg.snapshot.vigor.revert.error",
--> arg = (vmodl.KeyAnyValue) [
--> (vmodl.KeyAnyValue) {
--> key = "1",
--> value = "msg.snapshot.error-DUMPER"
--> }
--> ],
--> message = "An error occurred while reverting to a snapshot: Unable to open the snapshot file."
--> }
--> ],
--> file = "snapshot"
--> msg = "Unable to access file snapshot"
-------------------------------------------------------------------------------------------------------------------------------------------------------
由於xxx-SnapshotX.vmsn文件中有部分是亂碼,不清楚具體是什么內容,推測和亂碼內容有關。
解決方法:
1. 創建新的快照;
2. 利用新快照文件(.vmsn)替換原有的快照文件(cp new.vmsn old.vmsn);(替換去需要記錄scsi0:0.fileName信息)
3. 替換完成后,修改快照點的parent磁盤;
scsi0:0.fileName = "VMNAME-00000X.vmdk"
順便說下快照恢復的過程:
1. 當恢復某個快照時,vmware首先會讀取該快照配置文件(VMNAME-SnapshotN.vmsn)中scsi0:0.fileName(disk1)
2. vmware會修改虛擬機配置文件(VMNAME.vmx),生成新的磁盤disk2,磁盤名稱為VMNAME-00000N.vmdk,並修改相應的配置(scsi0:0.fileName = "VMNAME-00000N.vmdk")
disk2的parent磁盤為disk1(通過disk2磁盤描述文件可以查看),新的數據會落在disk2上。