VMware ESXi: copying vmdk without blowing up
If you copy a vmdk from a ESXi system via ‘cp’ or anything similar, your so called sparse-vmdk, will blow up to the maximum size which was defined.
For example, a VM with a 25G partition shows up with 25G but needs only the space which consumes the data you really have.
For example, a VM with a 25G partition shows up with 25G but needs only the space which consumes the data you really have.
The parameter ‘-s’ in the command ‘ls’ presents the really needed space.
ls –slh *.vmdk 140K -rw------- 1 root root 8,0G 3. Aug 14:20 bac-test-flat.vmdk 4,0K -rw------- 1 root root 424 3. Aug 14:22 bac-test.vmdk
The vmdk was freshly created and no operating system was installed. It consumes only 140k instead of the defined 8G.
So far so good, but a copy with ‘cp’ will replace the null-pointer in this file with real zeros. The result is a 8G consuming file with only zeros in it and the storage efficiency is gone.
For copying vmdk files, there is a tool called ‘vmkfstools’ available on the ESXi server.
vmkfstools -i "source.vmdk" -d thin "destination.vmdk"
There should be no snapshot and source and destination are the meta vmdk files. e.g. vmname.vmdk (not flat or delta).
‘thin’ is the secret of keeping the null-pointer in the flat file.
The tool also reverts a vmdk which was blown up, back into a thin file!
The tool also reverts a vmdk which was blown up, back into a thin file!
For an easier usage i wrote a tiny script to copy like it is with ‘cp’:
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash if [ -n "$1" ] || [ -n "$2" ]; then SRC="$1" DST="$2" else echo "Error: Usage $0 [source] [destination]" echo "Use only vmdk-meta files! no flat or delta allowed!" echo " " exit fi vmkfstools -i "$1" -d thin "$2" |
create a script called ‘vmcp’,
save it in /usr/bin
and set execution rights (chmod +x /usr/bin/vmcp)
save it in /usr/bin
and set execution rights (chmod +x /usr/bin/vmcp)
Now you can copy with
vmcp source.vmdk destination.vmdk
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.