Для этого есть «спецификатор преобразования», например:
$ printf '%#o' 8
010
$ printf '%#x' 16
0x10
Отвечая на ваш первый вопрос :, учитывая, что у вас есть MBR, я предлагаю вам сделать что-то вроде dd
'проверки первого мегабайта исходного диска (, который содержит загрузочную запись и, возможно, загрузчик ). ], затем перебирая содержащиеся в нем разделы :
dev=/dev/sda
fdisk -l "$dev" | sed -ne '/^\//s,\(^[^ ]*\).*,\1,p' | while read part
do dd "if=$part" "of=$(basename "$part")"
done
И после того, как вы запишете первый мегабайт на целевой диск, попросите ядро прочитать таблицу разделов с помощью partprobe
или kpartx
. После этого вы сможете dd
перенести содержимое соответствующих изображений на новые разделы.
Записать в конец последнего раздела (и еще немного, например всего 2G (гибибайт )в данном случае ).
Для этой цели можно использовать dd
. Проверьте и перепроверьте , что вы будете записывать на правильную SD-карту (, а не на другой диск ), прежде чем нажимать клавишу Enter, потому что dd
делает то, что вы говорите, без вопросов.
Эта командная строка работает с несжатым файлом изображения
$ sudo dd if=sdcard.img of=/dev/sdx bs=1M count=2K
где x — буква диска.
Но в данном случае это сжатый файл изображения. Запустите как root
(, например, через sudo -s
, и соответствующая командная строка может выглядеть так, где zcat
извлекается из сжатого файла gzip
.
# < sdcard.img.gz zcat | dd of=/dev/sdx bs=4096 count=524288
524288+0 records in
524288+0 records out
2147483648 bytes (2,1 GB, 2,0 GiB) copied, 56,6886 s, 37,9 MB/s