Sparse files is a file that takes up a certain amount of space on the file system while being wholly or partially empty.
In
Linux,
sparse files can be created using the fallocate
utility.
The benefit is that the file is created instantly.
No matter what size it has.
No need to use dd
to actually write X amount of bytes to the files.
Instead, fallocate just tells the filesystem to create a file from here, to here.
Example:
fallocate -l 1000M sparse.dat
This will create a file called sparse.dat
with the size 1000M.
The file itself will not actually have 1000M bytes written to it.
If you read the file, it will contain zeros. Example:
$ fallocate -l 1000M sparse.dat
$ hd sparse.dat
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
3e800000
If fallocate is not available, you can also create sparsefiles using dd
by running:
dd if=/dev/zero of=sparse_file bs=1 count=0 seek=1000M
Copying sparse files
One thing to be aware of is that if you read a sparse file with a program that is not aware that it is a sparse file, it will read the entire file including the sparse sections which will be read as zeros.
So when you have to copy a sparse file, you need to use a program that supports sparse files. Luckily most standard tools do.
Examples:
$ cp --sparse=always sparse.dat copy.dat
$ rsync --sparse sparse.dat copy.dat
$ tar --sparse -c -f sparse.tar sparse.dat