Linux посекторное копирование флешки

Обновлено: 07.07.2024

С тех пор как до меня дошла благая весть о существовании операционной системы под названием GNU/Linux, которую используют все настоящие программисты, я несколько раз пытался заменить ей детище Билла Гейтса и несколько раз потерпел неудачу.

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

Потом, когда появился безлимитный интернет, вследствие чего с получением софта и знаний стало существенно легче, я настроил себе дуал бут и стал осваивать Убунту.

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

В большинстве случаев это было не фатально. Вместо привычного foobar всегда можно послушать музыку на Rhythmbox. Вместо Microsoft Office есть OpenOffice. Да, его совместимость с продуктом корпорации зла порой оставляет желать лучшего, но им вполне можно пользоваться для решения повседневных задач среднестатистического пользователя. Обо всяких Файрфоксах, Операх и Хромах я вообще молчу.

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

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

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

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

Теперь, когда ужасы гугления позади, я понимаю, что всё действительно достаточно просто и хочу оформить результаты своих изысканий в виде краткого руководства по работе с образами дисков в GNU/Linux, обращённого в первую очередь к тем, кто привык к Акронису или другой подобной ему программе. Мне в свое время такой документ бы очень сильно помог, надеюсь, что он поможет и кому-то ещё.

Acronis

В Акронисе всё было просто и понятно: оконный интерфейс, подсказки и предшествующий опыт работы с образами компакт дисков делали процесс несложным. Снял образ, вставил новый винт, развернул образ на него — даже и рассказывать то не о чем. В случае с Линуксом процесс захлебнулся на этапе снятия образа — как это сделать было абсолютно неясно. Специальной программки с подсказками не нашлось, программки, которая добавляла в список устройств виртуальный DVD — наподобие Daemon Tools тоже. Да и сам список устройств оказался достаточно проблематичен, поэтому начать можно прямо с него.

Просмотр перечня накопителей

Для каждого подключенного накопителя (винчестера, флешки) в директории /dev можно найти соотвествующий ему файл. Его название состоит из букв sd и буквы, обозначающей номер устройства. То есть винчестеру, подключенному к первому каналу, будет соответствовать файл sda, второму sdb и так далее. Соответственно самый простой способ посмотреть список устройств — ls -1 /dev/sd[a-z]. Эта команда покажет список накопителей, но не даст нам никакой информации о них. А нам нужно хотя бы увидеть список разделов.

Просмотр перечня разделов на накопителе

Каждому разделу в директории dev тоже соотвествует файл. Его название строится из названия файла, соотвествующего накопителю и номера раздела. То есть для накопителя sda, на котором есть 2 раздела, в директории /dev будет создано 2 файла — sda1 и sda2. Посмотреть перечень разделов на накопителе sda можно командой ls -1 /dev/sda4 полный перечень разделов на всех устройствах получается на выводе команды ls -1 /dev/sd[a-z]2, а если есть необходимость включить в перечень и сами устройства, то можно просто написать ls -1 /dev/sd*, что значительно менее осмысленно, зато коротко и главное работает. Или, как подсказывают в комментариях, есть ещё вариант cat /proc/partitions

Часто владелец может опознать диск просто по такому перечню (это когда дисков у него не 452), но если этого недостаточно, то можно воспользоваться программой hdparm.

Конкретно hdparm -I /dev/sda выведет подробную информацию об устройстве /dev/sda.

Эту же информацию, но в рассеянном по разным файлам виде, можно найти в директории /sys/block/sda. Например модель диска находится в файле /dev/block/sda/device/model.

Если и этого недостаточно, то остается только по очереди монтировать устройства и смотреть что на них записано. Но это уже совсем другая история.

Снятие образа

Итак, устройство опознано и раздел, с которого нужно снять образ, найден. Теперь собственно процесс.

Общие рекомендации

Образом диска мы обычно называем копию диска на уровне разделов или всего устройства. И если пользователь Windows в ответ на вопрос, как эту копию сделать, обычно слышит рекомендацию воспользоваться специализированным софтом, то в Линуксе всё не так.

Как я уже говорил, здесь каждый диск и каждый раздел диска представлен конкретным файлом. И, так как образ представляет из себя файл с копией диска, логично предположить, что операция снятия образа и операция копирования файла раздела — это одно и то же.

