воскресенье, 19 мая 2013 г.

ддшечки

Ещё несколько полезных упражнений с dd и образами.
Начнём с тривиала, сделать бекап mbr:

rm ~/sda.mbr
dd if=/dev/sda of=~/sda.mbr bs=512 count=1


Скопировать таблицу разделов с sda на sdb, рассово верный способ:

dd if=/dev/sda of=/dev/sdb skip=446 seek=446 bs=1 count=64

Более надёжный, если винт не размечен (скопируем ещё и сигнатуру 55 AA):

dd if=/dev/sda of=/dev/sdb skip=446 seek=446 bs=1 count=66

Или в файл:

rm ~/sda.mbr
dd if=/dev/sda of=~/sda.mbr skip=446 seek=446 bs=1 count=66


Скопировать начальный загрузчик с sda на sdb, рассово верный способ:

dd if=/dev/sda of=/dev/sdb bs=1 count=446

Короткий для NT (только лоадер, не копируем NT signature и тд):

dd if=/dev/sda of=/dev/sdb bs=1 count=440

А вот в файл сложнее (если мы хотим чтоб он был похож на мбр). Вариант для nt (можо заменить назначение на винт и таким образом сделать загрузочный диск для windows, останется только создать разделы, выбрать загрузочный и скопировать в них файлы os):

rm ~/sda.mbr
#сам код
dd if=/dev/sda of=~/sda.mbr bs=1 count=440
#генерим новую NT signature
dd if=/dev/urandom of=~/sda.mbr bs=1 seek=440 count=4
#Забиваем нулями оставшееся место
dd if=/dev/zero of=~/sda.mbr bs=1 seek=444 count=2
dd if=/dev/zero of=~/sda.mbr bs=1 seek=446 count=64
#дописываем сигнатуру
dd if=/dev/sda of=~/sda.mbr bs=1 skip=510 seek=510 count=2

Для всего остального:

rm ~/sda.mbr
#загрузочный код
dd if=/dev/sda of=~/sda.mbr bs=1 count=446
#Забиваем нулями оставшееся место
dd if=/dev/zero of=~/sda.mbr bs=1 seek=446 count=64
#дописываем сигнатуру
dd if=/dev/sda of=~/sda.mbr bs=1 seek=510 count=2


Cнять образину с винта и упаковать:

dd if=/dev/sda bs=4096|pv|gzip -9|dd of=~/my.img.gz

Не ровня акронису конечно, особенно в плане скорости, но в экстренных ситуациях спасает.
После распаковки образ можно смонтировать:

#распаковываем (понадобится много места)
cat ~/my.img.gz | gunzip > ~/my.img
#перезагружаем модуль loop чтобы он нам дал посмотреть разделы
modprobe -r loop
modprobe loop max_part=63
#подключаем как виртуальное устройство
losetup -f ~/my.img/
#определяем разделы
blockdev --rereadpt /dev/loop0

Тут надо заметить сильно от дистра зависит напрмер в некоторых можно не перегружать модуль а использовать опцию -p в loosetup тогда и последняя команда не нужна. Иногда вместо неё понадобится набрать что-то типа partprobe /dev/loop0 -s или сделать как то так:

mount -o loop ~/my.img
kpartx -av ~/my.img

В любом случае результатом должны быть появившиеся в /dev ссылки на разделы нашего диска loop0p1 loop0p2 и т.д. Соответсвенно теперь можно их смонтировать или скормить виртуалке, причем смонтировать даже на запись.

mkdir /mnt/lo0p1
mount /dev/loop0p1 /mnt/lo0p1 -t <тип файловой> -o rw

Ну вот пожалуй и всё что пришло на ум...