speed47 / dvdisaster

A tool providing additional ECC protection for optical media (unofficial version)
https://dvdisaster.jcea.es
GNU General Public License v3.0
283 stars 20 forks source link

RS03 algorithm does not completely recover the data #43

Closed averov90 closed 2 years ago

averov90 commented 3 years ago

I used the latest release version (0.79.6 patchlevel 8).

I checked the work of this program on CD-R before the clean recording and found out that the RS03 algorithm does not give full recovery for any damage (even small).

I have a CD-R 703 MB with 80% fullness was supplemented to 701 MB with 22.6% redundancy (47 roots) using the RS03 algorithm.

After that, on the working surface of the disc, I draw a small red circle with a disc marker. The program cannot read some of the information and is forced to restore the image using ECC.

In this case, 94.9% of all sectors were successfully read. The "corruption" was in the middle of the disk, before the start of the ECC segment (I suppose), so the restore should have returned the entire image to me. However, the data was not fully recovered!

Only 19393 sectors were damaged, but only 92.5% were recovered as a result. Redundancy - 20% of all disk space. Ultimately, 1449 sectors were not rebuilt. Because of this, I did not receive all the information that was originally recorded. Why weren't the mistakes corrected? (I assume this is a software bug.)

A software problem is also hinted at by the error correction graph (attached). Oddly enough, recovery errors are spike-shaped and repeat at roughly equal intervals.

shot

speed47 commented 3 years ago

I did a few tests and never observed that! Could you maybe share a photo of your CDROM, so that I can try to reproduce the same thing? I have a few CD-Rs to spare.

averov90 commented 3 years ago

Unfortunately, I didn't have a broken disk. However, the test disk was not even one and all showed incomplete recovery. After a series of tests, I realized that the problem was in the program.

The RS03 discs has already been discarded. However, I can say that this disc was made by Verbatim (exactly the same as in the attached photo): CD-R

The dvdisaster settings were as follows (the program does not support switching languages, so there are pieces of text in Russian): settings

For simplicity, in recent "damage" tests I have drawn circles on the disc with a red disc marker. This made it very difficult for the laser to read the painted parts. And my marker also supported the "erase" feature (this is a marker defect), so that I could erase the drawn circle, after which the stained area was read again.

The surface of the non-soiled disc looked something like this: perspective anfas

And the surface of the stained disk looked like this (points added through Photoshop, but in reality they were about the same): anfas_corrupted

In fact, there weren't many scratches on the discs tested. More precisely, there were no scratches at all. There were only red points (or even one point).

The disk from the photo is the RS02 algorithm test disk. This disk is simply not readable completely due to the frizzy paint (you can see the remnants of a red stripe in the upper part), but thanks to redundancy, the data is completely restored.

speed47 commented 3 years ago

So, I recreated a data disc as close as I could than yours, with the information you provided.

I created an ISO with random files in it, with a size of 567 MB, so that when I added RS03 correction data to it, I ended up with 22.6% redundancy (47 roots), exactly as you did:

rs03_mediuminfo

Then, I burnt this ISO file to a CD-R, and asked dvdisaster to read the data from the CD-R:

rs03_before_scratch

Interestingly, my CD-R already has a few read errors at the end (the CD-R I used is a bad noname quality, so this is to be expected). The error is in the ECC range, so the actual data is okay, as can be seen with the "verify" button:

rs03_before_scratch_verify

Then, I added 3 red spots with a marker, roughly to the same locations than yours, here is a photo of the disc:

discphoto

Now, reading it again with dvdisaster. As expected, we get more errors zones:

rs03_redspots_read

Now, let's use the verify button so that dvdisaster validates the image, each data/crc/ecc block it contains, and tells us whether it thinks this is repairable:

rs03_redspots_verify

Apparently it is! Let's go ahead and use the "fix" button:

rs03_redspots_fix

The data is recovered. This graph looks very different from yours: you never have less than ~15 errors, on all blocks it seems. My guess here is that you had a bad burned disc (aka toast), and that so much of it has been unreadable from the start, even without scratches or red spots, that the ECC data added by dvdisaster can't possibly save it, as can be seen by the constant ~15 errors on each and every block. Did you try to read the disc right after burning it, and before applying the red spots to it?

averov90 commented 3 years ago

