version 1.0 rc1 (0.994)
!
ПРОГРАММА СОДЕРЖИТ В СЕБЕ ФУНКЦИИ, НЕПРАВИЛЬНОЕ ИСПОЛЬЗОВАНИЕ КОТОРЫХ ПРИВОДИТ К НАРУШЕНИЮ РАБОТОСПОСОБНОСТИ ОПЕРАЦИОННОЙ СИСТЕМЫ, НЕОБРАТИМОМУ УНИЧТОЖЕНИЮ ДАННЫХ.
АВТОР НЕ НЕСЁТ НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА ВОЗМОЖНЫЕ СБОИ В РАБОТЕ ПРОГРАММЫ, ПОТЕРЮ ДАННЫХ И ПОРЧУ ОБОРУДОВАНИЯ В ПРОЦЕССЕ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ ИЗ-ЗА ОШИБОК В ПРОГРАММЕ ИЛИ НЕКВАЛИФИЦИРОВАННЫХ ДЕЙСТВИЙ ПОЛЬЗОВАТЕЛЯ. ПОЛЬЗОВАТЕЛЬ ВОЛЕН ИСПОЛЬЗОВАТЬ ПРОГРАММУ НА СВОЙ СТРАХ И РИСК ИЛИ НЕ ИСПОЛЬЗОВАТЬ ВООБЩЕ.
Flashnul - утилита по проверки работоспособности и обслуживанию Flash-памяти (USB-Flash, IDE-Flash, SecureDigital, MMC,MemoryStick, SmartMedia, XD, CompactFlash и т.д.). Список выполняемых операций:
dd
из UNIX).
dd
из UNIX).
Все тесты выполняются на уровне абстракции блочных устройств и могут применяться по отношению и к другим типам носителей (floppy, HDD, CD, etc).
Сменные носители на базе flash-памяти (такие как usb-flash drives, SD, MMC, MS,XD, MD, CompactFlash, IDE-flash etc) в силу ряда особенностей (hot-plug подключение, воздействие статики, влаги, температуры, механических воздействий при траспортировке, естественный износ из-за ограниченного числа циклов чтения/записи) относительно часто выходят из строя (хотя и реже жёстких дисков)
Простые дефекты вроде "не определяется", "ошибки записи" обнаруживаются относительно легко без использования специализированного ПО, но диагностика более сложных дефектов представляет из себя весьма нетривиальную задачу.
Обычные HDD-тесты в проверке устройств целиком полагаются на контроллер устройства в определении правильности считывания. Либо сектор не читается, либо он читается правильно. К сожалению, для Flash-носителей это не так, и относительно часты случаи, когда прочитанное не совпадает с записанным, или запись в один сектор повреждает другие сектора. Такие дефекты можно определить "полевыми испытаниями" - записью архивированных данных с последующей проверкой, некоторым периодом интенсивного чтения-записи файлов. Однако, такие "доморощенные" тесты не дают твёрдой уверенности в полной работоспособности устройства. Flashnul сначала создавался для служебных нужд (удобной и быстрой проверки работы USB-flash устройств), но потом вырос до универсального теста.
Ближайшим аналогом flashnul является memtest, проверяющий работу оперативной памяти. В какой-то степени flash-память больше похожа (по дефектам) на обычную оперативную память, чем на жёсткий диск.
Кроме того, есть ряд программных "дефектов" (если быть точным, некорректных действий пользователей), приводящих к зависанию при обращении к логическому диску, соответствующему устройству. Чаще всего это некорректная таблица разделов или ошибки файловой системы. Самый простой способ "вылечить" их - это уничтожить всю информацию на флешке (занулить - собственно, от этого процесса и идёт название утилиты).
Flashnul - это средство диагностики, а не лечения устройств, если тест говорит, что устройство работает некорректно, значит, оно работает некорректно.
Простить сделать так, чтобы flashnul "вылечил" флешку всё равно, что просить, чтобы memtest "вылечил" битую память.
В ряде случев можно воспользоваться утилитами производителя (они доступны не всегда) и исправить ошибки путём низкоуровнего форматирования. В большинстве же случаев не остаётся ничего другого, кроме как обратиться в гарантию (или к мусорной корзинке — в зависимости от сроков). Просьба не обращаться ко мне за подобными программами, я их не предоставляю
ВНИМАНИЕ!
Большая часть тестов деструктивные - они уничтожают информацию с flash-устройства, перед использованием рекомендуется сделать резеврную копию данных. КАТЕГОРИЧЕСКИ запрещено отключение устройства во время выполнения теста, это может привести к физическому повреждению устройства.
NT-based операционная система (windows 2000, XP, 2003, возможно NT4, Vista - не проверял). Процессор - от 686 (P2 и выше), 4Мб свободной оперативной памяти. (поддержку более старых процессоров можно включить, поменяв опцию -march в src\Makefile на нужную, например, на i486 и перекомпилировав исходные тексты) Для полноценной работы программы требуются права локального администратора. Информация о поддержке горячей замены у устройств выводится только в Windows XP и выше.
Утилита вызывается в одном из трёх режимов:
Команда вывода списка доступных устройств:
flashnul -p
или flashnul -p=число
Команда выводит список логических и физических дисков в системе (если программа запускается
не от имени администратора список физических дисков будет пуст).
Список выглядит примерно так:
Avaible physical drives: 0 size = 10005037056 (9 Gb) 1 size = 1040187392 (992 Mb) 2 size = -1 ( -not avaible- ) 3 size = -1 ( -not avaible- ) 4 size = 513802240 (490 Mb) 5 size = -1 ( -not avaible- ) Avaible logical disks: C:\ type=3 (Fixed) D:\ type=5 (CD/DVD) E:\ type=3 (Fixed) F:\ type=2 (Removable) G:\ type=2 (Removable) H:\ type=2 (Removable) I:\ type=2 (Removable) Z:\ type=2 (Removable)Строчка -not avaible- означает, что устройство в системе есть, но получить к нему доступ невозможно. Чаще всего это картридер без вставленной карты памяти. Если подобная строчка выводится для подключенного flash-устройства, это признак неисправности устройства.
В случае необходимости часть вывода можно отключить. Для этого используется числовой параметр у опции -p. Значения:
Для более тонкой настройки вывода можно использовать дополнительные флаги, отключающие вывод части информации (флаги объединяются при помощи двоичного "или"):
Для выполнения операций в командной строке следует указать диск, для которого должна выполняться операция и название самой операции. Если операция не будет указана (будет указан только диск), то будет после выведения информации о диске программа завершит свою работу.
Существует два основных метода указания диска:
flashnul 2
, flashnul 3
, flashnul 0
.
flashnul a:
, flashnul d:
, flashnul E:
Помимо основных методов есть возможность указать путь к устройству в UNC форме или в форме hadware enumerator. (Эти методы не нужны при обычном использовании программы). примеры:
запуск c именем (номером диска) без параметров показывает информацию об устройстве в стиле:
Disk PhysicalDrive2 (UNC name: \\.\PhysicalDrive2) ------------------------------------------------------------[Drive geometry]-- Cylinders/heads/sectors = 63/255/63 Bytes per sector = 512 CHS size = 518192640 (494 Mb) ---------------------------------------------------------------[Device size]-- Device size = 524288000 (500 Mb) delta to near power of 2 = 12582912 (12 Mb), 2% Surplus size = 6095360 (5952 kb) -----------------------------------------------[Adapter & Device properties]-- Bus type = (7) USB Removable device = Yes Command Queue = Unsupported Device vendor = Pretec Device name = i-Disk Revision = 2.00 --------------------------------------------------------------[Hotplug info]-- Device hotplug = Yes Media hotplug = No
[Drive geometry] — информация о размере диска в факторизации по количеству цилиндров, треков, секторов, количеству байт в секторе (CHS-адресация). Для современных устройств это скорее условность, чем настоящий размер. Выводимая информация:
[Free Space] — свободное/занятое пространство на диске (разделе). Информация имеет смысл только для форматированного раздела. В силу особенностей программы эта информация доступна только при открытии диска с общим доступом на запись (по-умолчанию отключен, включается опцией --write-share). Выводимая информация:
[Device size] — размер устройства. В случае работы с физическими дисками эти величины показывают данные относительно размера устройства, в случае с (несколькими) логическими дисками на устройстве эти величины показывают данные относительно диска, на котором раздел находится. Выводимая информация:
[Adapter & Device properties] — данные об устройстве и шине подключения. (та информация, которая недоступна просто не выводится, например, для многих устройств отсутствуют данные о ревизии). Выводимая информация:
[Hotplug info] — информация о «горячем» подключении. Доступна только при работе в Windows XP или старше (не поддерживается в Windows 2000/NT). Выводимая информация:
За один вызов можно выполнить не более одной операции. Имя операции указывается или в полном, или в сокращённом виде. Полное имя начинается с --, сокращённое с -.
Короткое имя | Длинное имя | Описание | Пример вызова |
-R | --read | Тест чтения. | flashnul 0 -R
|
-T | --test | Стандартный тест записи/чтения (уничтожает информацию на устройстве) | flashnul 2 -T
|
-Q | --quick | Быстрый тест чтения/записи (относительно безопасен) | flashnul f: -Q
|
-F | --fill | Заполняет все сектора указанным байтом (затирает). По-умолчанию затирает нулём | flashnul z: -F flashnul z: -F=5
|
-I | --incremental | Запуск специфичного инкрементального теста (для проверки на ошибки контроллера). Уничтожает информацию на устройстве. | flashnul x: -I -V=2
|
-B | --blank | Стирает первый сектор на устройстве | flashnul y: -B
|
-S | --save | Сохраняет образ устройства в файл (имя файла указывается после опции) | flashnul D: -S c:\image
|
-L | --load | Загружает файл (образ) в устройство | flashnul D: -L c:\image
|
Поведение многих опций может быть изменено с помощью опций-модификаторов. Они могут указываться
как отдельно, так и рядом с опцией выбора операции (-T -P
эквивалентно -TP
).
Короткое имя | Длинное имя | Описание | Пример вызова |
-V | --verify | Режим проверки записи (0,1,2,3) | flashnul 2 -F -V=3
|
-P | --no-prompt | Отключить запрос на деструктивные операции (осторожно!) | flashnul 2 -TP
|
-i | --ignore-errors | Не останавливаться после первой ошибки | flashnul -S c:\image -i
|
-c | --cycle | Количество циклов тестирования | flashnul 2 -T -c=3
|
-b | --block-size | Размер блока в операциях чтения/записи | flashnul G: -F -b=512
|
-r | --range | диапазон, в котором проводятся операции. Принимает 1 или 2 числа, если числа нет, предполагается "от начала" (или "до конца"). | flashnul -F -r=512;1024
|
-m | --mode | для -I опции указывает режим тестирования (0 - инкрементальная запись, 1 - шахматная) | flashnul 4 -I -m=1 -c=10
|
-k | --disable-key | выключает запрос [Enter] в конце теста | flashnul K: -FTk
|
-d | --delay | Интервал времени (в сек.) перед началом второго теста чтения в режимах тестирования -T и -I. | flashnul J: -T -d=3600
|
--write-share | Открывать устройство в режиме "общего доступа на запись". Тестирование в этом режиме может быть ошибочным, но он полезен для выполнения операций за заблокированными устройствами | flashnul C: --write-share -F
| |
--ignore-block | Игнорировать блокировки из конфигурационного файла. |
По завершении работы выводится результат:
----------------------------------------------------------[Operation result]-- passes: 1 errors: 0 read bytes: 1048576000 (1000 Mb) avg. read speed: 5361130 (5235 kb/s) max/min read speed: 7744769 (7563 kb/s) / 626065 (611 kb/s) write bytes: 524288000 (500 Mb) avg. write speed: 4652118 (4543 kb/s) max/min write speed: 7845525 (7661 kb/s) / 679353 (663 kb/s)
В данном режиме затирается нулевой сектор устройства или диска, проверяется его читаемость, проверяется правильность записанного. Данный тест предназначен для:
После выполнения утилиты данные на разделе не уничтожаются, но доступ к ним средствами операционной системы будет невозможен, для восстановления в случае ошибочного выполнения следует использовать утилиты восстановления информации с повреждённых носителей.
flashnul 1 -B
Стирает загрузочный сектор на втором физическом диске.
flashnul f: -B -P
или flashnul f: -BP
Стирает загрузочный сектор на диске F:
без подтверждения операции (осторожно!)
flashnul g: -B -P -k
или flashnul g: -BPk
Стирает загрузочный сектор на диске G:
без подтверждения, с автозавершением приложения.
В данном режиме осуществляется заполнение устройства указанным байтом (по-умолчанию нулём). Опция, указывающая этот режим может принимать числовой параметр от 0 до 255 — байт заполнения. Опция --range может изменять область заполнения (по-умолчанию всё устройство).
Данный тест предназначен для:
flashnul 3 -F
Заполнить нулями четвёртое физическое устройство. (осторожно! Информацию восстановить будет невозможно!)
flashnul 5 -F=200
Заполнить шестое физическое устройство байтом 200 (0xC8)
flashnul e: -F --range=0;2048 -P
Заполнить на диске E:
нулём байты с нулевого по 2048ой.
flashnul h: -F=255 -V=3 -P -k
Записать числом 255 (0xFF) устройство H:
, произвести двойную проверку записи (см описание --verify), без подтверждения, по завершению операции закрыть приложение.
Данный тест предназначен для полного тестирования устройства (это основной режим тестирования). В сектора устройста записывается последовательность байтов, зависящая от номера устройства. Этот режим позволяет контролировать правильность записи, отсутствие влияния записи в один сектор на содержимое другого сектора. Существуют два режима для данного теста, режим -m=0 (по-умолчанию) и -m=1.
тест -I -m=0 (или просто -I) осуществляет запись возрастающей последовательности. Это позволяет обнаружить ошибки "промаха" в записи, появляющийся у некоторых контроллеров.
тест -I -m=1 осуществляет запись "шахматки" (комбинацию 0xFF, 0x0). Это, фактически, самый простой тест для выявления ошибок записи. Он задан в виде готовой опции -T (которая равна -I -m=1 -V=3)
flashnul -I D: -V=3
Выполнить инкрементальную проверку для диска D:, осуществить двойную проверку на чтение (см. --verify)
flashnul 1 -I -m=1 -V=3 -c=10 -d=10 -P -k -i
Выполнить десять циклов (-c=10) проверки второго физического устройства в режиме 1, игнорируя ошибки (-i), без подтверждения выполнения операции, с завершением программы по окончании теста.
flashnul -I 3 -r=512;1024
Записать 512 байт со смещения 512 последовательностью на физическом устройстве 3
Данный тест осуществляет проверку читаемости устройства (эта операция безопасна), используется для простейшей проверки работоспособности устройства, измерения скорости записи.
flashnul C: -R
Проверка чтения для диска C:
flashnul D: -R -r=1024;2048
Проверка читаемости секторов со смещения 1024 до смещения 2048 на диске D:
Сохараняет образ устройства в файл, имя файла должно быть указано после параметра (например, -S c:\image). Содержимое устройства не меняется, операция безопасна. Можно использовать символ '-' (дефис) для указания stdout. Существует ряд ограничений на работу с файлами образов:
Другими словами, образ всегда должен находиться на рабочем устройстве.
flashnul f: -S e:\backup.img
Сохранить образ диска F:
в файл e:\backup.img
flashnul D: -S - -r=0;2048
Скопировать первые 2048 байт диска D:
и вывести их в stdout (2048 байт - размер сектора на CD).
flashnul 2 -S saveimage -i
Скопировать с третьего устройства содержимое в файл saveimage игнорируя ошибки чтения с устройства (ошибка записи в файл завершит работу программы).
flashnul 2 -S - |gzip -c -9>c:\image.gz
Сохранить образ третьего устройства в архивном файле image.gz (используется утилита gzip).
Загружает содержимое файла в устройство, затирая старое его содержимое. (Обратная к -L). Эта операция необратимо уничтожает содержимое устройства. Обязательный параметр - имя существующего файла или '-' для указания stdin. Опция -i (игнорировать ошибки) относится только к файловым операциям с диском, но не с файлом (при первой же ошибке работа программы будет остановлена).
flashnul A -L c:\floppy.img
Загрузить образ на диск А (дискету).
cat c:\image.gz | gzip -d |flashnul 2 -L -
Загрузить в третье устройство образ (разархивировав).
flashnul 5 -L c:\myfile -r=2048
Загрузить содержимое файла в шестое устройство со смещения 2048.
Фактически, режим тестирования -T, это объединение стандартных настроек для -I (-T == -I -V=3 -c=2 -d=10 -m=1). Этот режим - наиболее часто вызываемый режим тестирования.
flashnul Z: -T
Запуск тестирования устройства Z:
Режим быстрого тестирования устройства. Суть теста: проверяются на чтение и запись первые 512 байт из каждых 64к устройства. Так как флеш-память выходит из строя обычно крупными блоками, такая проверка находит большинство сбоев. (Однако, прохождение быстрого теста не говорит о работоспособности, для уверенности в работоспособности нужно выполнить несколько проходов полного теста).
Данный тест не должен повреждать данные (т.к. исходные данные пишутся обратно), но в определённых случаях на сбойных устройствах запись на диск может быть прервана, и данные будут повреждены. Режим -V (проверки) для данного теста не учитывается.
flashnul F: -Q
Это недеструктивный тест записи. Его алгоритм - блок данных читается с устройства в память и пишется обратно. Данный тест не позволяет выявить сложные ошибки (вроде порчи данных), но позволяет проверить каждый сектор на доступность чтения/записи. Т.к. во время теста осуществляется запись на устройство, отключать его категорически нельзя - данные могут быть повреждены. Так же, в случае если флешка "умирает", может произойти ошибка записи и данные так же будут повржедены. Так же, если диск открыт в режиме "общего доступа на запись" (WRITE_SHARE), возможны ошибки из-за одновременной записи в одинаковые блоки.
flashnul Z: -U
Устанавливает режим проверки записи на устройство. В настоящий момент существуют 4 режима:
Для опции -S существует только один режим проверки (вне зависимости от режима, либо проверка выключена (-V=0), либо включена, любое другое число). При этом после записи каждого блока осуществляется его чтение и проверка.
Режим -V=3 является необходимым для выявления большинства ошибок с порчей данных на устройстве.
Опция предназачена для пропуска ошибок при выполнении операций с устройством (по-умолчанию при возникновении ошибки работа программы завершается). (Замечание: игнорируются ТОЛЬКО ошибки работы с устройством, файловые ошибки работы с образами по-прежнему завершают программу).
Опция для разрешения совместного доступа к устройству. По-умолчанию диск открывается без общего доступа на запись, и в ряде случаев Windows может запретить такой режим. Write-share позволит осуществить операцию и с заблокированными устройствами, однако, в этом режиме возможна ситуация одновременной записи на диск flashnul'ом и сторонней утилитой, что приведёт либо к ложному срабатыванию теста, либо к повреждению записанных данных.
Отключает запрос о выполнении записи на устройство. (Осторожно - в этом случае ошибка в букве или цифре уничтожит, возможно, важные данные без дополнительного предупреждения).
Количество циклов операции. Имеет смысл только для -T, -F, -I режимов. Количество
циклов указывается через пробел или знак "=". (Например, flashnul 3 -T -c 5
)
Диапазон, в котором выполнять операцию. Может принимать одно или два значения, разделённые точкой с запятой (начало-конец). Величины - байты от начала устройства. Значения должны быть кратными размеру сектора.
Размер блока данных при операциях чтения/записи. По-умолчанию 64кб при работе с блочными устройствами, 4кб при работе с stdin/stdout (чтение/записи образ). Размер должен быть кратен размеру сектора, для ряда устройств есть ограничение на максимальный размер блока данных.
Задержка перед чтением записанного для режимов -V=2 и -V=3 в секундах.
По-умолчанию flashnul читает файл конфигурации flashnul.conf, лежащий "рядом" с исполняемым файлом (в той же директории).
Каждая строка в файле — отдельная директива. Символ '#' (октоторп) указывает на комментарий (весь текст за символом до конца строки считается комментарием).
Директивы, подразумевающие несколько значений могут указываться несколько раз, в этом случае их параметры объединяются.
Файл конфигурации имеет больший приоритет, чем командная строка (если парметр указан в командной строке и в файле используется значение из файла, кроме случаев, когда значения объединяются).
--ignore-block
Отдельные параметры работы программы могут быть изменены только при перекомпиляции, изменением значений переменных в файле finetune.h:
Исходный текст программы приведён в каталоге src. Для компиляции использовался gcc version 3.4.2 (mingw-special).
(с) George Shuklin, gs@shounen.ru, 2005-2008
http://shounen.ru/soft/flashnul/
Данная программа распространяется под лицензией GNU PUBLIC LICENCE, текст которой (на английском языке) приведён в файле copying.
АВТОР ГАРАНТИРУЕТ ОТСУТСТВИЕ ПРЕДУМЫШЛЕННО ДОБАВЛЕННЫХ ВРЕДОНОСНЫХ И ШПИОНСКИХ ФУНКЦИЙ В ПРОГРАММЕ.