Предлагаю собирать тут свои поучительные ошибки.
Моя свежая история:
Несколько лет назад записывал док фильмы cd-резаком на cd болванки.
Когда cd-дисков стало много начал перезаписывать их на dvd-болванки
(естесственно, другим резаком - dvd-резаком), а cd отдавал или выбрасывал.
Все старые диски считывались без проблем. Вдруг в один день пошли
проблемные диски - некоторые файлы фильмов в самом конце их считывания
перстали считываться. И так и сяк пробовал - не хотят.
Я тогда поставил програмку для считывания проблемных дисков (BadCopy pro).
Она ОЧЕНЬ долго возилась, какие-то файлы считала (не корректно), какие-то
я не выдерживал и прекращал процесс так как он длился больше часа.
А потом я случайно выяснил что все эти проблемные cd-диски были записаны
в режиме overburn. То есть, кто-то рипал кино в размер чуть больше cd и
поскольку мне каждый раз пережимать от него видео было влень, я решил
попробовать писать в режим overburn. Конечно, я тогда убедился что все
считывалось нормально и аппаратный dvd/divx-плеер эти диски читал.
А теперь dvd-drive эти overburn-диски не берет. Для dvd драйвов вообще overburn не используется.
НО!
Самое плохое оказалось то, что после этих издевательств програмкой новый dvd-drive стал читать и писать все диски только на скорости x1. То есть, 1 час запись и 1 час проверка.
Я сомневался, что BadCopy pro как-о переобучило этот драйв чтобы он работал
на 1-й скорости для чтения проблемных дисков и он таким и остался.
Скорее предполагал что он разюстировался при многочисленных попытках работать в
недоступной зоне cd-дисков или перегрелся от слишком продолжительного режима работы.
То, что он теперь записывал, dvd/divx-плеер читает, но как-то боязно
было писать таким кривым драйвом - потом, может, другой плеер не сможет их читать, да и очень долго - два часа с проверкой.
Я, конечно тут же купил другой dvd-резак по интернету за 18$.
Но мысль о "починке" меня посещала периодически так как
драйв был хороший (IDE) Sony DRU-830A - он и сейчас в инете 70$ стоит.
ОКАЗАЛОСЬ, что драйв цел и невредим!
Винда молча вывела его из режима DMA и ввела его в режим PIO (Programmed Input Output).
Чтобы убедиться в этом мне достаточно было сделать одно из следующих:
1) сделать uninstall драйва и install по-новой.
2)воткнуть его в другой компьютер
3)загрузиться из другой конфигурации операционки
4)запустить специальный VB-script:
Код:
|
' Visual Basic Script program to reset the DMA status of all ATA drives
' Copyright © 2006 Hans-Georg Michna
' Version 2006-03-14
' Works in Windows XP, probably also in Windows 2000 and NT.
' Does no harm if Windows version is incompatible.
If MsgBox("This program will now reset the DMA status of all ATA drives with Windows drivers." _
& vbNewline & "Windows will redetect the status after the next reboot, therefore this procedure" _
& vbNewline & "should be harmless.", _
vbOkCancel, "Program start message") _
= vbOk Then
RegPath = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\"
ValueName1 = "MasterIdDataChecksum"
ValueName2 = "SlaveIdDataChecksum"
ValueName3 = "ResetErrorCountersOnSuccess"
MessageText = "The following ATA channels have been reset:"
MessageTextLen0 = Len(MessageText)
SubsequentMisses = 0
Set WshShell = WScript.CreateObject("WScript.Shell")
For i = 0 to 999
RegSubPath = Right("000" & i, 4) & "\"
' Master
Err.Clear
On Error Resume Next
WshShell.RegRead RegPath & RegSubPath & ValueName1
e1 = Err.Number
Err.Clear
On Error Goto 0
If e1 = 0 Then
On Error Resume Next
WshShell.RegDelete RegPath & RegSubPath & ValueName1
On Error Goto 0
MessageText = MessageText & vbNewLine & "Master"
End If
' Slave
Err.Clear
On Error Resume Next
WshShell.RegRead RegPath & RegSubPath & ValueName2
e2 = Err.Number
On Error Goto 0
If e2 = 0 Then
On Error Resume Next
WshShell.RegDelete RegPath & RegSubPath & ValueName2
On Error Goto 0
If e1 = 0 Then
MessageText = MessageText & " and "
Else
MessageText = MessageText & vbNewLine
End If
MessageText = MessageText & "Slave"
End If
If e1 = 0 Or e2 = 0 Then
On Error Resume Next
WshShell.RegWrite RegPath & RegSubPath & ValueName3, 1, "REG_DWORD"
On Error Goto 0
ChannelName = "unnamed channel " & Left(RegSubPath, 4)
On Error Resume Next
ChannelName = WshShell.RegRead(RegPath & RegSubPath & "DriverDesc")
On Error Goto 0
MessageText = MessageText & " of " & ChannelName & ";"
SubsequentMisses = 0
Else
SubsequentMisses = SubsequentMisses + 1
If SubsequentMisses ›= 32 Then Exit For ' Don't search unnecessarily long.
End If
Next ' i
If Len(MessageText) ‹= MessageTextLen0 Then
MessageText = "No resettable ATA channels with Windows drivers found. Nothing changed."
Else
MessageText = MessageText & vbNewline _
& "Please reboot now to reset and redetect the DMA status."
End If
MsgBox MessageText, vbOkOnly, "Program finished normally"
End If ' MsgBox(...) = vbOk
' End of Visual Basic Script program |
Этот скрипт, кроме инициализации устройств, делает еще одну очень полезную штуку. Он добавляет в реестр запись для сброса счетчика ошибок, как только блок будет считан нормально. Т.е., пока секторы хоть изредка читаются, счетчик ошибок при каждом успешном чтении сектора обнуляется. Переход в PIO может произойти только в случае, если подряд будет очень много ошибок (без этой записи Виндовоз все время суммирует ошибки на драйве и по достижении критического числа сбрасывает драйв в PIO).
P.S: а считывать такие overburn cd-диски теперь буду на компе где
не dvd-драйв, а cd-драйв, затем перегонять по локалке на комп с dvd-резаком.
Не пишите cd-диски в режиме overburn - потом пожалеете...