Как использовать DD для клонирования раздела с образа диска?

Как использовать DD для клонирования раздела с образа диска?

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

FDisking изображения дает следующее:

# fdisk -l 2013-02-09-wheezy-raspbian.img

Диск 2013-02-09-wheezy-raspbian.img: 1939 МБ, 1939865600 байт
255 головок, 63 сектора/дорожка, 235 цилиндров, всего 3788800 секторов
Единицы = сектора 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер ввода-вывода (минимальный/оптимальный): 512 байт/512 байт
Идентификатор диска: 0x00014d34

                         Устройство Загрузка Начало Конец Блоки Идентификатор Система
2013-02-09-wheezy-raspbian.img1 8192 122879 57344 c W95 FAT32 (LBA)
2013-02-09-wheezy-raspbian.img2 122880 3788799 1832960 83 Linux
#

а блочное устройство выглядит так:

# fdisk -l /dev/sdc

Диск /dev/sdc: 8014 МБ, 8014266368 байт
247 головок, 62 сектора/дорожка, 1022 цилиндра, всего 15652864 сектора
Единицы = сектора 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер ввода-вывода (минимальный/оптимальный): 512 байт/512 байт
Идентификатор диска: 0x00000000

   Устройство Загрузка Начало Конец Блоки Идентификатор Система
/dev/sdc1 2048 131071 64512 e W95 FAT16 (LBA)
/dev/sdc2 131072 15652863 7760896 83 Линукс
#

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

решение1

# losetup --find --show --partscan --read-only 2013-02-09-wheezy-raspbian.img
/dev/loop7
# dd if=/dev/loop7p2 of=/dev/narnia bs=1M

Если --partscanне работает, вы также можете использовать один из следующих способов:

# partx -a /dev/loop7
# kpartx /dev/loop7

или аналогичные решения по отображению разделов.

Вероятно, вам следует сначала установить его, чтобы просто посмотреть, подходит ли он вам или нет.

Конечно, вы также можете прочитать вывод fdisk и передать ddего skip=131072напрямую, т. е. заставить его пропустить столько блоков ввода, чтобы он начал чтение с того места, где расположен раздел; но гораздо приятнее видеть реальные разделы с помощью циклического устройства.

решение2

Должно сработать что-то вроде этого:

dd if=/path/to/2013-02-09-wheezy-raspbian.img2 of=/dev/sdc2 bs=4096 conv=notrunc,noerror

если= задает изображение, которое вы хотите клонировать

из= задает целевой раздел, куда вы хотите клонировать образ

решение3

  1. Смонтируйте образ как петлевое устройство:losetup -fP yourImage.img
  2. Теперь вы можете получить доступ к каждому разделу образа напрямую. Если вам необходимо использовать dd, вы можете сделать dd if=/dev/loop0p1 of=image.img, но я думаю, что вам бы хотелось catбольшего. В оболочке root просто сделайте cat /dev/loop0p1 > image.img. Оба примера предполагают, что вам нужен первый раздел, а назначенное вам устройство loopback было/dev/loop0
  3. После того, как вы закончили с устройством обратной связи, вы можете отсоединить его с помощью losetup -d /dev/loop0. Опять же, это предполагает, что /dev/loop0это ваше устройство обратной связи.

решение4

С помощью этой команды вы можете скопировать только второй раздел в отдельный образ.

dd if=2013-02-09-wheezy-raspbian.img of=second.img bs=512 skip=122880

и после этого вы можете скопировать его на место раздела на диске

dd if=second.img of=/dev/sdc2 bs=512

или вы даже можете сделать это одной командой

dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc2 bs=512 skip=122880

Просто убедитесь, что вы отмонтировали /dev/sdc2, прежде чем записывать на него данные.

Связанный контент