A DVD+R disc I recorded (i.e., not copy protected) many years ago
appears to have developed an uncorrectable error in one of its low
numbered blocks. As a result, it gets "unreadable" or "bad format" on
all the DVD drives and stand-along DVD (or blu-ray) players I've tried
it on.
When I put the disk in a DVD drive on a system running FreeBSD, and on
which automount is never enabled or run, some presumably low-level part
of the system tries to read the first few blocks of the disc and fails
with:
[the exact CDB numbers change a little from error to error]
(cd0:ahcich3:0:0:0): READ(10). CDB: 28 00 00 00 00 00 00 00 01 00 (cd0:ahcich3:0:0:0): CAM status: SCSI Status Error (cd0:ahcich3:0:0:0):
SCSI status: Check Condition (cd0:ahcich3:0:0:0): SCSI sense: MEDIUM
ERROR asc:11,5 (L-EC uncorrectable error)
(cd0:ahcich3:0:0:0): Error 5, Unretryable error (cd0:ahcich3:0:0:0):
cddone: got error 0x5 back
and, despite what the error message says, it retries and retries and
retries to the point that it almost ignores the Eject button.
My goal is to copy all the readable blocks to a file, in the hope of recovering as many of the video recordings on it as possible.
Is there a way to stop (or prevent) that tray-just-closed
read-fail-retry loop and leave things in a state where I can run "dd -noerror"?
Two things to try:
- ddrescue (ports: sysutils/ddrescue). This will copy what it can and
you can ask it to keep trying.
- dvdisaster (ports: sysutils/dvdisaster). Graphical interface. Really
for generating recovery data but has a simple copy-all-it-can mode.
Is there a way to stop (or prevent) that tray-just-closed
read-fail-retry loop and leave things in a state where I can run
"dd -noerror"?
Bob Eager <news0073@eager.cx> kindly replied:
Two things to try:
- ddrescue (ports: sysutils/ddrescue). This will copy what it can and
you can ask it to keep trying.
- dvdisaster (ports: sysutils/dvdisaster). Graphical interface. Really
for generating recovery data but has a simple copy-all-it-can mode.
OK, those are good to know about and sound better than "dd -noerror".
Thanks!
After reading the descriptions for them, though, I didn't see anything regarding halting or preventing the read-fail-keep-retrying problem I
saw:
Two things to try:
- ddrescue (ports: sysutils/ddrescue). This will copy what it can and
you can ask it to keep trying.
- dvdisaster (ports: sysutils/dvdisaster). Graphical interface. Really
for generating recovery data but has a simple copy-all-it-can mode.
OK, those are good to know about and sound better than "dd -noerror".
Thanks!
After reading the descriptions for them, though, I didn't see anything
regarding halting or preventing the read-fail-keep-retrying problem I
saw:
Let's just say that I don't observe that in practice, certainly with dvdisaster. (I am the port maintainer).
I can't remember what happens with ddrescue.
I was testing dvdisaster, and took a Swiss Army knife to a CD-R after I'd written it. Carved lots of deep grooves in it. dvdisaster read as much as
it could, fairly quickly. Since I'd added recovery infortmation in that
case, I got all of the data back, which you wouldn't of course.
Anyway, just try them and see.
New info:
I decided to try letting the read-fail-retry loop run to see if maybe it would eventually stop on its own. IT DID (yay!), but it took more than
4 1/2 minutes and issued lots of MEDIUM ERROR (L-EC uncorrectable error) complaints before doing so.
Now that that's stopped, I've been able to try recovery. It looks like
a lot more of the low-numbered sectors than I'd guessed have errors, but
once it got past those, some 96.4% has been recovered so far. :)
What did you use? dvdisaster or ddrescue?
Bob Eager <news0073@eager.cx> writes:
What did you use? dvdisaster or ddrescue?
Since you'd said you were the port maintainer for dvdisaster, I looked
at that first, but pkg said installing dvdisaster would also require installing gcc9 (I have no idea why a pre-compiled executable would
require installing a compiler), binutils, and mpc, which came to almost
400M, so I checked ddrescue. It's only 134k and had no other
dependencies, so I went with that.
* ddrescue question:
The last portion of my DVD+R is blank because there wasn't enough
space left for another recording. Visually, the disc has an outer
ring of 2mm of blank recording surface.
When ddrescue got to about 142MB "non-tried", it instantly changed
from reading successfully at full speed to getting read errors on
every sector.
Does that mean it's read all the useful data and it's now reading the
blank sectors at the end, or could "non-tried" sectors be
interspersed throughout the recovered data? Should I expect to see
MEDIUM ERRORs when something tries to read never-written sectors on a
CD-R or DVD+R?
* It'd be nicer if there weren't 6 lines worth of error messages written
to the system log file for every one of these hundreds of read errors,
though ... :-/
On Sun, 08 Nov 2020 23:48:31 -0500, Winston wrote:
Bob Eager <news0073@eager.cx> writes:
What did you use? dvdisaster or ddrescue?
Since you'd said you were the port maintainer for dvdisaster, I looked
at that first, but pkg said installing dvdisaster would also require
installing gcc9 (I have no idea why a pre-compiled executable would
require installing a compiler), binutils, and mpc, which came to almost
400M, so I checked ddrescue. It's only 134k and had no other
dependencies, so I went with that.
That would be my fault, although I'll have to look into gcc as a build
time dependency as it isn't quite specified in the normal way.
What did you use? dvdisaster or ddrescue?
Since you'd said you were the port maintainer for dvdisaster, I looked
at that first, but pkg said installing dvdisaster would also require
installing gcc9 (I have no idea why a pre-compiled executable would
require installing a compiler), binutils, and mpc, which came to almost
400M, so I checked ddrescue. It's only 134k and had no other
dependencies, so I went with that.
That would be my fault, although I'll have to look into gcc as a build
time dependency as it isn't quite specified in the normal way.
OK, I see why now.
I'm using gcc because that's what the dvdisaster author said. Given that
this is all about data integrity, I didn't want to risk using clang and subtly breaking something that might not be noticed until someone tried
to recover data.
gcc is a run time dependency because it carries run time stuff with it
that may be used. The other things are there because gcc makes them a dependency.
dvdisaster does a lot more than read bad discs, though. Its primnary
purpose is to take a CD or DVD (no more than about 80% full) and
calculate recovery data that it sticks in all the spare space - the more
the better. If you get errors, you can read the disc back into an image
file (as you did with ddrescue). Then you can tell it to use the recovery data to recover the lost data. And it works.
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 379 |
Nodes: | 16 (2 / 14) |
Uptime: | 71:39:55 |
Calls: | 8,084 |
Calls today: | 2 |
Files: | 13,069 |
Messages: | 5,849,953 |