When dumping a file which is being actively updated by an application
(in our case it was an outlook pst file on our samba server), safe_read()
can sometimes return 0.
When it happens, sparse_dump_region() goes into an infinite loop.
I don't know what the proper fix would be. I just fixed it on our server
with this:
--- sparse.c.orig 2014-02-28 10:54:13.000000000 -0500
+++ sparse.c 2014-02-28 10:53:51.000000000 -0500
@@ -312,7 +312,7 @@
blk = find_next_block ();
bytes_read = safe_read (file->fd, blk->buffer, bufsize);
- if (bytes_read == SAFE_READ_ERROR)
+ if (bytes_read == SAFE_READ_ERROR || bytes_read == 0)
{
read_diag_details (file->stat_info->orig_file_name,
(file->stat_info->sparse_map[i].offset
It now gives a false error message:
tar.debug: ./backupad.pst: Warning: Read error at byte 5412242432, while
reading 512 bytes
but doesn't hang anymore.
PS
We do not backup the file while it is being updated, but amanda runs
its estimation phase on a live filesystem.