2014-07-09 56 views
1

我已经提供了一个3.8GB的SD卡映像,用于闪存到一个4GB SD卡,用于在RaspBerry PI开发板上引导定制版本的Raspian OS。它有一个第一个主分区,它是FAT32,用于保存引导加载程序,另一个分区是用于存放操作系统的自定义类型。dd - 备份MBR /分区表和第一个分区

我可以通过部署在其上的映像从SD卡上引导PI,在电路板运行时修改其内容,然后关闭电路板。

我想在修改引导时卡的内容后创建自己的磁盘映像。这将involve backing up the MBR,我将通过尝试:

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

我可以一次通过,然后备份每个分区一个单独的文件:

dd if=/dev/sda1 of=~/Desktop/sda1.raw bs=1m 
dd if=/dev/sda2 of=~/Desktop/sda2.raw bs=1m 

有什么办法来连接这些文件到单个图像,还是安全地脚本dd首先将其所有内容提取到单个文件?引导加载程序和操作系统分区的大小将来可能会发生变化,但它们始终是连续的。

回答

1

在最后,我做了以下工作:

  1. 使用fdisk -l /dev/sdc列出SD卡上的所有分区。请注意第一个分区的块大小(通常为512)和“计数”(即:占用的块数)
  2. 定义变量blks,如count+1
  3. 发出命令:dd if=/dev/sdc of=~/my_image.img bs=512 count=${blks}
+1

谢谢,但是为什么你给'count'加'1'? – greenoldman

+1

因为他想要第一个分区('count' blocks)和MBR('1'块)。 – jangxx

3

使用子shell这样的:

(dd if=/dev/sda1 bs=1m; dd if=/dev/sda2 bs=1m) > ~/Desktop/sda1+2.raw 

或者,如果你想要的512字节MBR在那里,以及(可能不是最好的主意),你可以这样做:

(dd if=/dev/sda bs=512 count=1; dd if=/dev/sda1 bs=1m; dd if=/dev/sda2 bs=1m) > ~/Desktop/MBR+sda1+2.raw 
+0

我试过两个的后面,但是当我试图写入输出文件恢复到SD卡,它无法识别。 – DevNull

+0

我真的不喜欢把MBR和parttions混合在一个文件中的想法。如果您从原始文件的前面读取MBR并将其重新放回驱动器,然后将剩下的部分放在后面? 'dd if = file.raw of =/dev/sd? bs = 512 count = 1',然后是'dd if = file.raw of =/dev/sd?1 bs = 512 iseek = 1' –

+0

我会用第一个建议与单独的MBR一起去。 –