Como recuperar o arquivo vmx para imagens do VMware?

2

Por acaso, removi um arquivo vmx de uma imagem do VMware enquanto estava sendo executado。

Como posso recuperar isso?

    
por Joseph 01.11.2010 / 03:56

3 respostas

1

Más notícias: acho que você terá que recriá-lo.

Boas notícias: o VMDK armazena todo o disco - então a maioria das coisas "importantes" está lá.

Portanto, crie uma nova VM - configure o (s) disco (s) para usar o existente VMDK.

Além disso, esse tipo de pergunta deve realmente ser postado em "superuser.com" - não em "stackoverflow.com".

    
por 01.11.2010 / 04:04
0
  1. O conteúdo do arquivo vmx deve ser registrado no log de imagens do VMware.

  2. Copie o conteúdo abaixo para um arquivo (esses conteúdos devem estar localizados entre Configuração e USER DEFAULT no log de imagens do VMware) e nomeie esse arquivo como 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. Inicie a imagem abrindo example.vmx .

por 01.11.2010 / 06:52
0

Existe um script para este anunciado em

link

Pessoalmente, tive problemas para fazê-lo funcionar no Mac OS ElCapitan. Infelizmente, o roteiro está mal documentado.

Eu tentei os seguintes passos:

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

então primeiro eu queria saber se o nome do arquivo de configuração é detectado corretamente. Um grep mostra o que esperar

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

mas o script não recebe o nome do arquivo correto, mostra um resultado vazio. Então eu substituí a linha para obter o nome do arquivo com

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

que eu pessoalmente acho melhor compreensível. Primeiro, procuramos a linha que contém o "arquivo de configuração". Nessa linha, procuramos o terceiro campo separado por um sinal de tubo e, em seguida, pelo terceiro campo, separados por dois pontos. E sim, de fato, isso determina o nome do arquivo de configuração.

Agora vamos ver se isso criará um arquivo vmx correto. Primeiro, certificamos-nos de não substituir o original, para que a última linha seja modificada como:

>> ${VMXFILENAME}.new

e agora podemos descomentar esta parte para testá-la. Antes de fazermos isso, garantimos que uma cópia de backup do nosso arquivo vmx original seja criada (e somente uma vez, se precisarmos reiniciar este script ...)

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

e o segundo sed também não funciona como esperado (suspiro ...)

Então acabei substituindo também o sed com algumas linhas do 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 "#1/usr/bin/vmware" > ${VMXFILENAME}
echo '.encoding = "UTF-8"' >> ${VMXFILENAME}
#sed -n '/DICT --- CONFIGURATION/,/DICT ---/ s/^.*DICT \+\(.\+\) = \(.\+\)$/ = ""/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}"
    
por 08.03.2017 / 13:15

Tags