bug-ddrescue
[Top][All Lists]
Advanced

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

Re: [Bug-ddrescue] ddrescue bug with overwriting the mapfile


From: Ketil Froyn
Subject: Re: [Bug-ddrescue] ddrescue bug with overwriting the mapfile
Date: Sun, 6 Jan 2019 22:37:17 +0100

On Sun, 6 Jan 2019 at 14:14, Joe Kickman <address@hidden> wrote:
>
> Hello. Sometimes while rescuing I see the situation of hanging PC. If the 
> hang happens at the moment of rewriting the log/map file - it gets size of 0 
> :(. Luckily, the times that happened I had an almost recent backup copy. 40 
> minutes of work was lost. As for a 3Tb drive - it is almost nothing, that 
> drive is being copied already for 3 days, now it is 90% done.
> I propose to first rename the log, adding .bak at the end, flush file buffer 
> to disk (sync) and then write the new log file from memory to disk, thus 
> always having a recent backup. A similar mechanism is used by hddsuperclone, 
> and it was able to recover the log some times I have seen.
> And 2 people wrote to me reporting the same problem. So I've got myself to 
> inform the whole community.

I haven't looked at how ddrescue writes the map file, but a better
approach would probably be to write the new map file to a temporary
file on the same filesystem, and then renaming it over the old one,
eg:

fd = open(“map.new”, O_WRONLY);
write(fd, buf, bufsize);
fsync(fd);
close(fd);
rename(“map.new”, “map”);

This is atomic, and ensures that the map file will always be a
complete and recent version. In this case there is no need for manual
verification of the map file in case it looks valid but is possibly
incomplete. This is a standard approach used to make sure a file is
never in a corrupted/incomplete state.

Regards, Ketil



reply via email to

[Prev in Thread] Current Thread [Next in Thread]