Так оно и есть. Пусть нам надо снять образ раздела /dev/sda2 (на нём Windows 7 обычно держит диск С:) и сохранить его в файл с названием win_c.img.

Для этого достаточно написать cp /dev/sda2 win_c.img. Или cat /dev/sda2 >win_c.img. Короче можно воспользоваться любой программой или комбинацией программ, которая осуществляет копирование файлов.

Правильный способ

Как вы наверное уже догадываетесь, добиться желаемого можно не одним и даже не двумя, остроумными и не очень способами, но правильнее и проще всего на мой взгляд, использовать утилиту ddrescue. Что существенно важно — имеется в виду GNU ddrescue, а не давно уже устаревший оригинал.

Используется ddrescue следующим образом:
ddrescue <ключи> <файл который копируем> <новый файл, в который скопируем старый> <лог файл>

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

Команда, которая выполнит операцию, аналогичную описанной выше, будет выглядеть так:

ddrescue /dev/sda2 win_c.img win_c.img.log

Кстати, в данный момент я молчаливо подразумеваю, что жёсткий диск, с которого мы снимаем копию более-менее исправен и фокусов не выкидывает. Если с диском есть серьёзные проблемы, то лучше предварительно ознакомиться с подробностями использования ddrescue, например тут. и применить эти знания при снятии образа.

Неправильный способ

Часто можно встретить рекомендации использовать для копирования файла устройства или раздела программу под названием dd. Как правило, для снятия образа предлагается сделать что-то вот такое:

dd if=/dev/sda2 of=win_c.img

Не делайте так! Хотя семантически подход верен (произойдёт копирование одного файла в другой), последствия могут быть очень печальны. Да, dd превосходит cp в том отношении, что при обнаружении ошибки cp прекратит работу, а dd не прекратит, но если на диске есть битые или просто плохо читаемые сектора, то dd будет продолжать попытки считать их содержимое пока из винчестера не повалит дым.

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

Короче, используйте ddrescue. А если кроме dd ничего нет, не забывайте про аргумент noerror.

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

Просмотр содержимого образа раздела (логического диска)

Так как каждый раздел диска представлен файлом, можно предположить, что должен существовать штатный способ подключения файлов с образами к файловой системе. С определённой точки зрения так оно и есть. Конкретно для этого используется утилита mount, с помощью которой можно поместить дерево файлов, содержащееся в образе, в любую директорию на ваш выбор. Этот процесс называется монтированием.

Итак, у нас уже есть образ, снятый с диска C: операционной системы Windows 7. Мы назвали образ win_c.img и хотим увидеть его содержимое в заранее созданной директории /mnt/win_c. Для этого надо ввести команду mount -o loop win_c.img /mnt/win_c.

But we can go deeper.

Просмотр содержимого образа физического диска

А вот с монтированием образа диска целиком всё не так просто. Ужасная правда состоит в том, что монтировать файлы из произвольного места файловой системы ядро не умеет и аргумент -o loop, команды mount, сигнализирует о том, что сначала надо связать образ с файлом виртуального устройства в директории /dev, и потом уже присоединить содержимое этого устройства к файловой системе.

Файлы виртуальных устройств создаются заранее (на этапе загрузки системы) и имеют названия loop0, loop1, loop2 и так далее по нарастающей.

Связать образ раздела с одним из этих файлов можно командой losetup. Команда mount из предыдущего раздела на самом деле эквивалентна следующим двум командам.

losetup /dev/loop0 win_c.img
mount /dev/loop0 /mnt/win_c

Но вот для того, чтобы посмотреть содержимое образа в котором есть несколько разделов, этого недостаточно. Дело в том, что если выполнить команду losetup для такого файла, то с устройством /dev/loop0 будет связан весь образ целиком. То есть это устройство будет эквивалентом /dev/sda, а нам нужны эквиваленты /dev/sda1 и /dev/sda2.

Обладатели свежих версий программы losetup (читай гентушники и арчеводы) могут выполнить losetup c аргументом --partscan, что приведёт к автоматическому созданию в директории /dev файлов, соответствующих разделам образа. То есть /dev/loop0p1, /dev/loop0p2 и так далее до самого горизонта. И вот уже эти файлы можно отдавать команде mount.

losetup --partscan /dev/loop0 drive.img
mount /dev/loop0p2 /mnt/win_c

