Flashnul

утилита для очистки и диагностики сменных носителей.

version 1.0 rc2 (0.995)


!

ПРОГРАММА СОДЕРЖИТ В СЕБЕ ФУНКЦИИ, НЕПРАВИЛЬНОЕ ИСПОЛЬЗОВАНИЕ КОТОРЫХ ПРИВОДИТ К НАРУШЕНИЮ РАБОТОСПОСОБНОСТИ ОПЕРАЦИОННОЙ СИСТЕМЫ, НЕОБРАТИМОМУ УНИЧТОЖЕНИЮ ДАННЫХ.

АВТОР НЕ НЕСЁТ НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА ВОЗМОЖНЫЕ СБОИ В РАБОТЕ ПРОГРАММЫ, ПОТЕРЮ ДАННЫХ И ПОРЧУ ОБОРУДОВАНИЯ В ПРОЦЕССЕ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ ИЗ-ЗА ОШИБОК В ПРОГРАММЕ ИЛИ НЕКВАЛИФИЦИРОВАННЫХ ДЕЙСТВИЙ ПОЛЬЗОВАТЕЛЯ. ПОЛЬЗОВАТЕЛЬ ВОЛЕН ИСПОЛЬЗОВАТЬ ПРОГРАММУ НА СВОЙ СТРАХ И РИСК ИЛИ НЕ ИСПОЛЬЗОВАТЬ ВООБЩЕ.

КРАТКОЕ ОПИСАНИЕ

Flashnul - утилита по проверки работоспособности и обслуживанию Flash-памяти (USB-Flash, IDE-Flash, SecureDigital, MMC,MemoryStick, SmartMedia, XD, CompactFlash и т.д.). Список выполняемых операций:

Все тесты выполняются на уровне абстракции блочных устройств и могут применяться по отношению и к другим типам носителей (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 и выше.

Принцип работы

Утилита вызывается в одном из трёх режимов:

Показ доступных устройств

Замечание: для старых не Plug-n-play устройств результаты могут быть неполны или неточны.

Команда вывода списка доступных устройств:
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. Значения:

Для более тонкой настройки вывода можно использовать дополнительные флаги, отключающие вывод части информации (флаги объединяются при помощи двоичного "или"):

Выполнение операций

Для выполнения операций в командной строке следует указать диск, для которого должна выполняться операция и название самой операции. Если операция не будет указана (будет указан только диск), то будет после выведения информации о диске программа завершит свою работу.

Указание диска

Существует два основных метода указания диска:

  1. По номеру физического диска (соответствует номеру в списке физических устройств)
    например, flashnul 2, flashnul 3, flashnul 0.
  2. По букве логического диска (список доступных букв выводится в списке логических дисков, регистр буквы роли не играет.)
    например, flashnul a:, flashnul d:, flashnul E:

Помимо основных методов есть возможность указать путь к устройству в UNC форме или в форме hadware enumerator. (Эти методы не нужны при обычном использовании программы).
примеры:

  1. \\.\PhysicalDrive0
  2. \\?\ide#diskst310211a_______________________________6.55____#4436314248563752202020202020202020202020#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}

Информация о диске

запуск 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)

Подробное описание режимов работы

Режим -B (--blank)

В данном режиме затирается нулевой сектор устройства или диска, проверяется его читаемость, проверяется правильность записанного. Данный тест предназначен для:

После выполнения утилиты данные на разделе не уничтожаются, но доступ к ним средствами операционной системы будет невозможен, для восстановления в случае ошибочного выполнения следует использовать утилиты восстановления информации с повреждённых носителей.

Примеры вызова

flashnul 1 -B
Стирает загрузочный сектор на втором физическом диске.

flashnul f: -B -P или flashnul f: -BP
Стирает загрузочный сектор на диске F: без подтверждения операции (осторожно!)

flashnul g: -B -P -k или flashnul g: -BPk
Стирает загрузочный сектор на диске G: без подтверждения, с автозавершением приложения.

Режим -F (--fill)

В данном режиме осуществляется заполнение устройства указанным байтом (по-умолчанию нулём). Опция, указывающая этот режим может принимать числовой параметр от 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), без подтверждения, по завершению операции закрыть приложение.

-I --incremental

Данный тест предназначен для полного тестирования устройства (это основной режим тестирования). В сектора устройста записывается последовательность байтов, зависящая от номера устройства. Этот режим позволяет контролировать правильность записи, отсутствие влияния записи в один сектор на содержимое другого сектора. Существуют два режима для данного теста, режим -m=0 (по-умолчанию) и -m=1.

Тест -m=0

тест -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

-R, --read

Данный тест осуществляет проверку читаемости устройства (эта операция безопасна), используется для простейшей проверки работоспособности устройства, измерения скорости записи.

Примеры вызова

flashnul C: -R
Проверка чтения для диска C:

flashnul D: -R -r=1024;2048
Проверка читаемости секторов со смещения 1024 до смещения 2048 на диске D:

-S, --save

