我有一台嵌入式 Linux 设备(不是 Raspberry Pi),它在 eMMC 驱动器上有两个分区。我使用供应商提供的工具将这两个分区复制到 USB 驱动器上,该驱动器的大小大致等于 eMMC 驱动器的大小。
我接下来要做的是将 USB 驱动器安装到 Linux 计算机上,并使用诸如和e2fsck
之类的工具resize2fs -M
将第二个文件系统的大小调整为最小可行大小,最后用于gdisk
调整分区本身的大小以匹配。
在所有计算中,我都小心确保分区不会小于文件系统,甚至我将分区做得稍微大一些,然后再resize2fs
扩大文件系统以匹配它。
完成这些操作后,我得到了一个 16 GB 的 USB 驱动器,其中包含一个 118 MiB 的启动分区和一个 3.1 GiB 的根文件系统分区。然后我习惯dd
直接从 USB 驱动器读取数据,利用bs=
和count=
参数将读取的数据量限制为仅延伸到第二个分区结束的地方加上一个额外的扇区以容纳“零扇区”。
结果是,我现在有一个图像文件,其中两个分区的大小与它们对应源的大小完全相同,但是当我使用 7-Zip 工具的“文件”->“属性”选项时,它声称“物理大小”(红色圈出)大于这些分区,并且大于我指示dd
从源复制的大小。
这个“物理大小”值从何而来?它是分区表的一部分吗?还是dd
以某种方式从磁盘读取的?
有什么方法可以修改它以摆脱“意外的数据结束”错误?
是的。
请参阅GUID 分区表 - 维基百科
是的。
看来标准 Linux 工具知道如何修复截断的 GPT 磁盘。
创建 test-short.img 时遇到同样的问题
如何修复该问题
IIUC,您在映像文件末尾留下了一个空扇区,我们可以将其用作“辅助 GPT 标头”(尾部?)。假设该表有通常的 128 个分区条目,您需要为这些条目添加另外 32 个扇区,然后就可以解决问题了。
确认 test-short.img 已修复
创建文件系统时,会保留 5% 的空间供 root 执行写入操作。这原本是为了让系统即使在用户进程运行后也能进行恢复。
因此,“最小可行尺寸”对于非根进程来说是不可行的。
或者,创建一个 4GB 的分区,进行复制,然后将大小减小到合适的最小值。