On 1/15/20 8:18 AM, Alessandro Baggi wrote:
Then I sync src/ to dest/ using "rsync -avS src/ dest/", all ok but
when I run "du -h dest/testfile" I get 0 and if I run "du -b
dest/testfile" I get the correct size in bytes.
That's not a bug, that's what sparse files are.
In POSIX systems, it's possible to treat a regular file like memory, and
one of the things you might do with such a feature is use a file to keep
track of the last time a user logged in. The simplest way to so that is
to save the time value at the offset of the user's UID. My uid is
556600005, so if the file weren't sparse, that one entry would create an
enormous file, but with sparse files, the system only needs to allocate
one block to store that value. If a process reads that file, it will
get all zeros from the OS until it reaches the date stored at my uid offset.
Applications can't tell whether a given set of zeros in a file are
actual zeros on disk, or if they're simply parts of the file that
haven't been written to, so when you tell rsync to create sparse files,
it will do its best to identify blocks that are all zeros and simply not
write to those on the destination. Thus, if you use /dev/zero to create
a file on the source and then rsync it with -S, the destination file
will use zero blocks of storage. Naturally, that can only be true with
files whose contents are null bytes, as you get from /dev/zero.
_______________________________________________
CentOS mailing list
CentOS@xxxxxxxxxx
https://lists.centos.org/mailman/listinfo/centos