创建 SD 卡磁盘映像时出现问题

创建 SD 卡磁盘映像时出现问题

我已经构建了一个分区大小为 3.1 GB 的 Armbian 自定义映像,现在我已经完成了它的使用。当前它被写入使用 GUID 分区表 (GPT) 的可启动 64 GB SD 卡。

我的问题是,当我想使用 Ubuntu 制作卡的图像时,我得到一个大小为 63 GB 的图像文件,但我不想要一个具有 60 GB 空白空间的图像文件。

我寻找其他方法通过使用truncate命令来缩短图像文件,并使用创建图像dd count=,但它不起作用。当我使用它时dd,它会创建一个映像文件,该映像文件在安装时全部是“可用空间”和 PMBR,并truncate会破坏工作映像文件。

那么(除非我做错了),如何创建包含启动信息的 SD 卡 3 GB 映像?

答案1

truncate是一个很好的工具。您需要缩小映像,以便它包含分区表中定义的每个分区。换句话说,如果最接近末尾的分区的结束扇区是N(注意它不一定是编号最高的分区),则需要N+1图像的扇区(+1因为编号从 开始0)。

使用gdisk -l image就知道了N

该卡很可能使用 512 字节扇区,并且分区表在按照 512 字节扇区解释时是有效的(用于比较:看看当这个假设不成立时会发生什么)。所以你需要(N+1)*512字节(或更多,拥有更多并不致命)。truncate因此。

首先直接从卡读取这个字节数会得到相同的结果。一个简单的方法(虽然非 POSIX,请参阅) 是head -c number-of-bytes-here /dev/sdx > image

那么您需要 33 个额外的逻辑扇区作为辅助(备份)GPT。truncate再次使用33*512并向文件添加字节 ( truncate -s +16896 image)。我们可以使用第一个将图像缩小到所需的最终大小truncate(或使用 阅读更多内容head),但是分两步执行此操作会导致这些额外的 33 个扇区包含零,而不是可能会暂时干扰的垃圾。

第一次截断(或创建部分图像)丢弃了原始辅助 GPT。使用gdisk image并让它解决问题。它会告诉你,disk size is smaller than the main header indicates并且invalid backup GPT header, but valid main header; regenerating backup header from main header。多亏了第二个,truncate才有了备份 GPT 的空间。您所需要的只是“w将表写入磁盘并退出”;该工具将重写 GPT,包括备份 GPT。

相关内容