Yes, I tried it. It was read completely and without speed drops. It is worth saying that I used imgburn with the lowest write speed allowed. I chose the minimum allowable speed among those supported by the disk.

I have spoiled discs in many ways. Starting from laying the disc in the sun, finishing adding scratches and freezing it in water, as well as chewing discs under an ultraviolet lamp. All this was extremely ineffective. Maybe lay the disc under the lamp for a couple of months, it would give results. I also tried to "brew" the disks. At a temperature of about 90 degrees, the disks were actively deteriorating. Only 1 disc withstood boiling for 30 seconds at 90-100 degrees Celsius and could be read. And it was on this that I first discovered the strange behavior of dvdisaster. Other discs did not survive: some had the foil peeled off, some were extremely rusted due to moisture on the reflective layer, one disc exploded in the drive...

Eventually I came up with an idea with markers. And it worked. To be honest, I do not understand why problem not reproducing. Perhaps the point is really that the dots are too small. It is also worth mentioning that I drew not only dots, but also rectangles. Including rather large (about 1 cm^2).

However, I repeat, I have a magic marker that can be erased from the disk with any rag. If your marker doesn't wear off like this, add redness slowly.

Also I noticed that in your speed graph (link), the speed never drops to zero. I was falling. It is worth clarifying that I did not weld the discs that I tested with the marker. I did not scratch them or freeze them. I just drew on them. I wrote about other experiments to the question of the quality of disks. They are really good. Even 15 seconds at 100 degrees is a victory (given that the official threshold is 90).

The experiment with markers as a whole was repeated many times. There were always sharp peaks. It seems to me that such a sharp peak is clearly something that should not be in normal operation. And besides, I gave above the statistics of one of the disks (the last one). Still, he had to recover to the end in theory.

If it doesn't work for you, I can try to reproduce the problem myself again. Only in this case, I do not know how to transfer data.

P.S. On this picture: link i've selected SSE2, BUT in my case have being selected other variant - auto. As I can to remember, dvdisaster used a SSE2 (as it displayed me), but I can't guarantee, that is was a REALLY what the dvdisaster used.

speed47 commented 3 years ago

I added some more red marks, up to getting this result in the read phase:

rs03_more

After the first read cycle, the verify phase said that it had too many errors to be repaired. So in Options > Read attempts, I went from "skip 16 sectors after read error" to "skip 0 sectors after read error", and relaunched a read phase. It went and tries to read the missing sectors without skipping any. It took some hours before reading correctly just enough sectors for the repair to be possible (I stopped it before it reached the end of the disc a second time), and the verify phase was now like this:

rs03_verify

And the repair phase:

rs03_fullrepaired

After repair, the verify is flawless:

rs03_afterrepair

So I can't seem to be able to reproduce your issue :(

If you're willing to try it again, please grab the latest version (patchlevel 9), it doesn't have many differences, but adds more verbose log output in the read phase. To enable logging, please go to the Misc tab of the options, tick "Verbose logging" and "copy to log file". Of course, you can choose the log file location as you see fit. Maybe in this log it'll become apparent why you have these red spikes on 7 of your ECC blocks.

averov90 commented 2 years ago

