VMware 이미지 용 vmx 파일을 복구하는 방법?


2

실수로 VMware 이미지가 실행되는 동안 vmx 파일을 제거했습니다.

이것을 어떻게 복구 할 수 있습니까?

답변:


1

나쁜 소식 : 다시 만들어야한다고 생각합니다.

희소식 : VMDK는 전체 디스크를 보유하므로 "중요한"항목이 대부분 있습니다.

따라서 새 VM을 만든 다음 기존 VMDK 를 사용하도록 디스크를 구성하십시오 .

또한 이런 종류의 질문은 "stackoverflow.com"이 아니라 "superuser.com"에 게시해야합니다.


승인. 이 게시물을 superuser.com으로 이동하는 방법

0
  1. vmx 파일의 내용은 VMware의 이미지 로그에 기록해야합니다.

  2. 아래 내용을 파일에 복사하고 (이 내용은 VMware 이미지 로그에서 구성과 사용자 기본 설정 사이에 있어야 함)이 파일의 이름을 다음과 같이 지정하십시오 example.vmx.

    config.version = "8"
    virtualHW.version = "4"
    floppy0.present = "true"
    nvram = "VNTco012.nvram"
    deploymentPlatform = "windows"
    virtualHW.productCompatibility = "hosted"
    tools.upgrade.policy = "manual"
    powerType.powerOff = "default"
    powerType.powerOn = "default"
    powerType.suspend = "default"
    powerType.reset = "default"
    displayName = "VNTco012"
    extendedConfigFile = "VNTco012.vmxf"
    scsi0.present = "true"
    scsi0.sharedBus = "none"
    scsi0.virtualDev = "lsilogic"
    memsize = "2048"
    scsi0:0.present = "true"
    scsi0:0.fileName = "VNTco012.vmdk"
    scsi0:0.deviceType = "scsi-hardDisk"
    sched.scsi0:0.shares = "normal"
    ide0:0.present = "true"
    ide0:0.clientDevice = "true"
    ide0:0.fileName = "/usr/lib/vmware/isoimages/windows.iso"
    ide0:0.deviceType = "atapi-cdrom"
    ide0:0.startConnected = "false"
    floppy0.startConnected = "false"
    floppy0.fileName = "/dev/fd0"
    floppy0.clientDevice = "true"
    ethernet0.present = "true"
    ethernet0.networkName = "VM Network 1007"
    ethernet0.addressType = "vpx"
    ethernet0.generatedAddress = "00:50:56:aa:40:b9"
    guestOSAltName = "Microsoft Windows Server 2003, Standard Edition (32-bit)"
    guestOS = "winnetstandard"
    uuid.bios = "50 2a 7f e5 bc 42 27 8b-d0 04 3f 47 3c d8 3a ed"
    log.fileName = "vmware.log"
    snapshot.action = "keep"
    sched.cpu.min = "0"
    sched.cpu.units = "mhz"
    sched.cpu.shares = "normal"
    sched.mem.minsize = "0"
    sched.mem.shares = "normal"
    toolScripts.afterPowerOn = "true"
    toolScripts.afterResume = "true"
    toolScripts.beforeSuspend = "true"
    toolScripts.beforePowerOff = "true"
    scsi0:0.redo = ""
    tools.remindInstall = "FALSE"
    vmware.tools.requiredversion = "7299"
    ethernet0.startConnected = "TRUE"
    tools.deployPkg.fileName = ""
    numvcpus = "2"
    scsi0:1.present = "true"
    scsi0:1.fileName = "VNTco012_1.vmdk"
    scsi0:1.deviceType = "scsi-hardDisk"
    
  3. 를 열어 이미지를 시작하십시오 example.vmx.


0

이 광고에 대한 스크립트가 있습니다

https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1023880

개인적으로 Mac OS ElCapitan에서 작동하지 못했습니다. 불행히도 스크립트가 잘못 설명되어 있습니다.

다음 단계를 시도했습니다.

