我将USB读卡器插入microSD卡(该SD卡此前刷入过micropython固件包),并将其连接至电脑,接着我在win系统下,在SD卡目录下创建了一个文件wtf.txt,然后打开WSL,使用usbip将该u盘共享,在WSL下,u盘能正确读取、挂载,我在WSL重新对这个u盘使用fdisk重新分区,mkfs重新格式化为FAT32文件系统,并且在WSL下touch了一个新文件hi.txt,使用sync同步,然后使用usbipd的命令断开连接,接入win系统后,wtf.txt居然还在,再次将u盘接入WSL,发现hi.txt也在,也就是说,同样的SD卡,两个系统读到的东西却不一样,这是怎么回事?
按照网上的主流方法,尝试过编译内核添加usb驱动支持,手动安装usbip工具都不管用。
在使用fdisk分区时,我发现如下警告:
1 |
|
在询问chatgpt后,弄清了这条警告的含义:
Hybrid MBR(混合主引导记录) 是一种兼容机制,它允许一个磁盘同时拥有:
这种结构通常用于让 使用 GPT 分区的磁盘仍然可以在一些只识别 MBR 的系统中启动,比如旧版 BIOS 系统。
我突然想起来这个SD卡不就是之前用于引导启动micropython固件的吗,所以存在混合结构,而正是这样的混合结构,是使得在win下,系统读到的是MBR分区表,Linux下读到的是GPT分区表,这就像 SD 卡前面贴着两张标签纸(MBR 和 GPT):
于是我按照GPT提供的方法,使用命令彻底清除磁盘前部(包括 MBR & GPT):
1 |
|
完全抹除了旧的结构信息,再次重复分区、格式化、挂载、创建文件等操作,这下两个系统读取到的文件就同步了😍!