Те же, кому не так повезло с дистрибутивом, могут воспользоваться программой kpartx, которая сделает то же самое, но положит файлы соотвествующие разделaм не в директорию /dev, а в директорию /dev/mapper, откуда их можно монтировать и просматривать.

kpartx -a /dev/loop0 drive.img
mount /dev/mapper/loop0p2 /mnt/win_c

But we can go even deeper than that…

Автоматическое создание файлов разделов при выполнении команды losetup

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

Включается она если параметр модуля loop max_part не равен нулю. Задать этот параметр можно только при загрузке модуля, поэтому если система уже запущена, модуль надо выгрузить из памяти и загрузить снова с уже заданным параметром. Для этого нужно выполнить следующие две команды.

modprobe -r loop
modprobe loop max_part=63

Однако в некоторых дистрибутивах (напривер в Убунте) модуль loop вкомпилирован в ядро намертво и поэтому для установки параметра придётся вписать loop.max_part=63 в командную строку ядра и перезагрузить систему.

Развёртывание образа на физический носитель

А теперь о том, как собственно накатить образ на другой диск. Как и раньше надо руководствоваться тем, что диски и разделы представлены в виде файлов. И если для снятия образа нужно было создать копию файла устройства или раздела, то для того, чтобы закатать этот образ обратно надо провести операцию копирования в обратную сторону. То есть вместо cp /dev/sda2 win_c.img написать cp win_c.img /dev/sda2. Ну и лучше помнить о советах, изложенных в руководстве по снятию образа. А именно пользоваться ddrescue и не пользоваться dd.

ddrescue --force win_c.img /dev/sda2 win_c_restore.img.log
Конечно следует помнить, что раздел в который мы восстанавливаем образ (в данном случае /dev/sda2) должен быть не меньше файла с образом. Eсли же раздел окажется больше этого файла, то проблем при восстановлении не будет, но в разделе останется неразмеченное пространство. И придётся либо смириться с этим фактом, либо увеличить размер файловой системы до размера раздела каким-нибудь специализированным софтом (увеличивать, впрочем, обычно гораздо проще и быстрее, чем уменьшать).

Сжатие образа раздела (логического диска)

Особенно приятной чертой Акрониса является способность не писать в файл образа куски диска или раздела, которые не содержат файлов. Это позволяет ужать образ до реального объёма данных в разделе или на диске.

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

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

Sparse файлы

Sparse файл это файл, в котором куски, содержащие нули, на диск не пишутся. То есть, если половина файла заполнена данными, а другая половина нулями — на диск будет записана только половина этого файла и ещё дополнительная информация об областях файла, заполненных нулями. Если область с нулями непрерывна и начинается в середине, то реально на диске файл будет заменять половину от своего теоретического объёма.

Подготовка раздела или устройства к сжатию

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

Но выяснять количество свободного места и передавать его программе, создающей файл, к счастью не обязательно, да и искать программу, создающую файл с нулями, не понадобится. В директории /dev есть безразмерный файл zero, который, как нетрудно догадаться по названию, является неисчерпаемым источником бинарных нулей. Остаётся только скопировать его в нужное место.

Так как файл безразмерен, копирование будет продолжаться до тех пор, пока копия не заполнит всё доступное ей пространство, то есть все свободное место в разделе, что нам собственно и требовалось.

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

Для создания файла с бинарными нулями можно выполнить команду cp /dev/zero zerofile или cat /dev/zero > zerofile.

Создание sparse файла образа устройства или раздела

Большинство утилит для работы с файлами знают о существовании sparse файлов и умеют их создавать. Упомянутой ранее ddrescue, для того, чтобы образ оказался sparse файлом нужно передать ключ --sparse. Теперь результирующий файл будет занимать столько места, сколько ему необходимо, и не больше.

Как быть в случае сжатия образа повреждённого диска

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

С копированием файла прекрасно справится cp, которая умеет делать sparse файлы не хуже ddrescue. cp --sparse win_c.img win_c_sparse.img

Конечно, для проведения этих операций потребуется много свободного пространства, но так всё-таки значительно лучше, чем вообще никак.

Заключение

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


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

Как сделать образ для загрузки через PXE и подключения по RDP?
всем привет! Пытаюсь найти какой нить линуксовый образ что-бы загружать его по сети PXE, и.

