Столкнулся с ситуацией, когда при чтении 1CD-файла (БП 2.0) возникают CRC-ошибки, т.е. файл физически не читается. Лечение и тестирование не помогают, увы. Оказалось, даже просто скопировать поврежденный файл - проблема. Выяснил, что физически поврежденные блоки находятся в районе 10Мб (а файл больше гигабайта), поэтому я предположил, что это не данные, а какая-то из конфигураций. Еще есть архив трехмесячной давности и конфигурация с тех пор точно не менялась. Как перенести правильные куски конфигурации из старого файла в новый?
Пришлось написать маленькую консольную утилиту, которая читает битый файл порциями по 4096 байт (8 блоков по 512, стандартный размер кластера в NTFS) и пишет эту порцию в новый файл. Если возникает ошибка чтения, то выдается сообщение ERR "номер ошибки" "позиция от начала файла". Для CRC-ошибки номер 32 (а других я не видел) и в выходной файл пишется блок "*ERROR* нулевые байты...". Однако можно указать старый файл и в этом случае порция будет считана из него (с той же позиции, как и в битом файле). В процессе копирования выводится начальный адрес читаемой порции (один раз на 1000 порций).
Можно изменить размер считываемой порции, указав ключ -n (n=1..8, количество 512-байтовых блоков в порции), но для NTFS это приводит только к замедлению работы, а толку - никакого. Однако этот ключ может помочь, когда размер кластера меньше 8 блоков (при чтении с флешки или маленького FAT/FAT32 раздела).