I recently returned to the topic of disk redundancy and ran my experiments again. This time I took the newer version for the recording of the disc (https://github.com/speed47/dvdisaster/release/tag/v0.79.10-pl1).

Here is the log record:

Spoiler ``` * * dvdisaster 0.79.10 (unstable-unofficial patchlevel 1) build GUI-speed47.build1, Mingw * logging started at Sat Jan 15 12:58:52 2022 * Открытие T:\RET.iso ExamineUDF(File: T:\RET.iso) Examining the ISO file system... Sector 16: Volume descriptor type = 1 Volume descriptor version = 1 Standard identifier = CD001 -> primary volume descriptor: System identifier : |WIN32 | Volume identifier : |RET | Volume space size : 271985 sectors Volume set size : 1 Volume sequence size : 1 Logical block size : 2048 Path table size : 10 bytes L-Path table location : 19 Opt L-Path table location : 0 M-Path table location : 20 Opt M-Path table location : 0 Volume creation date/time : 15-01-2022 12:51:12.00 Volume modification d/t : 15-01-2022 12:51:12.00 Volume expiration d/t : 00-00-0000 00:00:00.00 Volume effective d/t : 00-00-0000 00:00:00.00 File structure version : 1 Sector 17: Volume descriptor type = 2 Volume descriptor version = 1 Standard identifier = CD001 -> supplementary volume descriptor: *skipped* Sector 18: Volume descriptor type = 255 Volume descriptor version = 1 Standard identifier = CD001 -> volume descriptor set terminator; end of ISO file system parsing. Examining the UDF file system... not yet implemented. ExamineECC() started ...trying RS01 ...trying RS02 RS02Recognize: file T:\RET.iso try_sector: trying sector 271985 try_sector: read error, trying next header try_sector: trying sector 271835 try_sector: no cookie, skipping current modulo RS02Recognize: No EH, entering exhaustive search FindHeaderInMedium: Trying modulo 4611686018427387904 FindHeaderInMedium: Trying modulo 2305843009213693952 FindHeaderInMedium: Trying modulo 1152921504606846976 FindHeaderInMedium: Trying modulo 576460752303423488 FindHeaderInMedium: Trying modulo 288230376151711744 FindHeaderInMedium: Trying modulo 144115188075855872 FindHeaderInMedium: Trying modulo 72057594037927936 FindHeaderInMedium: Trying modulo 36028797018963968 FindHeaderInMedium: Trying modulo 18014398509481984 FindHeaderInMedium: Trying modulo 9007199254740992 FindHeaderInMedium: Trying modulo 4503599627370496 FindHeaderInMedium: Trying modulo 2251799813685248 FindHeaderInMedium: Trying modulo 1125899906842624 FindHeaderInMedium: Trying modulo 562949953421312 FindHeaderInMedium: Trying modulo 281474976710656 FindHeaderInMedium: Trying modulo 140737488355328 FindHeaderInMedium: Trying modulo 70368744177664 FindHeaderInMedium: Trying modulo 35184372088832 FindHeaderInMedium: Trying modulo 17592186044416 FindHeaderInMedium: Trying modulo 8796093022208 FindHeaderInMedium: Trying modulo 4398046511104 FindHeaderInMedium: Trying modulo 2199023255552 FindHeaderInMedium: Trying modulo 1099511627776 FindHeaderInMedium: Trying modulo 549755813888 FindHeaderInMedium: Trying modulo 274877906944 FindHeaderInMedium: Trying modulo 137438953472 FindHeaderInMedium: Trying modulo 68719476736 FindHeaderInMedium: Trying modulo 34359738368 FindHeaderInMedium: Trying modulo 17179869184 FindHeaderInMedium: Trying modulo 8589934592 FindHeaderInMedium: Trying modulo 4294967296 FindHeaderInMedium: Trying modulo 2147483648 FindHeaderInMedium: Trying modulo 1073741824 FindHeaderInMedium: Trying modulo 536870912 FindHeaderInMedium: Trying modulo 268435456 FindHeaderInMedium: Trying modulo 134217728 FindHeaderInMedium: Trying modulo 67108864 FindHeaderInMedium: Trying modulo 33554432 FindHeaderInMedium: Trying modulo 16777216 FindHeaderInMedium: Trying modulo 8388608 FindHeaderInMedium: Trying modulo 4194304 FindHeaderInMedium: Trying modulo 2097152 FindHeaderInMedium: Trying modulo 1048576 FindHeaderInMedium: Trying modulo 524288 FindHeaderInMedium: Trying modulo 262144 try_sector: trying sector 262144 try_sector: no cookie, skipping current modulo FindHeaderInMedium: Trying modulo 131072 Sector 262144 cached; skipping modulo FindHeaderInMedium: Trying modulo 65536 Sector 262144 cached; skipping modulo FindHeaderInMedium: Trying modulo 32768 Sector 262144 cached; skipping modulo FindHeaderInMedium: Trying modulo 16384 Sector 262144 cached; skipping modulo FindHeaderInMedium: Trying modulo 8192 try_sector: trying sector 270336 try_sector: no cookie, skipping current modulo FindHeaderInMedium: Trying modulo 4096 Sector 270336 cached; skipping modulo FindHeaderInMedium: Trying modulo 2048 Sector 270336 cached; skipping modulo FindHeaderInMedium: Trying modulo 1024 try_sector: trying sector 271360 try_sector: no cookie, skipping current modulo FindHeaderInMedium: Trying modulo 512 try_sector: trying sector 271872 try_sector: no cookie, skipping current modulo FindHeaderInMedium: Trying modulo 256 Sector 271872 cached; skipping modulo FindHeaderInMedium: Trying modulo 128 Sector 271872 cached; skipping modulo FindHeaderInMedium: Trying modulo 64 try_sector: trying sector 271936 try_sector: no cookie, skipping current modulo FindHeaderInMedium: Trying modulo 32 try_sector: trying sector 271968 try_sector: no cookie, skipping current modulo ...trying RS03 RS03RecognizeImage: file T:\RET.iso FindRS03HeaderInImage: file T:\RET.iso RS03RecognizeImage: No EH, entering exhaustive search .. trying layer size 1409 Scanning layers for signatures. - layer slice 0 RS03: try number = 1, reading sector 118356 RS03: try number = 2, reading sector 119765 RS03: try number = 3, reading sector 121174 RS03: try number = 4, reading sector 122583 RS03: try number = 5, reading sector 123992 RS03: try number = 6, reading sector 125401 RS03: try number = 7, reading sector 126810 RS03: try number = 8, reading sector 128219 RS03: try number = 9, reading sector 129628 RS03: try number = 10, reading sector 131037 RS03: try number = 11, reading sector 132446 RS03: try number = 12, reading sector 133855 RS03: try number = 13, reading sector 135264 RS03: try number = 14, reading sector 136673 RS03: try number = 15, reading sector 138082 RS03: try number = 16, reading sector 139491 RS03: try number = 17, reading sector 140900 RS03: try number = 18, reading sector 142309 RS03: try number = 19, reading sector 143718 RS03: try number = 20, reading sector 145127 RS03: try number = 21, reading sector 146536 RS03: try number = 22, reading sector 147945 RS03: try number = 23, reading sector 149354 RS03: try number = 24, reading sector 150763 RS03: try number = 25, reading sector 152172 RS03: try number = 26, reading sector 153581 RS03: try number = 27, reading sector 154990 RS03: try number = 28, reading sector 156399 RS03: try number = 29, reading sector 157808 RS03: try number = 30, reading sector 159217 RS03: try number = 31, reading sector 160626 RS03: try number = 32, reading sector 162035 RS03: try number = 33, reading sector 163444 RS03: try number = 34, reading sector 164853 RS03: try number = 35, reading sector 166262 RS03: try number = 36, reading sector 167671 RS03: try number = 37, reading sector 169080 RS03: try number = 38, reading sector 170489 RS03: try number = 39, reading sector 171898 RS03: try number = 40, reading sector 173307 RS03: try number = 41, reading sector 174716 RS03: try number = 42, reading sector 176125 RS03: try number = 43, reading sector 177534 RS03: try number = 44, reading sector 178943 RS03: try number = 45, reading sector 180352 RS03: try number = 46, reading sector 181761 RS03: try number = 47, reading sector 183170 RS03: try number = 48, reading sector 184579 RS03: try number = 49, reading sector 185988 RS03: try number = 50, reading sector 187397 RS03: try number = 51, reading sector 188806 RS03: try number = 52, reading sector 190215 RS03: try number = 53, reading sector 191624 RS03: try number = 54, reading sector 193033 RS03: try number = 55, reading sector 194442 RS03: try number = 56, reading sector 195851 RS03: try number = 57, reading sector 197260 RS03: try number = 58, reading sector 198669 RS03: try number = 59, reading sector 200078 RS03: try number = 60, reading sector 201487 RS03: try number = 61, reading sector 202896 RS03: try number = 62, reading sector 204305 RS03: try number = 63, reading sector 205714 RS03: try number = 64, reading sector 207123 RS03: try number = 65, reading sector 208532 RS03: try number = 66, reading sector 209941 RS03: try number = 67, reading sector 211350 RS03: try number = 68, reading sector 212759 RS03: try number = 69, reading sector 214168 RS03: try number = 70, reading sector 215577 RS03: try number = 71, reading sector 216986 RS03: try number = 72, reading sector 218395 RS03: try number = 73, reading sector 219804 RS03: try number = 74, reading sector 221213 RS03: try number = 75, reading sector 222622 RS03: try number = 76, reading sector 224031 RS03: try number = 77, reading sector 225440 RS03: try number = 78, reading sector 226849 RS03: try number = 79, reading sector 228258 RS03: try number = 80, reading sector 229667 RS03: try number = 81, reading sector 231076 RS03: try number = 82, reading sector 232485 RS03: try number = 83, reading sector 233894 RS03: try number = 84, reading sector 235303 RS03: try number = 85, reading sector 236712 RS03: try number = 86, reading sector 238121 RS03: try number = 87, reading sector 239530 RS03: try number = 88, reading sector 240939 RS03: try number = 89, reading sector 242348 RS03: try number = 90, reading sector 243757 RS03: try number = 91, reading sector 245166 RS03: try number = 92, reading sector 246575 RS03: try number = 93, reading sector 247984 RS03: try number = 94, reading sector 249393 RS03: try number = 95, reading sector 250802 RS03: try number = 96, reading sector 252211 RS03: try number = 97, reading sector 253620 RS03: try number = 98, reading sector 255029 RS03: try number = 99, reading sector 256438 RS03: try number = 100, reading sector 257847 RS03: try number = 101, reading sector 259256 RS03: try number = 102, reading sector 260665 RS03: try number = 103, reading sector 262074 RS03: try number = 104, reading sector 263483 RS03: try number = 105, reading sector 264892 RS03: try number = 106, reading sector 266301 RS03: try number = 107, reading sector 267710 RS03: try number = 108, reading sector 269119 RS03: try number = 109, reading sector 270528 RS03: try number = 110, reading sector 271937 ** All layers tested -> no RS03 data found ...no augmented image detected. GetImageFingerprint(16): read & cached : 271985 секторов носителя. Calculated layout for RS03 image: data sectors = 271985 data padding = 1359 layer size = 1409 total sectors = 359295 medium capacity = 359424 header position = 271985 first CRC sector = 273346 first ECC sector = 274755 ndata = 195 nroots = 60 (30.8%) CrcBufValid: crcbuf==NULL Cache allocation: 99840K+16384K+15360K=128M (data+parity+descrambling) Образ увеличен за счет добавления данных для исправления ошибок. Новый размер образа 701 МБ (359295 секторов). Ср. производительность: 1.47s (365.39МБ/с) в сумме ```

Here is the check log immediately after recording:

Spoiler ``` * dvdisaster 0.79.10 (unstable-unofficial patchlevel 1) build GUI-speed47.build1, Mingw * logging started at Sat Jan 15 13:17:35 2022 * # *** OpenImageFromDevice(E:) *** # InquireDevice returned: ASUS DRW-24B3ST 1.00 Устройство: E:, ASUS DRW-24B3ST 1.00 # *** query_type(ASUS DRW-24B3ST 1.00, 0) *** # *** get_configuration(ASUS DRW-24B3ST 1.00) *** # 188 data len, 8 current -> profile 8: CD-ROM # trying READ DISC INFORMATION for size # size returned is 32 # trying READ DISC INFORMATION for real info 0000: 00 20 0e 01 01 01 01 80 00 00 00 00 00 99 24 15 . ...... ......$. 0010: ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00 ........ ........ # status is e, disc type 0 #CD: starting media probe #CD: querying size of READ TOC/PMA/ATIP (for TOC) #CD: size returned is 20 #CD: querying real READ TOC/PMA/ATIP (for TOC) 0000: 00 12 01 01 00 14 01 00 00 00 00 00 00 14 aa 00 ........ ........ 0010: 00 05 7b 7f ..{. #CD: control is 0x14 #CD: querying size of READ TOC/PMA/ATIP (for full TOC) #CD: size returned is 48 #CD: querying real READ TOC/PMA/ATIP (for full TOC) 0000: 00 2e 01 01 01 14 00 a0 00 00 00 00 01 00 00 01 ........ ........ 0010: 14 00 a1 00 00 00 00 01 00 00 01 14 00 a2 00 00 ........ ........ 0020: 00 00 4f 34 2d 01 14 00 01 00 00 00 00 00 02 00 ..O4-... ........ #CD: 1 sessions #CD: CD medium detected, type: CD-ROM mode 1 # query_type() returned. # deciding reading strategy... Используется READ CD. GetImageFingerprint(16): read & cached ExamineUDF(Device: ASUS DRW-24B3ST 1.00) Examining the ISO file system... Sector 16: Volume descriptor type = 1 Volume descriptor version = 1 Standard identifier = CD001 -> primary volume descriptor: System identifier : |WIN32 | Volume identifier : |RET | Volume space size : 271985 sectors Volume set size : 1 Volume sequence size : 1 Logical block size : 2048 Path table size : 10 bytes L-Path table location : 19 Opt L-Path table location : 0 M-Path table location : 20 Opt M-Path table location : 0 Volume creation date/time : 15-01-2022 12:51:12.00 Volume modification d/t : 15-01-2022 12:51:12.00 Volume expiration d/t : 00-00-0000 00:00:00.00 Volume effective d/t : 00-00-0000 00:00:00.00 File structure version : 1 Sector 17: Volume descriptor type = 2 Volume descriptor version = 1 Standard identifier = CD001 -> supplementary volume descriptor: *skipped* Sector 18: Volume descriptor type = 255 Volume descriptor version = 1 Standard identifier = CD001 -> volume descriptor set terminator; end of ISO file system parsing. Examining the UDF file system... not yet implemented. # *** read_capacity(ASUS DRW-24B3ST 1.00) *** -> 359294 ExamineECC() started ...trying RS01 ...trying RS02 RS02Recognize: medium E: try_sector: trying sector 271985 try_sector: no cookie, skipping current modulo try_sector: trying sector 271835 try_sector: no cookie, skipping current modulo RS02Recognize: quick RS02 search, attempting up to 3 sector reads max Medium rewriteable: FALSE FindHeaderInMedium: Trying modulo 4611686018427387904 FindHeaderInMedium: Trying modulo 2305843009213693952 FindHeaderInMedium: Trying modulo 1152921504606846976 FindHeaderInMedium: Trying modulo 576460752303423488 FindHeaderInMedium: Trying modulo 288230376151711744 FindHeaderInMedium: Trying modulo 144115188075855872 FindHeaderInMedium: Trying modulo 72057594037927936 FindHeaderInMedium: Trying modulo 36028797018963968 FindHeaderInMedium: Trying modulo 18014398509481984 FindHeaderInMedium: Trying modulo 9007199254740992 FindHeaderInMedium: Trying modulo 4503599627370496 FindHeaderInMedium: Trying modulo 2251799813685248 FindHeaderInMedium: Trying modulo 1125899906842624 FindHeaderInMedium: Trying modulo 562949953421312 FindHeaderInMedium: Trying modulo 281474976710656 FindHeaderInMedium: Trying modulo 140737488355328 FindHeaderInMedium: Trying modulo 70368744177664 FindHeaderInMedium: Trying modulo 35184372088832 FindHeaderInMedium: Trying modulo 17592186044416 FindHeaderInMedium: Trying modulo 8796093022208 FindHeaderInMedium: Trying modulo 4398046511104 FindHeaderInMedium: Trying modulo 2199023255552 FindHeaderInMedium: Trying modulo 1099511627776 FindHeaderInMedium: Trying modulo 549755813888 FindHeaderInMedium: Trying modulo 274877906944 FindHeaderInMedium: Trying modulo 137438953472 FindHeaderInMedium: Trying modulo 68719476736 FindHeaderInMedium: Trying modulo 34359738368 FindHeaderInMedium: Trying modulo 17179869184 FindHeaderInMedium: Trying modulo 8589934592 FindHeaderInMedium: Trying modulo 4294967296 FindHeaderInMedium: Trying modulo 2147483648 FindHeaderInMedium: Trying modulo 1073741824 FindHeaderInMedium: Trying modulo 536870912 FindHeaderInMedium: Trying modulo 268435456 FindHeaderInMedium: Trying modulo 134217728 FindHeaderInMedium: Trying modulo 67108864 FindHeaderInMedium: Trying modulo 33554432 FindHeaderInMedium: Trying modulo 16777216 FindHeaderInMedium: Trying modulo 8388608 FindHeaderInMedium: Trying modulo 4194304 FindHeaderInMedium: Trying modulo 2097152 FindHeaderInMedium: Trying modulo 1048576 FindHeaderInMedium: Trying modulo 524288 FindHeaderInMedium: Trying modulo 262144 try_sector: trying sector 262144 try_sector: no cookie, skipping current modulo FindHeaderInMedium: Trying modulo 131072 Sector 262144 cached; skipping modulo FindHeaderInMedium: Trying modulo 65536 try_sector: trying sector 327680 try_sector: no cookie, skipping current modulo FindHeaderInMedium: Trying modulo 32768 Sector 327680 cached; skipping modulo FindHeaderInMedium: Trying modulo 16384 try_sector: trying sector 344064 try_sector: no cookie, skipping current modulo ...trying RS03 RS03RecognizeImage: medium E: FindRS03HeaderInImage: medium E: FindRS03HeaderInImage(): Header found at pos +0 ...augmented image found # Calling query_size() # *** query_size(ASUS DRW-24B3ST 1.00) *** Medium size obtained from ECC header: 359295 sectors # returned: 359295 sectors Носитель "Top Secret": CD-ROM mode 1, 359295 секторов, Ecc, создан 15-01-2022. Просмотр носителя на наличие ошибок чтения. Чтение CRC-информации из ecc-данных (RS03) ... Calculated layout for RS03 image: data sectors = 271985 data padding = 1359 layer size = 1409 total sectors = 359295 medium capacity = 0 header position = 271985 first CRC sector = 273346 first ECC sector = 274755 ndata = 195 nroots = 60 (30.8%) готово. Задержка на 5 секунд для раскручивания привода... Все сектора успешно прочитаны. Контрольные суммы совпадают. CrcBuf contents, image path none (medium): crcSize: 359295, dataSectors: 271985, coveredSectors: 273346, allSectors: 359295 md5State: data_complete image_complete data: 2322207d5791bf4fa4eb28680f37b7e2 full: 608e4f18440db106a4f42b4070e03dca fp sector: 16; 3e8f85492dd18b1cd8806bf00a851d9f missing crcs: 0 FreeCrcBuf - buffer cleared ```

Next, I gave a disk a little lie under the straight sunshine. Later painted several points and performed reading on the same version. When reading, damaged sectors were reset. However, an attempt to restore was completed successfully. I painted a different number of points of different sizes, but earlier the error no longer appeared. After that, I took the old version: https://github.com/speed47/dvdisaster/releases/tag/v0.79.6-pl8

The results were as follows: Shot

After starting, the correction got the following: Shot

Log of reading and correction

Unfortunately, I could not reproduce the problem again, although I took enough attempts. Probably the error is not reproduced due to the fact that I performed the addition of the image in a newer version.

Probably the problem was in the algorithm that complemented the image of the error correction data. In the new version, this error apparently corrected. I will hope for it :)

