您在对RooTer的评论中提到:A)您已使用减小了初始分区的大小gparted
,但dd
仍复制了整个卡,并且B)您想要在图像中包括两个分区。
问题“ A”很容易解释:您仍在复制整个卡,因为这就是/dev/mmcblk0
所指的内容。各个分区当然是/dev/mmcblk0p1
和/dev/mmcblk0p2
。这是问题“ B”中的复杂问题,但是您不能简单地将dd
每个分区都将两个文件连接在一起,因为分区表的开头/dev/mmcblk0
索引了每个分区的开始和长度。否则,该图像将无法使用。
但是,您可以从获得每个分区的长度fdisk -l
,并使用该长度来确定的一些参数dd
。例如:
> fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 16.1 GB, 16138633216 bytes
4 heads, 16 sectors/track, 492512 cylinders, total 31520768 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017b69
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/mmcblk0p2 122880 26746879 13312000 83 Linux
“开始”和“结束”单位是扇区,注意扇区大小为512字节。对于/dev/mmcblk0p2
,26746879(最后一个扇区)-122880(第一个扇区)= 26623999/2(每kB 2个扇区)/ 1024(kB每MB)/ 1024(MB每GB)= 12.69,我使用gparted扩展了分区到12 GB,所以这看起来是正确的(确实,我应该使用1000而不是1024作为带存储空间的除数,这可以达到13.31 GB,但是我怀疑gparted和其他一些工具也使用1024)。
因此,您要检查的第一件事是第二个分区实际上是您设置为其的较小分区。接下来,只需将这些数字与dd
; 一起使用即可。对我来说是:
dd if=/dev/mmcblk0 of=rpi.img bs=512 count=26746880
我在那里有一个额外的部门,以避免因误解dd
工作原理而产生任何错位。有一种简单的方法可以检查是否有效:
> fdisk -l rpi.img
Disk rpi.img: 102 MB, 102400000 bytes
255 heads, 63 sectors/track, 12 cylinders, total 200000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017b69
Device Boot Start End Blocks Id System
rpi.img1 8192 122879 57344 c W95 FAT32 (LBA)
rpi.img2 122880 26746879 13312000 83 Linux
请注意,此处存在一些差异:“开始”和“结束”扇区与原始分区表匹配,但是顶部统计信息的总大小仅为102 MB!这是因为我实际用作count=200000
参数,dd
因为我真的不想打扰12 GB的副本(注意“总200000个扇区”)。底部的表不能反映这一点的原因是因为fdisk从SD卡的开头逐个复制映像中的分区数据来获取其信息,正如我在第二段中提到的那样,至关重要保持。如果我(正确地)复制了其余的内容,那么这些数字将是正确的,并且图像将是可行的。
试试看。:)