≡ Передовица » Агат ↔ PC » Линк N 1 » программа для сведЕния образов дисков
программа для сведЕния образов дисковЭта программа позволяет сводить несколько образов одного и того же диска, сделанных многократно (на разных дисководах или просто несколько раз). Она ищет среди имеющихся образов сбойные сектора (заполненые константой 0xBD) и пытается объединить образы так, чтобы исключить как можно больше сбойных секторов. При этом также анализируется корректные сектора на предмет совпадения данных в них. Если обнаруживается расхождение, программа старается "лечить" все возможные версии диска. Скачать (~220 Кб). В этом архиве представлен исходный текст (FreePascal, турбой он не соберётся, так как использованы довольно крупные структуры данных), а также скомпилированные версии для FreeBSD 6.1 и MS-DOS (go32v2, идет также под любой Windows). Для каждого формата образов (140к и 840к) - свой исполняемый код. ПодробностиОна пытается из набора образов, снятых с одного диска, собрать один или более живой образ путем взаимной замены сбойных блоков живыми между имеющимися в наличии образами. Одновременно пытается понять, не случилось ли какого либо случайного сбоя при снятии образов путем сравнения живых секторов между собой. Если находятся образы, у которых одни и те же живые сектора различны, такие образы лечатся поотдельности - для последующего ручного анализа. Вводится понятие дистанции - числа различающихся блоков между образами. Чем короче дистанция, тем больше вероятность, что реставрация сбойных блоков будет правильной. По шагам действует она так:
Во время работы на stdout выводится довольно подробный отчет о проделанных действиях. Вывод удобно перенаправлять в файл и потом смотреть его:
!!! Образы ищутся в пределах текущего каталога, поэтому в нем должны присутствовать только образы одного и того же диска !!! Например (это вариант сравнения ранее присланного btk1 и ikpsrc7 - я так понял, это один и тот же диск) [мои комментарии начинаются с '-----']: ----- Читает изображения, составляет карту сбойных блоков >>> Find and loading images... Add BTK1.DSK image, 1362 bad block(s) Add SRCIKP7.DSK image, 14 bad block(s) ----- Такая фраза относится к найденным файлам, но они не были опознаны как образы l [0020] is not image ----- Здесь она просто сравнивает образы и удаляет из своего списка те, которые полностью совпадают ----- Если образ удаляется из списка, после его номера ставится буква 'd' >>> Compare and delete images... 0: BTK1.DSK - 1 1: SRCIKP7.DSK - ----- Расчет дистанций между образами >>> Calc and sort distance... 0: BTK1.DSK - 1:1350 ----- Сортировка образов в порядке увеличения дистанции [0.1:1350 ] 1: SRCIKP7.DSK - 0:1350 [0.0:1350 ] ----- Поиск сбойных блоков в каждом образе и попытка найти для них замену ----- Сектора внутри blender'а нумеруются подряд, начиная с 0, ----- но для удобства он в [] дает соответствие в формате tr/sc. >>> Cure images... ===== 0: BTK1.DSK ===== Sector 67 [3/4] cured from SRCIKP7.DSK, distance = 1350 Donor for sector 77 [3/14] not found :( Donor for sector 154 [7/7] not found :( Donor for sector 156 [7/9] not found :( Sector 163 [7/16] cured from SRCIKP7.DSK, distance = 1350 Sector 186 [8/18] cured from SRCIKP7.DSK, distance = 1350 ----- [skip] ===== 1: SRCIKP7.DSK ===== Donor for sector 77 [3/14] not found :( Donor for sector 154 [7/7] not found :( Donor for sector 156 [7/9] not found :( Donor for sector 275 [13/2] not found :( Donor for sector 292 [13/19] not found :( Donor for sector 949 [45/4] not found :( Donor for sector 1042 [49/13] not found :( Donor for sector 1464 [69/15] not found :( Donor for sector 1670 [79/11] not found :( Donor for sector 1671 [79/12] not found :( Donor for sector 2014 [95/19] not found :( Donor for sector 2299 [109/10] not found :( Donor for sector 2678 [127/11] not found :( ----- Процесс поиска повторяется до тех пор, пока хотя бы в одном образе удается ----- успешно заменить хотя бы один сбойный сектор. ----- Снова ищем и удаляем полностью совпадающие имейджы. >>> Compare and delete images... 0: BTK1.DSK - 1d ----- Сохраняем уникальные >>> Writing images... BTK1.DSK.rep saved В результате, после лечения двух образов, один из них был удален из результатов, т.к. не было найдено ни одного живого сектора, который бы в них различался. Причем, несмотря на то, что srcikp7 был гораздо живее, чем btk1, один сектор все же был выужен именно из btk1 (21/17) - в srcikp7 он не прочитался. -- В общем, это сейчас уже мелочь, наверное: поскольку образы обрабатываются в ОЗУ, причем статически распределяемом, blender может для своей работы зараз захавать до 50 МБт и более оперативки. -- Я использую blender как собранный для msdos так и для FreeBSD, но, вероятно, он легко соберется и для Windows и для Linux - в его коде нет никаких вывертов - чистые move и cmp + файловые операции. -- !! Сбойные сектора опознаются по признаку наличия во всех байтах сектора значения ¤BD. Эта концепция используется в dos33.exe и моих линках, но, например, у Игоря линк помечает сбои по другому: dos33.exe знает этот вариант пометки, но blener - нет, поэтому не стоит подсовывать blendеру диски с других линков - есть риск залечить насмерть !! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |