2017-12-06

Низкоуровневое форматирование с помощью программы dd

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


Что же тогда означает низкоуровневое форматирование сейчас? Что бы ответить на этот вопрос, разберем, что такое просто форматирование. Форматирование диска - это создание структуры разделов, запись файловой таблицы определенного формата (FAT, NTFS, EXT и т.д.). То есть подготовка накопителя к возможности хранения на нем файлов. Низкоуровневым форматированием сейчас, является полная очистка диска от всей информации, записью нулевых значений в каждый сектор накопителя. 

Кто то может возразить, что полное форматирование, делает то же самое. Да, делает. Но полное форматирование происходит на разделе диска, удаляя только файлы, а низкоуровневое на всем диске полностью. Удаляя все, и разделы и файловые таблицы.

Для чего применимо такое низкоуровневое форматирование? В первую очередь это надежное удаление данных без возможности восстановления. Так как, при обычном, быстром форматировании, происходит пересоздание файловой таблицы, а сами данные остаются записанными на диске. То же самое происходит и при удалении раздела. Удаляется только информация о разделе, а данные раздела остаются на диске. Второе возможное применение, это всевозможные ошибки при попытке удалить раздел, или отформатировать его. В этом случае можно будет просто очистить диск и заново его разметить, уже без ошибок.

Теперь о программе dd. dd - это консольная программа предназначенная для копирования и конвертации файлов. Подробнее на вики https://ru.wikipedia.org/wiki/Dd.


dd для Windows


Скачать dd для Windows можно по этой ссылке. Работа с данной программой осуществляется в командной строке запущенной с правами администратора. 


В качестве накопителя для форматирования будет выступать флешка объемом на 8ГБ.

  
Специально для демонстрации я записал на нее три ISO образа, тем самым занятое пространство на флешке было около 6ГБ. Давайте теперь рассмотрим содержимое флешки посекторно в HEX редакторе HxD.


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


С 2048 сектора начинается описание первого раздела, PBR записи и файловой таблицы NTFS.


Как видно на данном скриншоте, в секторе 2064 располагается описание файла $MFT. Который является главной файловой таблицей файловой системы NTFS. В данном файле хранится информация о всех файлах раздела и их атрибутах. 


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


И последний сектор флешки, с копией 2048 сектора.

Теперь перейдем собственно к низкоуровневому форматированию флешки. Запускаем командную строку от имени администратора и переходим в каталог со скачанной программой dd. В моем случае это диск E:\.


Теперь выполняем команду dd --list. Данная команда выводит информацию о дисках системы.


В полученном выводе, из секции NT Block Device Objects, нам нужно скопировать ссылку на необходимое нам устройство, с которым мы будем в дальнейшем проводить все операции. Определить нужное устройство можно по размеру диска. В моем случае использовалась флешка объемом 8 ГБ, то есть размер в байтах будет равен 8 миллиардам байт, а значит ссылка на устройство будет \\?\Device\Harddisk2\Partition0.

Немного пояснений. Для блочного устройства \\?\Device\Harddisk2, у нас присутствует два раздела. Нулевой \\?\Device\Harddisk2\Partition0, отвечает за весь диск целиком, и \\?\Device\Harddisk2\Partition1 за первый (и единственный в данном случае) раздел на нашей флешке. Первый раздел, как было показано ранее, начинался с 2048 сектора, а значит любые манипуляции при его использовании будут проходить только в диапазоне данного раздела, от 2048 сектора и до сектора конца данного раздела. Поэтому в качестве ссылки выбирается именно \\?\Device\Harddisk2\Partition0.

Теперь вводим команду dd if=/dev/zero of=\\?\Device\Harddisk2\Partition0 bs=1M --progress. Данная команда выполнит запись нулей в каждый байт диска, тем самым выполнит его полную очистку. В процессе работы программы вы будете наблюдать как увеличивается счетчик записанных данных (это из-за ключа --progress).


По завершении, программа выдаст полный результат выполненных действий.


В выводе присутствует сообщение об ошибке. Причина ее так же указана в текущем выводе. А именно, строки 7649+0 records in  и 7648+0 records out. Первая, говорит о том, что отправлено было на запись 7649 МБ данных, а вторая, что удалось записать лишь 7648 МБ. По сути ошибки никакой нет, источник /dev/zero бесконечно предоставляет нули для записи, а флешка имеет конечный объем. При попытке записать информацию сверх присутствующего объема , программа выдает соответствующее сообщение.

Теперь проверим в HxD, как выглядит диск после проделанной записи нулями. Пройдемся по просмотренным ранее секторам флешки.


Сектор 0.


Сектор 2048.


Сектор 2064.


Сектора 2402 и 2403.


Последний сектор.

По всему пространству флешки нет ничего, одни нули. На этом низкоуровневое форматирование в ОС Windwos можно считать законченным.

После данной процедуры, в системе флешка будет определятся так.


Для того чтобы вернуть возможность хранить на ней файлы, нужно ее просто отформатировать.

Насчет форматирования есть один нюанс. Если в будущем нужно будет использовать данную флешку в качестве загрузочной, то форматирование нужно производить через diskpart.


dd в Linux


С операционной системой Linux все намного проще. Программа dd присутствует, по умолчанию, в любом дистрибутиве. Приступим. Запускаем терминал с правами root.


Определим под каким устройством в системе скрывается наша флешка. Выполняем для этого команду fdisk -l.


Исходя из полученного вывода, по размеру, можно легко определить нашу флешку. В моем случае это /dev/sda. Теперь выполним низкоуровневое форматирование. Набираем команду dd if=/dev/zero of=/dev/sda bs=1M.


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


Аналогично Windows версии dd, мы получили ошибку о попытке записать данные за пределы объема флешки. Как говорилось ранее, такая ошибка не критична.


На этом низкоуровневое форматирование в ОС Linux можно считать завершенным.


The endd


У программы dd очень простой функционал, указываем устройство, или файл, исходящих данных, и устройство/файл принимающий эти данные. С помощью этих, казалось бы, простых действий, можно осуществлять сложные, на первый взгляд, операции с дисками, флешками, файлами и прочими блочными устройствами.

Из недостатков dd для Windows, отмечу возникающие ошибки при попытке выполнить запись на флешку, исправить которые можно было лишь переподключением устройства и повторным выполнением команды.

В Linux, единственным недостатком является отсутствие отображения информации о прогрессе выполняемых действий. Но решения данной проблемы есть, и весьма простое - использовать совместно программу pv.

А на сегодня, тему низкоуровневого форматирования можно считать завершенной.


Комментариев нет :

Отправить комментарий