【发布时间】:2020-05-16 05:11:05
【问题描述】:
我有一个包含分区表及其 4 个分区的图像(更具体地说,是为熟悉 Yocto 框架的人准备的 wic 图像)。它的大小略小于 1GB。
为了将此图像写入 eMMC:
- 我首先通过 TFTP 将其加载到 RAM 中
=> tftp 0x600000000 <image>.wic
- 然后我将图像从 RAM 写入 eMMC
=> mmc write 0x600000000 0x0 0x1FFFFF
- 图像写入正确,我可以列出 4 个分区。到目前为止,一切顺利。
=> mmc part
Partition Map for MMC device 1 -- Partition Type: EFI
Part Start LBA End LBA Name
Attributes
Type GUID
Partition GUID
1 0x00000800 0x0000681f "boot"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: cd5df8ce-ded3-4cf4-b364-33d7a4b24953
2 0x00006820 0x000139e7 "first"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: 3acc4557-2273-462a-a2bd-d130b3a5745d
3 0x00014000 0x000fefff "second"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: efe25a87-e0ba-401e-8bf6-e81ae29cbc35
4 0x000ff000 0x001e9fff "third"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: 150f9151-7710-42f4-b819-3b3bd506a2bf
现在我想复制 eMMC 中的图像,这样我就得到了 8 个分区,如下所示:
Part Start LBA End LBA Name
Attributes
Type GUID
Partition GUID
1 0x00000800 0x0000681f "boot"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: cd5df8ce-ded3-4cf4-b364-33d7a4b24953
2 0x00006820 0x000139e7 "first"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: 3acc4557-2273-462a-a2bd-d130b3a5745d
3 0x00014000 0x000fefff "second"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: efe25a87-e0ba-401e-8bf6-e81ae29cbc35
4 0x000ff000 0x001e9fff "third"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: 150f9151-7710-42f4-b819-3b3bd506a2bf
5 0x00000800 0x0000681f "boot"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: cd5df8ce-ded3-4cf4-b364-33d7a4b24953
6 0x00006820 0x000139e7 "first"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: 3acc4557-2273-462a-a2bd-d130b3a5745d
7 0x00014000 0x000fefff "second"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: efe25a87-e0ba-401e-8bf6-e81ae29cbc35
8 0x000ff000 0x001e9fff "third"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: 150f9151-7710-42f4-b819-3b3bd506a2bf
所以我再次用偏移量将相同的图像写入 eMMC(以不覆盖现有的图像)
=> mmc write 0x600000000 0x200000 0x3FFFFF
MMC write: dev # 1, block # 2097152, count 4194303 ... 4194303 blocks written: OK
但是,我没有得到我期望的 8 个分区,而只有 4 个分区:
=> mmc rescan
=> mmc part
Partition Map for MMC device 1 -- Partition Type: EFI
Part Start LBA End LBA Name
Attributes
Type GUID
Partition GUID
1 0x00000800 0x0000681f "boot"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: cd5df8ce-ded3-4cf4-b364-33d7a4b24953
2 0x00006820 0x000139e7 "first"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: 3acc4557-2273-462a-a2bd-d130b3a5745d
3 0x00014000 0x000fefff "second"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: efe25a87-e0ba-401e-8bf6-e81ae29cbc35
4 0x000ff000 0x001e9fff "third"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: 150f9151-7710-42f4-b819-3b3bd506a2bf
【问题讨论】:
-
我很好奇:使用
testdisk修复分区表成功了吗?因为我意识到每个分区都有一个唯一的 GUID 标识符。所以我猜如果你复制你的分区,你也会有重复的 GUID,这可能会导致一些问题。或者testdisk是否能够分配新的分区 GUID? -
我还没有尝试过
testdisk,但我接受了你的回答,因为它帮助我了解了问题的根本原因。我将尝试使用“testdisk”或其他工具修复我的分区表,然后回复您:) -
@VictorDeleau 我尝试了 testdisk,我能够更改磁盘映像的几何形状并将柱面数量增加一倍。这导致图像大小加倍,这是预期的。我在 eMMC 上写了这个图像,然后我在偏移处写了另一个图像,但我只能看到 4 个分区而不是 8 个分区。我想我需要在将磁盘映像写入 eMMC 后更改其几何形状才能使其正常工作。而且由于我在 u-boot 环境(而不是 linux)中工作,所以这会使事情变得复杂,因为我需要手动修改 eMMC 内存..
-
@VictorDeleau ..更不用说必须重新计算 CRC32 并将其重新注入内存,这可能很麻烦。尽管如此,testdisk 在更深入地了解我的问题方面非常有用,而且它相对容易使用。我的新方法是尝试使用 uboot 命令行“gzwrite”,它能够将 8 个分区的映像从 RAM 解压缩到 eMMC,绕过 RAM 大小限制。