最近再次遇到了Linux下将U盘分区并格式化后Windows无法识别的情况。按理说单一分区exFAT格式不至于识别不到!?
请教了一下Google老师,在红迪上找到了一个被downvoted并回复点草的解释(但其实说对了一部分):
r/psyblade42:
In my experience windows is very picky about partition tables.
If windows thinks of it as a USB stick it MUST NOT HAVE a partition table.
If windows thinks of it as a USB hard drive it MUST HAVE a partition table.
Windows’ perception of hdd vs. stick might not match yours (or anyone elses for that matter)
经过实验后发现的确如此,但又不完全如此:原先没有分区表,在Windows下双击盘符直接格式化使用的U盘,在Linux下只能看到一个sda
,确实没有分区表;但这又与经验是冲突的, 我自己就用过多个分区的U盘的呀!? 虽然explorer.exe
和diskmgmt.msc
不支持将U盘分多个分区,但很显然diskpart.exe
可以——
于是我尝试用diskpart
给U盘分区,不试不知道,一试吓一跳:无论MBR还是GPT,diskpart
都会给U盘创建正常的分区表(哪怕是全盘一个分区),Linux下就可以看到sda
里面还有一个sda1
。
那问题又回来了,为甚喵Linux下分出来的分区表Windows不认呢?
最终经过再一番搜索,发现了罪魁祸首:分区的msftdata
标志。在U盘有分区表的情况下,Windows只会列出带有msftdata
flag的分区,而在Linux下直接创建出来的分区并喵有这个flag。(尤其是通过清零等方式破坏原有分区表之后,Linux当然不会主动为创建的分区带这个flag啦)Source
既然知道了原因便可以对症下药,创建分区之后用parted
等工具给希望在Windows下访问的分区添加msftdata
标志即可。
1 |
|
进一步试验更新:若在Linux下创建MBR分区表,parted
就无法添加msftdata
标志,此时在Windows下就无法识别。但通过DiskGenius等工具转换Type ID之后,分区又能正常识别。申必喵。 Windows,很神奇罢!
更新2:dd
清零的盘在Windows下直接双击格式化使用,DiskGenius工具识别为USB-FDD。并不是USB-ZIP!