Sparse virtual machine disk image resizing weirdness?
- by Matt H
I have a partitioned virtual machine disk image created by vmware.
What I want to do is resize that by 10GB.
The file size is showing as 64424509440. Or 60GB.
So I ran this:
dd if=/dev/zero of=./win7.img seek=146800640 count=0
It ran without errors and I can verify the new size is in fact
75161927680 bytes or 70GB.
This is where it gets a little odd.
I started the guest domain in xen which is a Windows 7 enterprise machine.
What I was expecting to see in diskmgmt.msc is 2 partitions. 1 system partition at the start of around 100MB and near 60GB partition (which is C drive) followed by around 10GB of free space.
Actually what I saw was a 70GB partition!?!
That confused me... so I decided to run the Check Disk which when you set it on the C drive it asks you to reboot so it'll run on boot. So I did that and during the boot it ran the checks. It got all the way through stage 3 and didn't show any errors at all.
Looked at the partitions in disk manager and now C drive has shrunk back to 60GB and there is no free space.
What gives?
Ok, I thought I'd try mounting it under Dom0 and examining it with fdisk.
This is what I get when mounted
sudo xl block-attach 0 tap:aio:/home/xen/vms/otoy_v1202-xen.img xvda w
sudo fdisk -l /dev/xvda
Disk /dev/xvda: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x582dfc96
Device Boot Start End Blocks Id System
/dev/xvda1 * 1 13 102400 7 HPFS/NTFS
Partition 1 does not end on cylinder boundary.
/dev/xvda2 13 7833 62810112 7 HPFS/NTFS
Note the cylinder boundary comment.
When I run
sudo cfdisk /dev/xvda
I get:
FATAL ERROR: Bad primary partition 1: Partition ends in the final partial cylinder
Press any key to exit cfdisk
So I guess this is a bigger problem than first thought.
How can I fix this?
EDIT:
Oops, the cylinder boundary thing is not a problem at all since disks have used LBA etc. So that threw me for a moment... still the problem exists...
Now this output looks a little different.
sudo sfdisk -uS -l /dev/xvda
Disk /dev/xvda: 7832 cylinders, 255 heads, 63 sectors/track
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/xvda1 * 2048 206847 204800 7 HPFS/NTFS
/dev/xvda2 206848 125827071 125620224 7 HPFS/NTFS
/dev/xvda3 0 - 0 0 Empty
/dev/xvda4 0 - 0 0 Empty
BTW: I do have a backup of the image so if you help me mess it up that's ok.
EDIT:
sudo parted /dev/xvda print free
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvda: 64.4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
32.3kB 1049kB 1016kB Free Space
1 1049kB 106MB 105MB primary ntfs boot
2 106MB 64.4GB 64.3GB primary ntfs
64.4GB 64.4GB 1049kB Free Space
Cool. Linux is showing free space is 10GB which is what I expect. The problem is windows isn't seeing this?