VMware Communities
d3bug72
Contributor
Contributor
Jump to solution

VMWare Fusion Crashed Now VM Won't start: Grain is pointed to by multiple GTEs

I have seen similar issues posted here before and I am hoping to get some help. VMware fusion crashed on me and now my VM won't start and there are some issues in the vmware.log file stating that a Grain is pointed to by multiple GTEs.

 

The exact size of the file Virtual Disk-s014.vmdk is 4,044,029,952 bytes.

 

Another file, Virtual Disk-s04.vmdk had a different error (could not open). It's file size is 4,260,495,360 bytes.

 

I transferred the files over to a windows VM and ran the metadata extraction utility on them. They can be found in the attached zip along with a list of the files in VM folder. Please let me know if any additional information is needed. I would also love to learn the process analyzing the vmware.log file and metadata to zero out sections (if that is what is needed here!). Thanks!

0 Kudos
1 Solution

Accepted Solutions
a_p_
Leadership
Leadership
Jump to solution

For "Virtual Disk-s014.vmdk" the below command lines will zero out two pointers to 64k data blocks that are referenced twice.

Duplicates found:

~snip~
INFO : Reading 127 Grain Directory Entries ...
INFO : Reading 65.024 Grain Table Entries ...
INFO : Searching for holes, and duplicates ...
ERROR : GT Error (DUP): GTE [51][380] = [0x00745D00] @ Pos. 367600
ERROR : GT Error (DUP): GTE [81][286] = [0x00745D00] @ Pos. 428664
ERROR : GT Error (DUP): GTE [51][381] = [0x00745D80] @ Pos. 367604
ERROR : GT Error (DUP): GTE [81][287] = [0x00745D80] @ Pos. 428668
~snip~

Since I had to decide which duplicates to zero out, I checked the allocation sequence, and removed the one which looked wrong to me.
Anyway, depending on what had happened it may cause minor data loss/corruption.

printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=168057 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=168058 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=168060 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=168061 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=168062 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=428665 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=428666 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=428668 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=428669 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=428670 count=1 conv=notrunc

In case you wonder about the seek positions in the first 5 lines, these are the positions for the redundant grain tables.

I'm not quite sure about the error message for "Virtual Disk-s004.vmdk". The metadata itself is ok. What I could think of, is that the file system ("/Volumes/Untitled/") on which the VM is stored has a maximum file size limit!?

André

 

View solution in original post

2 Replies
a_p_
Leadership
Leadership
Jump to solution

For "Virtual Disk-s014.vmdk" the below command lines will zero out two pointers to 64k data blocks that are referenced twice.

Duplicates found:

~snip~
INFO : Reading 127 Grain Directory Entries ...
INFO : Reading 65.024 Grain Table Entries ...
INFO : Searching for holes, and duplicates ...
ERROR : GT Error (DUP): GTE [51][380] = [0x00745D00] @ Pos. 367600
ERROR : GT Error (DUP): GTE [81][286] = [0x00745D00] @ Pos. 428664
ERROR : GT Error (DUP): GTE [51][381] = [0x00745D80] @ Pos. 367604
ERROR : GT Error (DUP): GTE [81][287] = [0x00745D80] @ Pos. 428668
~snip~

Since I had to decide which duplicates to zero out, I checked the allocation sequence, and removed the one which looked wrong to me.
Anyway, depending on what had happened it may cause minor data loss/corruption.

printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=168057 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=168058 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=168060 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=168061 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=168062 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=428665 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=428666 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=428668 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=428669 count=1 conv=notrunc
printf '\x00' | dd of="Virtual Disk-s014.vmdk" bs=1 seek=428670 count=1 conv=notrunc

In case you wonder about the seek positions in the first 5 lines, these are the positions for the redundant grain tables.

I'm not quite sure about the error message for "Virtual Disk-s004.vmdk". The metadata itself is ok. What I could think of, is that the file system ("/Volumes/Untitled/") on which the VM is stored has a maximum file size limit!?

André

 

d3bug72
Contributor
Contributor
Jump to solution

You rock!! I didn't have to do anything with -s004 either. Simply fixing -s014 allowed the VM to boot again. Thank you!!

0 Kudos