답변:
vmx 파일의 내용은 VMware의 이미지 로그에 기록해야합니다.
아래 내용을 파일에 복사하고 (이 내용은 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"
를 열어 이미지를 시작하십시오 example.vmx
.
이 광고에 대한 스크립트가 있습니다
개인적으로 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}"