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

9

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

FDisk'ing изображение дает это:

# 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 Linux
#

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

JamesTheAwesomeDude
источник
точно укажите, где вы хотите, чтобы ваш раздел был клонирован и где находятся ваши файлы изображений!
fromnaboo

Ответы:

8
# 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 и дать или что - то непосредственно, то есть сделать его пропустить , что многие блоки ввода , так он начинает читать при котором перегородка расположена; но лучше видеть реальные разделы с помощью петлевого устройства.ddskip=131072

frostschutz
источник
Ваша losetupкоманда не сработала - она ​​сказала нераспознанный вариант --find. Я удалил это, он сказал, что не узнал --show. Снятие этого заставило его жаловаться --partscan, и в этот момент я понял, что команда не собирается ничего делать для меня в ближайшее время. Я решил попробовать другие, но оба partxи kpartxвернуть «команда не найдена».
JamesTheAwesomeDude
Я бы просто побежал dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc skip=122880, но это возвращается dd: ‘2013-02-09-wheezy-raspbian.img’: cannot skip: Invalid argument.
JamesTheAwesomeDude
1
skipзависит bs, поэтому, если вы использовали bs=1M(или у вас есть псевдоним, который делает это), это объяснило бы, почему это не работает. попробуй с bs=512. Кроме того, почему 122880, когда fdisk говорит 131072? Также мой проигрыш losetup from util-linux 2.22.2. то же самое для partx. kpartx из многопользовательских инструментов (используется устройство отображения).
frostschutz
kpartxдля LVM. partprobeтакже сделаю работу, из расстались пакета.
psusi
@frostschutz Это было 12280 байт от начала файла изображения.
JamesTheAwesomeDude
0

Примерно так должно работать:

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

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

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

fromnaboo
источник
1
Я получил ожидаемую ошибку:dd: opening ‘2013-02-09-wheezy-raspbian.img2’: No such file or directory
JamesTheAwesomeDude
заменили ли вы /path/to/2013-02-09-wheezy-raspbian.img2 реальным путем к файлу изображения? : |
fromnaboo
1
**** facepalm **** Да, я только добавил 2 до конца, как вы сказали .
JamesTheAwesomeDude
это не работает, дд не видит разделы в файле образа, как это
Михал Артазов
0
  1. Смонтируйте образ как устройство с обратной связью: losetup -fP yourImage.img
  2. Теперь вы можете получить доступ к каждому разделу изображения напрямую. Если вы должны использовать dd, вы можете сделать dd if=/dev/loop0p1 of=image.img, но я думаю, что вы хотели бы catлучше. В корневой оболочке просто сделайте cat /dev/loop0p1 > image.img. В обоих примерах предполагается, что вы хотите первый раздел, и вам было назначено устройство обратной связи/dev/loop0
  3. Как только вы закончите с петлевым устройством, вы можете отсоединить его losetup -d /dev/loop0. Еще раз, это предполагает, что /dev/loop0это ваше устройство обратной связи.
Джон Леуэнхаген
источник
0

Вы могли бы сделать:

sudo partx --add -v 2013-02-09-wheezy-raspbian.img 
# time sudo dd if=/dev/loop0p1 |pv -s 80M |sudo dd of=/dev/sdc1
time sudo dd if=/dev/loop0p2 |pv -s 4G |sudo dd of=/dev/sdc2
sudo partx --delete -v /dev/loop0
Фрэнк Брейтлинг
источник
0

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

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, прежде чем писать в него.

Михал Артазов
источник