Re: [semi-OT] C7 Possible bug but I can't determine what tool has the problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



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




[Index of Archives]     [CentOS]     [CentOS Announce]     [CentOS Development]     [CentOS ARM Devel]     [CentOS Docs]     [CentOS Virtualization]     [Carrier Grade Linux]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Linux USB]


  Powered by Linux