Из дерева каталогов сделать iso или образ FS
Хай Олл. Где-то на задворках разума маячит мысль что видел софтину позволяющую дерево каталогов.

Как записать образ флешки с программой?
на USB флешке стоит инсталляционная программа (C++ обучение), флешка у удалённого знакомого. он.

в лине образ устройства можно сделать через программу dd
узнайте, что там за система, скачайте заново образ и не парьтесь
под вендой флешку можно записать программой universal usb installer Amet13, если я не шарю в линуксе это не означает что я совсем идиот. если бы мне был нужен чистый дистрибутив, я бы без вопросов его скачал. на флешке настроенное по совместно с линуксом. образ такой флешки нигде найти нельзя. это человек сам настравивал. авторская работа. узнать что там за линукс из под винды я тоже не представляю как, да если бы и знал - это ничего бы не дало. мне нужно просто скопировать полный посекторный образ. пробовал через ультраисо - создался .ima образ который ничем и никуда не получается записать. потом создал какой то утилитой для флешек посекторный образ .img который невозможно записать на другую 8 гиговую флешку из-за меньшего размера в байтах. в вирткалбоксе этот образ тоже никак не прикручивается. посоветуйте что нибудь по проблеме а не скачивать чистый дистрибутив accept, возможно ли запустить под виндой виртуалбокс с УБУНТУ, подключить туда эту флешку, и так сделать образ, ? и какого он будет формата? удастся ли его из под винды записать на флешку другую или использовать в виртуалбоксе как загрузочный диск? accept, возможно ли запустить под виндой виртуалбокс с УБУНТУ, подключить туда эту флешку, и так сделать образ, ? VirtualBox не так уж хороша, флешка может просто не определиться
по-виндовому: я бы скачал какой-нибудь Acronis, посмотрел бы в нём, можно ли делать образы флешек
по-линуксовому: я бы скачал живой дистрибутив, загрузился бы с него, подключил флешку, сделал образ, подключил диск, перенёс бы туда этот файл accept, большое спасибо. поставил Acronis True Image, там есть функция посекторного компирования всего диска. скопировал так флешку и залил образ на другую 8 гиговую - всё отлично работает в лине образ устройства можно сделать через программу dd Наверное, кого-то этот вопрос интересует и сегодня. Нашел такое решение. Его "изюминка" в том, что образ создается адекватно размеру сохраняемых в нем данных, а не в размере объема всего накопителя. Опишу как делал я.
!i, спсибо за совет. только на каких флешках вы это пробовали делать? мне почему то кажется что если такое сделать с загрузочной то скопируется дааалеко не всё и запускаться она не будет. у меня была флешка с узкоспециализированным ПО. с неё запускалась вся система и работала. писано это на питоне. стоит точно на каком то линуксе но на каком - мне не известно. скорее всего либо дебиан либо центос. мало того что всякими простыми средствами и способами она не копируется, там ещё и аппаратная защита есть - то есть при копировании с помощью акрониса мне удалось запустить эту флешку при тех же условиях что и оригинал, но как только я попытался использовать её на своей машине, при запуске мне выдало ошибку не совместимости аппаратного ключа, который был расчитан для винды. вот такие пироги. а ломануть аппаратную защиту практически не реально в моём случае, так как во0первых в линуксах я не шарю, во-вторых исходного кода софта нет, и в третьих - мне за это никто не заплатит, а наоборот, если узнают, по головке не погладят.

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

Я же это проделал со своей загрузочной аварийной флешкой с DOS-оболочкой. Пока что я образ сохранил и никуда еще не разворачивал. Постараюсь не забыть и, если когда-либо придется развернуть его, постараюсь отписаться о результатах.

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

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

Lenovo Z 580 не ставится образ с флешки
Всем привет. В кратце - при попытке установить образ 7-ки на ноут с флешки, доходит до раздела с.

Samsung SA31 не могу запустить с флешки образ Windows
Не знаю где лучшие всего это написать думаю что тут будет лучшие, если что перенесите тему Нашел.

Как сделать свой образ Windows?
Доброго времени суток, форумчане! У меня возник такой вопрос, винда начинает поглючивать и пора.

Как сделать образ Win7 на флешку
Скачал Семерку сборку (4,17Gb) при попытке перекинуть папку с образом диска и ещё какими то файлами.

Как сделать виртуальный образ диска?
Всем привет. Возможно ли сделать виртуальный образ диска (как делает тот же daemon tools) без.

