[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