saramibreak / DiscImageCreator

This is the disc (CD, GD, DVD, HD-DVD, BD, GC/Wii, XBOX, XBOX 360) and disk (Floppy, MO, USB etc) image creation tool
http://forum.redump.org/topic/10483/discimagecreator/
Apache License 2.0
530 stars 45 forks source link

Feature Request - Resume support for any DVD format #164

Open ehw opened 1 year ago

ehw commented 1 year ago

Is your feature request related to a problem? Please describe. DiscImageCreator supports resume when using the /re command when coupled with the /raw command (specifically for Wii/GC dumps). This is great, as using this command in a supported drive is pretty slow and could take a long time. Also, certain drives might be able to read problematic parts of the disc better than others.

I don't see why this command couldn't apply to normal DVDs as well? I don't think there is a DVD based format that doesn't have 2048 bytes worth of user data when output to an .iso file. You could easily resume where you left off since the .iso will always be divisible by 2048 bytes, so you can figure out the LBA you left off at by just dividing the current .iso size by 2048. Then tell the drive to seek to that LBA and resume while appending to the .iso file.

This would be ideal in instances where one might dump a disc with many errors that are read is a particular way in one drive in comparison to the other. For instance, if I have a DVD that reads up until a certain sector consistently but I encounter an area of the disc that the drive has an issue with, I could resume from where the error occurred in the same drive after cleaning the disc or in another drive that might read the problematic section better.

Describe the solution you'd like Let the user use the /re paramter with DiscImageCreator without /raw for DVD based discs.

Describe alternatives you've considered Can't really think of any alternative to this...

Additional context One thing though, that I'm unsure if using the /raw mode considers. Even though in theory the media itself will be the same before and after resuming, the drive might not be. I've never used the /raw command myself (yet), but I don't know if DiscImageCreator will append or create new logs when different drives are used when using the /re command. If not, DIC should append or create new drive related logs when the /re command is used. In order for the /re command to be used, the output filename and directory needs to be identical between commands. So if I wanted to resume "Disc1.iso", I need to use "DiscImageCreator dvd Disc1.iso 24 /re" to resume it.

saramibreak commented 1 year ago

It's easy to stop reading the disc for Wii/GC dumping, but normal DVDs are not so.

ehw commented 1 year ago

How come? Does the 0xE7 opcode offer more flexibility when seeking? Is there MSF information or sector headers like in MODE 1/2 data tracks for CDs that's exposed when using the raw command? I've never seen a dump made with /raw before so I'm not sure what allows it to be easier to implement...

saramibreak commented 1 year ago

How come?

You can understand it if you dump Wii/GC disc using DIC. Some supported drive often stop with the error code. So /re is needed. But normal DVDs do not often stop AFAIK.

If you know easy-to-stop DVDs, tell me please.

ehw commented 1 year ago

What about in an instance the drive stops anyway due to exhausting /rr attempts?

For example: I have a dump of a DVD-R that has a total of 2129695 data sectors (according to _disc.txt) that for one reason or another, failed 1000 reread attempts at LBA 1895680. This is evidenced by the last entry in the log:

LBA[1895680, 0x1ced00]: [F:ReadDVD][L:331]
    Opcode: 0xa8
    ScsiStatus: 0x02 = CHECK_CONDITION
    SenseData Key-Asc-Ascq: 02-04-01 = NOT_READY - LUN_NOT_READY - BECOMING_READY
Read retry from 1895680 (Pass 1000/1000)

LBA[1895680, 0x1ced00]: [F:ReadDVD][L:331]
    Opcode: 0xa8
    ScsiStatus: 0x02 = CHECK_CONDITION
    SenseData Key-Asc-Ascq: 02-04-01 = NOT_READY - LUN_NOT_READY - BECOMING_READY

DIC stopped the dump, but kept the .iso file. The resulting .iso file is 3,882,352,640 bytes in size. Dividing this file by 2048 bytes gives me 1895680, which is the LBA the drive failed to read and stopped at.

Knowing the total amount of data sectors in a disc and knowing where DIC left off at by using size of .iso divided by 2048, couldn't I simply use the /r (startLBA) (EndLBA) command to dump the remainder of the disc and just append the output to the .iso (so /r 1895680 2129695)? If I could, then why couldn't DIC do something similar when using the /re command for non-raw DVD reads?

Maybe I still don't understand what you mean, but wouldn't it not matter if certain DVDs are easier to stop? If the resulting .iso file from one incomplete read attempt exists, and if the end LBA can be determined, couldn't you always resume no matter what? Of course, maybe not every drive can easily seek to an LBA at will. Is this what you mean?

Hope this helps. Apologies if I'm wasting your time. :)

saramibreak commented 1 year ago

failed 1000 reread attempts at LBA 1895680

Its sector can read by "Extract DVD-R " or "Extract From-To" of the Isobuster?

ehw commented 1 year ago

We did Extract From-To, starting from 1895680 to 2129695 in ISOBuster and the 708uf. It successfully read it, it started reporting errors again at 1933088 but it never made it this far before.

You can see the logs for this disc in #165.

ehw commented 1 year ago

We dumped the entire disc in the 708uf in ISOBuster, no issue. We were able to dump the disc in another drive with DIC, no errors at all in the log, the dumps matched.

saramibreak commented 1 year ago

I hope changing the drive, not support resuming...