В настоящее время существует множество утилит, с помощью которых можно создать загрузочную флешку, какую можно использовать для запуска компьютера в режиме LiveUSB и для установки OS Linux 1) . Такие утилиты существуют как для Windows 2) , так и для Linux 3) .

Однако, в некоторых случаях режима LiveUSB бывает недостаточно для работы, например, в тех случаях, когда нужно
установить драйверы, дополнительные программы, кодеки, которые не входят в состав LiveUSB.

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

Подготовка к установке

Для работы потребуется:

Компьютер с операционной системой Windows (Linux, MacOS); Пустая флешка на 8 ГБ (или карта памяти того же объема), желательно отформатированная в нежурналируемой файловой системе (NTFS, ext2 и т.д.).

Устанавливаем программу VirtualBox (если она еще не установлена). Создаем виртуальную машину (ВМ) с такими характеристиками:
Операционная система: Linux;
Версия: Ubuntu;
Размер основной памяти: 512 МБ
Загрузочный диск:
Тип файла: VDI
Размер: 7 ГБ
В свойствах созданной виртуальной машины выбираем вкладку «Система» и в списке ставим первым CD/DVD-ROM. В качестве привода оптических дисков
выбираем ubuntu….iso (например, у меня 11.04-desktop-i386.iso), запускаем виртуальную машину и устанавливаем на нее Ubuntu. При установке Ubuntu лучше выбрать авторазметку, вполне надёжно справляется, и файловую систему ext2, а лучше ext4 с отключённым журналом 7) , т.к. система будет на флешке и, желательно, сразу настроить под свои нужды 8) . После того, как ОС установится, выключаем ВМ.

Далее, нам необходимо подключить флешку к виртуальной машине. Для этого подключаем флешку к компьютеру, в Свойствах-Настроить ВМ открываем вкладку USB, нажимаем на кнопку «Добавить из устройства» и в выпадающем списке выбираем подключенную флешку.


Запустим ВМ и убедимся, что флешка действительно подключена.


Выключаем ВМ. В качестве оптического привода выбираем pmagic.iso и снова запускаем ВМ.

В случае отклонения и требования выхода (exit) Parted Magic запуск как:


Установка

Теперь перенесем операционную систему Ubuntu с виртуальной машины на флешку. Для этого заходим в Основное меню оболочки PartedMagic и запускаем программу Clonezilla.


Выбираем режим «device-device»


Выбираем режим «Beginner»


В следующем окне выбираем режим «disk_to_local_disk»


Выбираем диск, на который мы установили Ubuntu (sda)


Далее выбираем флешку (sdb)



Clonezilla попросит для продолжения нажать клавишу Enter


Далее, вас несколько раз спросят, уверены ли вы в том, что хотите продолжить? На все вопросы отвечаем «Да» (Y)


Начнется процесс клонирования диска


Если все прошло успешно, программа попросит нажать клавишу Enter после чего закроется.


Вот и все, флешка готова. Можно выключать ВМ и использовать созданную флешку для запуска ОС Linux на любом компьютере (даже без жесткого диска).

Напоследок, хочу предупредить об одном недостатке данного метода: если флешка будет иметь файловую систему ext2/ext4, значит ей нельзя будет пользоваться для хранения данных в ОС Windows. К тому же, если вы захотите отформатировать флешку и сделаете это в Windows, ее размер станет меньше (около 6 ГБ). Для того, чтобы этого не случилось, советую воспользоваться программой PartitionEditor, которая находится на диске PartedMagic.



В UNIX системах есть одна очень древняя команда, которая называется dd. Она предназначена для того, чтобы что-то куда-то копировать побайтово. На первый взгляд — ничего выдающегося, но если рассмотреть все возможности этого универсального инструмента, то можно выполнять довольно сложные операции без привлечения дополнительного ПО, например: выполнять резервную копию MBR, создавать дампы данных с различных накопителей, зеркалировать носители информации, восстанавливать из резервной копии данные на носители и многое другое, а, при совмещении возможностей dd и поддержке криптографических алгоритмов ядра Linux, можно даже создавать зашифрованные файлы, содержащие в себе целую файловую систему.
Опять же, в заметке я опишу самые часто используемые примеры использования команды, которые очень облегчают работу в UNIX системах.

