Flashnul

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

version 0.9


!

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

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

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

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 - не проверял). Любой процессор на котором работает windows, 1Мб свободной оперативной памяти. Для полноценной работы программы требуются права администратора. Информация о поддержке горячей замены у устройств выводится только в 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
-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ой. (относительно ограничений --range см. его описание )

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:

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

-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

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

-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-2006
http://shounen.ru/soft/flashnul/

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

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