
У меня есть образ диска, это «целый» образ диска, например, содержащий несколько разделов, и я хочу клонировать только его.одиниз них (не первый...) на раздел на внешнем диске с несколькими разделами на нем (я также не клонирую его на первый раздел диска...)
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
- Смонтируйте образ как петлевое устройство:
losetup -fP yourImage.img
- Теперь вы можете получить доступ к каждому разделу образа напрямую. Если вам необходимо использовать
dd
, вы можете сделатьdd if=/dev/loop0p1 of=image.img
, но я думаю, что вам бы хотелосьcat
большего. В оболочке root просто сделайтеcat /dev/loop0p1 > image.img
. Оба примера предполагают, что вам нужен первый раздел, а назначенное вам устройство loopback было/dev/loop0
- После того, как вы закончили с устройством обратной связи, вы можете отсоединить его с помощью
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, прежде чем записывать на него данные.