file.vdi
is in all likelihood a sparse file. This is very common with virtual machine disk images: parts that have never been written to are left as holes in the file that don't consume space. You can confirm by checking whether the length of the original file matches its disk usage:
ls -l file.vdi; du file.dvi
I expect that ls -l
will report 14GB (actual file length) but du
will report 7GB (disk uage), meaning that about half of the image was never written to.
Sparse files are a crude form of compression performed by the system. The holes in the file are defined as containing a bunch of null bytes, and that's what applications see if they read from the holes. So split
(or cat
or cp
or dd
or tar
or anything else) read a lot of null bytes that take up space in the output.
If you want to save space at the destination, you can make the file sparse again. This will only save space, it will not improve performance.
ls -l file.vdi
anddu file.vdi
report on the original file? – Gilles 'SO- stop being evil' Mar 06 '15 at 00:50