#!/bin/bash
# https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1023880
VMXFILENAME=$(sed -n 's/^.*Config file: .*\/\(.\+\)$/\1/p' vmware.log)
echo $VMXFILENAME
exit
echo -e "#\041/usr/bin/vmware" > ${VMXFILENAME}
echo '.encoding = "UTF-8"' >> ${VMXFILENAME}
sed -n '/DICT --- CONFIGURATION/,/DICT ---/ s/^.*DICT \+\(.\+\) = \(.\+\)$/\1 = "\2"/p' vmware.log >> ${VMXFILENAME}

먼저 구성 파일 이름이 올바르게 감지되는지 알고 싶었습니다. grep은 무엇을 기대해야하는지 보여줍니다.

 grep "Config file:"  vmware.log
 2017-01-25T19:35:35.533+01:00| vmx| I125: Config file: /vmware/vm.vmwarevm/vm.vmx

그러나 스크립트는 올바른 파일 이름을 얻지 못하며 빈 결과를 보여줍니다. 그래서 파일 이름을 얻기 위해 줄을 바꿨습니다.

VMXFILENAME =grep "Config file: " vmware.log | cut -f3 -d"|" | cut -f3 -d ":"

개인적으로 더 잘 이해할 수 있습니다. 먼저 "Config file"을 포함하는 줄을 찾습니다. 이 줄에서 파이프 기호로 구분 된 세 번째 필드를 찾은 다음 콜론으로 구분 된 세 번째 필드를 찾습니다. 그리고 실제로 이것은 구성 파일 이름을 결정합니다.

이제 이것이 올바른 vmx 파일을 생성하는지 확인하십시오. 먼저 원래 줄을 무시하지 않도록 마지막 줄을 다음과 같이 수정하십시오.

>> ${VMXFILENAME}.new

이제이 부분의 주석 처리를 제거하여 테스트 할 수 있습니다. 이 작업을 수행하기 전에 원본 vmx 파일의 백업 사본이 생성되었는지 확인합니다 (이 스크립트를 다시 시작해야하는 경우 한 번만 ...)

echo "trying to create a new $VMXFILENAME"
today=`date "+%Y-%m-%d"`
if [ -f $VMXFILENAME ]
then
  if [ ! -f $VMXFILENAME.$today ]
  then
    echo "creating backup of $VMXFILENAME as $VMXFILENAME.$today"
    mv $VMXFILENAME $VMXFILENAME.$today
  else
    echo "backup $VMXFILENAME.$today exists"
  fi
else
  echo "$VMXFILENAME not found" 1>&2
  if [ !-f $VMXFILENAME.$today ]
  then
    exit 1
  fi
fi

그리고 두 번째 sed도 예상대로 작동하지 않습니다 (한숨 ...)

그래서 나는 sed를 몇 줄의 awk로 대체했습니다.

#!/bin/bash
# https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1023880
VMXFILENAME=`grep "Config file: " vmware.log | cut -f3 -d"|" | cut -f3 -d ":"`
echo "trying to create a new $VMXFILENAME"
today=`date "+%Y-%m-%d"`
if [ -f $VMXFILENAME ] 
then
  if [ ! -f $VMXFILENAME.$today ]
  then
    echo "creating backup of $VMXFILENAME as $VMXFILENAME.$today"
    mv $VMXFILENAME $VMXFILENAME.$today
  else
    echo "backup $VMXFILENAME.$today exists"
  fi 
else
  echo "$VMXFILENAME not found" 1>&2
  if [ !-f $VMXFILENAME.$today ]
  then
    exit 1
  fi
fi
echo -e "#\041/usr/bin/vmware" > ${VMXFILENAME}
echo '.encoding = "UTF-8"' >> ${VMXFILENAME}
#sed -n '/DICT --- CONFIGURATION/,/DICT ---/ s/^.*DICT \+\(.\+\) = \(.\+\)$/\1 = "\2"/p' vmware.log 
gawk '
# use pipe sign as a field separator
BEGIN { FS="|" }
# check whether we are in the range of lines after DICT --CONFIGURATION
/DICT --- CONFIGURATION/ { inconfig=1;next }
/DICT --- [A-Z+]/        { inconfig=0;next }
/DICT/ && (inconfig==1) { 
          if (match($3,/.*DICT[ \t]+(.*)/,groups)) {
            print groups[1] 
          }
        }
' vmware.log >> ${VMXFILENAME}
echo "please check ${VMXFILENAME}"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.