Sparse Files — Commands Overview

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: 
     ls -alsh
    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 -S or --sparse option. Example: 
     rsync -vS foo root@someserver:/some/path/