Re: Восстановление ПО в MP3-Плеер-ах на основе чипов Sigmatel
#9
Для flashnul 0.4
Для запуска распаковываем программу в отдельную папку и запускаем Total Commander или другой подобный файловый менеджер.
В командной строке пишем flashnul.exe f: (f-диск flash) показывается информация об устройстве в окне:
Disk f: (UNC name: \\.\f

-------------------------------------------------------
DeviceIoCtrl & IOCTL_DISK_GET_DRIVE_GEOMETRY reports:
Cylinders = 127
Tracks per cylinder = 255
Sectors per track = 63
Bytes per sector = 512
calculated disk size = 1044610560 (996Mb)
delta to near pow of two= 29131264 (27Mb)
-------------------------------------------------------
GetDiskFreeSpaceEx() reports:
free space = 1039834112
total bytes = 1048574976
-------------------------------------------------------
calculated disk size - это общий размер всего доступного места устройства, он должен быть меньше или равен total bytes. Если total bytes существенно меньше
calculated disk size, это признак наличия на устройстве некорректной таблицы разделов.
total bytes - это общий размер места на диске за исключением места, занятого служебной информацией файловой системы.
delta to near pow or tow - "расстояние" до ближайшей степени двойки. Значение порядка 5% от объёма диска нормально, величины больше 10% (т.е. 12Мб для 128, 100Мб для 1Гб) свидетельствуют об уменьшении ёмкости диска (обычно происходит при отключении контроллером повреждённых областей). Для жёстких дисков эта строка не имеет смысла.
Если GetDiskFreeSpaceEx() пишет "function failed" это означает, что устройство не имеет логической разметки (его надо отформатировать), ни о какой ошибке это не свидетельствует. GetDiskFreeSpaceEx() не вызывается для физических устройств.
В утилите flashnul предусмотрены следующие виды операций:
Удаление загрузочного сектора (или partition table), первого сектора устройства (опция -B, --blank). Это позволит решить проблемы с неверными размерами разделов и "спрячет" данные от операционной системы. Это очень быстрая операция, однако данные всё-таки возможно извлечть с помощью специальных утилит.
Заполнение всех секторов устройства числом заданным числом [0-255]. (опция -F, --fill). Если число не указано, используется 0. Эта опция позволяет "занулить" устройство, уничтожив при этом все данные на нём (за исключением secure area на некоторых видах устройств). Данный режим может помочь проверить устройство на запись (отсутствие сбойных секторов) и решить некоторые проблемы с неправильным определением и ошибками форматирования. Так же эта функция позволяет быстро уничтожить всю информацию на носителе (вместе с опцией -i - игнорированием ошибок) она может позволить подготовить устройство для передачи в гарантийное обслуживание в случае сбоев, уничтожив все конфиденциальные данные с устройства.
Инкрементальное заполнение диска. (опция -I). Эта опция предназначена для заполнения устройства специальной последовательностью чисел, которая повзоляет обнаружить (вместе с опцией -v=3) сложные случаи ошибок и сбоев контроллера.
Проверка читаемости всех секторов устройства (опция -r) В этом режиме прграмма просто читает все сектора подряд. При этом могут быть пропущены многие ошибки, и, фактически, проверки не производится. Однако в ряде случаев этот тест может помочь выявить самые простые сбои не повредив содержащейся на диске информации.
Сохранение образа диска в файл. (опция -S, --save). В качестве параметра должно быть указано имя файла или знак '-' для направления вывода в stdout. Если файл с указанным именем существует, операция не будет выполнена, даже если указана опция -i. Так же операция будет остановлена, если произойдёт ошибка при записи данных. Вместе с использованием опции --range она позволяет сохранять указанные области дисков (например, загрузочный сектор с дискеты или cd/dvd диска).
Запись образа диска из файла на устройство (опция -L, --load). Эта функция деструктивная, она уничтожает данные на устройстве, на которое производится запись. В качестве параметра указывается файл с образом или '-' для указания на stdin. В случае ошибок чтения из файла операция будет прервана. Вместе с опцией --range она позволяет записывать указанные сектора (на все устройства, кроме CD/DVD дисков). Размер файла должен быть кратен размеру сектора.
Программа работает как с физическими, так и с логическими дисками. Для указания логического диска используется его буква (например, C:, D: и т.д.). Для указания физического диска можно или использовать PhysicalDrive0, PhysicalDrive1 и т.д. (обратите внимание на нумерацию с 0), или \0, \1, \2 и т.д. Список физических устройств можно посмотреть опцией -p. Размер -1 в списке физических устройств указывает на то, что устройство есть, но не доступно (например, это слот подключенного картридера).
С физическими устройствами следует работать крайне осторожно, потому что в списке указываются ВСЕ физические диски (включая жёсткие диски), например, обычно \0 (PhysicalDrive0) - это жёсткий диск с которого загружена система.
ВНИМАНИЕ!
Во время выполнения любых тестов, связанных с записью на диск (-B, -I, -F, -L) отключение устройства не допускается, отключение во время записи может повлечь блокирование устройства контроллером и потерю работоспособности.
Синтаксис командной строки
flashnul [имя устройства] [опции]
Опции: -h --help справка по опциям -
-v --version версия программы -
-F --fill заполнение диска (или выбранного интервала) указанным значением (от 0 до 255), по-умолчанию 0. Уничтожает данные на устройстве
-I --incremental заполнение диска (или выбранного интервала) последовательностью байтов (опционально принимается число-модификатор последовательности) Уничтожает данные на устройстве
-R --read чтение содержимого диска (или выбранного интервала) безопасно
-B --blank Удаляет первый сектор диска (заполняет 0) Уничтожает таблицу раздела или boot record. Частичное уничтожение информации на устройстве.
-V --verify Режимы проверки записи (1,2 или 3) -
-P --no-prompt Не спрашивать подтверждения пользователя о деструктивных операциях !
-i --ignore-errors продолжать работу, если возникнет ошибка во время выполнения какой-либо операции с устройством. -
-c --cycle выполнять операцию указанное количество циклов (-F, -I, -R) Слишком большое количество циклов записи может привести к повреждению устройства из-за ограниченного количества циклов записи у flash-памяти
-p --probe вывести список физических устройств и логических дисков в системе безопасно
-L --load загрузить содержимое файла на диск, если вместо имени файла указать '-' будет использоваться stdin Приводит к полной или частичной потере информации на устройстве
-S --save сохранить содержимое диска (или части) в виде файла образа, если вместо имени файла указать '-' будет использоваться stdout безопасно
-b --block-size Указать размер блока для операций ввода/вывода (-I,-F,-R,-S,-L). Размер должен быть кратен размеру сектора. -
-r --range Указать диапазон адресов для операций чтения/записи. (два числа). Если второе число не указано, конец области совпадает с последним сектором диска. Если указанные значения выходят за количество секторов на диске используются значения размера диска -
Режимы верификации
Существует два режима проверки записи.
-V=1
При этом проверяется каждый записанный блок (он считывается в память и сравнивается с оригиналом, в случае различий выдаётся сообщение об ошибке).
-V=2
В этом режиме чтение и проверка соответствия содержимому производятся после завершения записи.
Режимы могут быть скомбинированы (-V=3), в этом случае проверка будет осуществляться дважды (после записи блока и после записи всего устройства (диапазона)).
Примеры вызова:
Запуск теста flash-диска "на ночь":
flashnul.exe \2 -I -V=3 -P -c=999
(вместо \2 следует указать номер диска (показывается в flashnul -p )).
Сохранение образа диска в файл:
flashnul \2 -S c:\image
(если файл c:\image существует, программа сообщит об ошибке)
Сохранение образа диска в виде архивированного файла:
flashnul \2 -S - |gzip -c -9>c:\image.gz
Утилита gzip - стандартная утилита unix, существуют её порты под windows.
Запись образа из файла
flashnul \2 -L c:\image
(если файла нет, запись произведена не будет)
Запись образа из сжатого файла
cat c:\image.gz | gzip -d |flashnul \2 -L -
Чтение загрузочного сектора с Flash в файл
flashnul G: -S c:\flashboot.bin -r=0;512
Чтение загрузочного сектора с компакт-диска (CD/DVD)
flashnul R: -S c:\cdboot.bin -r=0;2048
(у компакт-дисков и двд размер сектора - 2 килобайта)
Если флэш не форматируется, нужно снести 1-й сектор
flashnul f: -B,
Проверить геометрию
flashnul.exe f: -I -V=3 -P
Повторно обнулить 1-й сектор и отформатировать
ВНИМАНИЕ! Регистр (B и b) имеет значение.
Удачи!