As far as I understood, RS03 is still at the stage of development (there is a remark about it in the program), so it's not worth using it on a serious basis.

P.S.

I noticed that when using the RS03 algorithm, redundancy is less than when using RS02. RS03 turns out less roots.

Why is this happening? It turns out, the RS03 algorithm is less effective?

speed47 commented 2 years ago

Thanks for the detailed report. It's nice to see that you couldn't reproduce the problems you had previously, and that RS03 seems to work correctly for you now. About RS03 maturity, the original author recently removed the mention of "work in progress" on this codec, so it can be considered as complete. Now, RS02 has been around for a longer time, so you might consider it as more mature, it's really up to you. You are correct in noticing that RS03 has slightly less error correction data available compared to RS02. This can be seen in the quick comparison table on the front page, under "space efficiency", you'll see that RS03 has 4 stars, while RS02 has 5. This is, however, completely normal: this is the "price" to pay for increased resiliency. Indeed, RS03 is more resistant to corruption, as there is no "master block", as this is the case for RS02. This means that corruption can happen anywhere on the media, if you've been using RS03, then error correction data will still be found no matter what. With RS02, if you're very unlucky and the corruption happens on the master block, then RS02 correction data will not be found, even if it's present and could be used. So, that's all really a matter of personal preference and the tradeoff you want to make. That's also why RS01, RS02 and RS03 are all available and supported: you get to choose which one fits your preference, as each codec has its pros & cons.

averov90 commented 2 years ago

OK, thanks for the clarification. Now this issue can be considered closed, since the problem been solved. Thanks.