我有一张用于启动 Beaglebone Black 的 SD 卡。我在从这张卡启动时遇到了问题,无论是我制作的任何卡,最后我都发现问题是启动分区中的扇区数量不一致。
我的意思是,使用转储 MBRdd
并检查第一个分区条目,Number of sectors in partition
结果为0x40000
。这也是 GParted 报告的结果。然后,转储 FAT16 启动分区,结果Large number of sectors
仅为0x3fff8
。两者相差 8,这恰好也是分区报告的隐藏扇区数(尽管偏移量为 2048)。但为什么呢?启动 ROM 似乎抛出了错误,因为这两个数字不一致,而且我认为在绝大多数情况下甚至没有考虑隐藏扇区,更不用说确定扇区数了。这是怎么回事?
文件系统中的数据结构不一定支持所有可能的大小值。通常,只支持某些大小的倍数。因此,在分区上创建文件系统时,分区大小会四舍五入为文件系统支持的最接近的大小。
只要文件系统大小不大于分区,这就不会成为问题,也不会妨碍启动。(如果文件系统大于分区,那么一些数据将被截断,文件系统将损坏。)
可能是其他原因阻止了启动,但由于您的问题中没有包含任何实际错误,因此无法解决这个问题。
在评论中,您提到该
-a
选项允许您创建一个与大小完全匹配的文件系统。如果没有此选项,则默认将文件系统数据结构与“簇大小”对齐。簇大小(-s
)是每个簇的块数,可能具有根据磁盘大小计算的默认值。典型的 SD 卡使用 2k 块,但宣传为 512 字节块。人们希望文件系统簇大小是这个的倍数(
-s4
可能是的倍数)。错位或不同的簇大小可能会迫使 SD 卡跨物理块边界拆分写入,这可能会带来毁灭性的性能后果(如手册页中所述)。但是,如果您的分区边界已经与该块边界未对齐,则该
-a
选项可能会意外地允许文件系统重新对齐到该边界,特别是当分区在磁盘末尾结束并且有一些剩余的块没有时-a
。