Сохараняет образ устройства в файл, имя файла должно быть указано после параметра (например, -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, --load

Загружает содержимое файла в устройство, затирая старое его содержимое. (Обратная к -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 --test

Фактически, режим тестирования -T, это объединение стандартных настроек для -I (-T == -I -V=3 -c=2 -d=10 -m=1). Этот режим - наиболее часто вызываемый режим тестирования.

Пример вызова

flashnul Z: -T
Запуск тестирования устройства Z:

-Q --quick

Режим быстрого тестирования устройства. Суть теста: проверяются на чтение и запись первые 512 байт из каждых 64к устройства. Так как флеш-память выходит из строя обычно крупными блоками, такая проверка находит большинство сбоев. (Однако, прохождение быстрого теста не говорит о работоспособности, для уверенности в работоспособности нужно выполнить несколько проходов полного теста).

Данный тест не должен повреждать данные (т.к. исходные данные пишутся обратно), но в определённых случаях на сбойных устройствах запись на диск может быть прервана, и данные будут повреждены. Режим -V (проверки) для данного теста не учитывается.

Пример вызова

flashnul F: -Q

-U --update

Это недеструктивный тест записи. Его алгоритм - блок данных читается с устройства в память и пишется обратно. Данный тест не позволяет выявить сложные ошибки (вроде порчи данных), но позволяет проверить каждый сектор на доступность чтения/записи. Т.к. во время теста осуществляется запись на устройство, отключать его категорически нельзя - данные могут быть повреждены. Так же, в случае если флешка "умирает", может произойти ошибка записи и данные так же будут повржедены. Так же, если диск открыт в режиме "общего доступа на запись" (WRITE_SHARE), возможны ошибки из-за одновременной записи в одинаковые блоки.

Пример вызова

flashnul Z: -U

Модификаторы

-V, --verify

Устанавливает режим проверки записи на устройство. В настоящий момент существуют 4 режима:

Для опции -S существует только один режим проверки (вне зависимости от режима, либо проверка выключена (-V=0), либо включена, любое другое число). При этом после записи каждого блока осуществляется его чтение и проверка.

Режим -V=3 является необходимым для выявления большинства ошибок с порчей данных на устройстве.

-i, --ignore-errors

Опция предназачена для пропуска ошибок при выполнении операций с устройством (по-умолчанию при возникновении ошибки работа программы завершается). (Замечание: игнорируются ТОЛЬКО ошибки работы с устройством, файловые ошибки работы с образами по-прежнему завершают программу).

--write-share

Опция для разрешения совместного доступа к устройству. По-умолчанию диск открывается без общего доступа на запись, и в ряде случаев Windows может запретить такой режим. Write-share позволит осуществить операцию и с заблокированными устройствами, однако, в этом режиме возможна ситуация одновременной записи на диск flashnul'ом и сторонней утилитой, что приведёт либо к ложному срабатыванию теста, либо к повреждению записанных данных.

-P, --no-prompt

Отключает запрос о выполнении записи на устройство. (Осторожно - в этом случае ошибка в букве или цифре уничтожит, возможно, важные данные без дополнительного предупреждения).

-c, --cycle

Количество циклов операции. Имеет смысл только для -T, -F, -I режимов. Количество циклов указывается через пробел или знак "=". (Например, flashnul 3 -T -c 5)

-r, --range

Диапазон, в котором выполнять операцию. Может принимать одно или два значения, разделённые точкой с запятой (начало-конец). Величины - байты от начала устройства. Значения должны быть кратными размеру сектора.

-b, --block-size

Размер блока данных при операциях чтения/записи. По-умолчанию 64кб при работе с блочными устройствами, 4кб при работе с stdin/stdout (чтение/записи образ). Размер должен быть кратен размеру сектора, для ряда устройств есть ограничение на максимальный размер блока данных.

-d, --delay

Задержка перед чтением записанного для режимов -V=2 и -V=3 в секундах.

Файл конфигурации

По-умолчанию flashnul читает файл конфигурации flashnul.conf, лежащий "рядом" с исполняемым файлом (в той же директории).

Структура файла

Каждая строка в файле — отдельная директива. Символ '#' (октоторп) указывает на комментарий (весь текст за символом до конца строки считается комментарием).

Директивы, подразумевающие несколько значений могут указываться несколько раз, в этом случае их параметры объединяются.

Файл конфигурации имеет больший приоритет, чем командная строка (если парметр указан в командной строке и в файле используется значение из файла, кроме случаев, когда значения объединяются).

Список директив

Все опции block-* могут быть "подавлены" опцией командной строки --ignore-block

Тонкая настройка программы

Отдельные параметры работы программы могут быть изменены только при перекомпиляции, изменением значений переменных в файле finetune.h:

  1. REFRESH_DELAY — частота обновления экрана во время выполнения операций (задаётся в милисекундах, интервал времени между обновлениями), значение по-умолчанию 100 (10 раз в секунду).
  2. LINE_LENGHT — размер строки при обновлении строки выполнения операций и заголовков секций (значение по-умолчанию 78).
  3. HOME_DIR_CONFIG — файл конфигурации следует искать в каталоге приложения, а не в текущем каталоге.
  4. CONFIG_FILE — имя конфигурационного файла. (по-умолчанию: flashnul.conf)

Исходный текст программы приведён в каталоге src. Для компиляции использовался gcc version 3.4.2 (mingw-special).

(с) George Shuklin, gs@shounen.ru, 2005-2008
http://shounen.ru/soft/flashnul/

Данная программа распространяется под лицензией GNU PUBLIC LICENCE, текст которой (на английском языке) приведён в файле copying.

АВТОР ГАРАНТИРУЕТ ОТСУТСТВИЕ ПРЕДУМЫШЛЕННО ДОБАВЛЕННЫХ ВРЕДОНОСНЫХ И ШПИОНСКИХ ФУНКЦИЙ В ПРОГРАММЕ.