I was just checking which commands are supporting sparse files. I post hereafter a short overview of what I found out (working on Linux).
- Create a sparse file of 20 GiB:
dd if=/dev/zero of=foo bs=1 count=1 seek=20G
- Check that a file is sparse:
Compare the first versus second size column (the first one is the space taken on disk).
- Copy a sparse file:
cp foo bar
Copy already detects and handles correctly sparse files.
- Make a non-sparse file sparse (works only if it contains blocks filled with zeros):
cp --sparse=always foo bar
- Expand a sparse file to a non-sparse one:
cp --sparse=never foo bar
- Copy remotely a sparse file: scp does not support sparse files, it will expand them to non-sparse ones. Rsync does support them. Just use the
rsync -vS foo root@someserver:/some/path/