Начну с небольшого примера, наглядно иллюстрирующего основные параметры команды:

  • if: указывает на источник, т.е. на то, откуда копируем. Указывается файл, который может быть как обычным файлом, так и файлом устройства.
  • of: указывает на файл назначения. То же самое, писать можем как в обычный файл, так и напрямую в устройство.
  • bs: количество байт, которые будут записаны за раз. Можно представлять этот аргумент как размер куска данные, которые будут записаны или прочитаны, а количество кусков регулируется уже следующим параметром.
  • count: как раз то число, которое указывает: сколько кусочков будет скопировано.

Создание образа диска:

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

Параметр «conv» позволяет подключать несколько фильтров, применимых к потоку данных. Фильтр «noerror» как раз отключает остановку работы программы, когда наткнется на ошибку чтения. Таким образом, некоторые данные с диска все же можно будет прочитать. Точно таким образом я спас данные со своей флешки Corsair, которую погнули: подобрал подходящее положение, когда контакт есть, и сделал дамп файловой системы.
Подключить, кстати, такие образы можно при помощи команды mount с ключем "-o loop":

Если что-то не получается, процесс разбивается на 2 уровня:

Если и так не работает, значит файловая система образа полетела.

Работа с носителями информации

Очень простое, хоть и не оптимальное решение клонирования жесткого диска:

Все то же побайтовой копирование с размером буфера 4 Кб. Минус способа в том, что при любой заполненности разделов копироваться будут все биты, что не выгодно при копировании разделов с маленькой заполненностью. Чтобы уменьшить время копирования при манипуляции с большими объемами данных, можно просто перенести MBR на новый носитель (я ниже опишу как), перечитать таблицу разделов ядра (при помощи того же fdisk), создать файловые системы и просто скопировать файлы (не забыв сохранить права доступа к файлам).

Как вариант, можно даже по расписанию делать бекап раздела по сети. Разрулив ключи ssh будет работать такая схема:

Когда-то читал исследование, согласно которому очень большая доля жестких дисков на барахолке подвергается восстановлению данных без привлечения чего-то специализированного, и содержит конфиденциальную информацию. Чтобы на носителе ничего нельзя было восстановить — можно забить его нулями:

Думаю, понятно на что нужно заменить DEVICE. После проведения лекций по Linux, я очень тщательно стал следить за тем, что пишу.
Проверить можно тем же dd, но преобразовав данные в hex:

Должны посыпаться нули.

Операции с MBR

MBR расположена в первых 512 байтах жесткого диска, и состоит из таблицы разделов, загрузчика и пары доп. байт. Иногда, ее приходится бекапить, восстанавливать и т.д. Бекап выполняется так:

Восстановить можно проще:

Причины этих махинаций с MBR могут быть разные, однако хочу рассказать одну особенность, взятую из опыта: после восстановления давней копии MBR, где один из разделов был ext3, а позже стал FAT и использовался Windows, раздел перестал видиться виндой. Причина — ID раздела, который хранится в MBR. Если UNIX монтирует файловые системы согласно суперблоку, то винды ориентируются на ID разделов из MBR. Поэтому всегда нужно проверять ID разделов при помощи fdisk, особенно если на компьютере есть винды.

Генерация файлов

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

Создался файл размером почти в гигабайт. Теперь нужно сделать этот файл блочным устройством и, при этом, пропустить его через механизм шифрования ядра linux. Я выберу алгоритм blowfish. Подгрузка модулей:

Ассоциация образа с блочным устройством со включенным шифрованием:

Команда запросит ввести пароль, который и будет ключем к образу. Если ключ введен не правильно, система не смонтируется. Можно будет заново создать данные в образе, используя новый ключ, но к старым данным доступа не будет.
Создаем файловую систему и монтируем:

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

Теперь шифрованный образ готов.

Основные идеи я расписал, однако множество задач, которые можно решить при помощи маленькой программки, имя которой состоит из двух букв, намного шире. Программа «dd» — яркий пример того, что IT'шники называют «UNIX way»: одна программа — часть механизма, выполняет исключительно свою задачу, и выполняет ее хорошо. В руках человека, который знает свое дело, которому свойственен не стандартный подход к решению задачи, такие маленькие программки помогут быстро и эффективно решать комплексные задачи, которые, на первый взгляд, должны решать крупные специализированные пакеты.

Читайте также: