FAT32 不止 32GB?我也误会了很多年

原始链接在: FAT32 不止 32GB?我也误会了很多年 - 小众软件

当你用 Windows 格式化一个大于 32GB 的 U 盘时,并不能选择 FAT32 磁盘格式。但它才是那个可以在更多上古设备中打开的格式。

前几天,微软在 Windows 11 开发者预览频道 Dev 26300.8170 中,把 FAT32 的人为限制取消了,现在通过命令行格式化,可以直接创建最大 2TB 的 FAT32 分区。

是的,这是一项人为限制。

不过早在 2024 年,这个限制解除就进入了更激进的 Canary 测试通道。拖了将近两年,才推进到现在的 Dev 通道,后面什么时候会进入 Beta,甚至正式版,还不好说。

FAT32 的设计本身,一直以来都支持 2TB 大小,但早在 Windows XP 时代,微软就将其人为限制到了 32GB,一直兼容到了 Windows 11。

久而久之,包括青小蛙在内的很多人都默认 FAT32 最大只有 32G,毕竟它名字里还有一个很具有误导性的 32 😂。

至于 FAT32 真正的限制、缺陷:它不支持超过 4GB 的单个文件。

这个没变,估计也不会变了。

使用方法

插入超过 32GB 的 U 盘到电脑,使用命令提示符输入(假设U盘使用 e:):

format E: /fs:fat32

就行了。

趣闻

早在这项改动进入 Canary 测试通道时,微软的前 Windows 开发人员 Dave Plummer 在 X 上透露的:

我是在1994年末的一个周四雨天早晨,在微软写这个 Format 对话框的,我想是的。

我们当时正在将 Windows 95 用户界面的数十亿行代码移植到 NT 上,而 Format 只是那些 Windows NT 与 Windows 95 差异足够大,以至于我们必须设计一些自定义 UI 的领域之一。

我拿出一张纸,写下了格式化磁盘时所有可能的选项和选择,比如文件系统、标签、簇大小、压缩、加密等等。

然后我启动了 VC++ 2.0,用资源编辑器布局了一个简单的垂直堆叠,列出了你必须做出的所有选择,按你大致需要做出的顺序排列。它并不优雅,但它能用,直到优雅的 UI 到来为止。

那是大约30年前的事了,而这个对话框仍然是我那个周四早晨的临时版本,所以小心提交“临时”解决方案!

我还必须决定多少“簇松弛空间”才算太多,结果这限制了 FAT 卷的格式化大小为 32GB。这个限制也是那天早晨的一个任意选择,并且作为一个永久的副作用一直伴随着我们。

所以记住……没有“临时”的提交 🙂


原文:https://www.appinn.com/fat32-2b/

最后,Windows 10 不要想了,没这项功能,找第三方吧。

Canary通道测试的是“平台更新”,不是“最激进”

现在Dev和Beta是同步的

还有比 Canary 更激进的么

Canary并不一定有最新功能,例如Recall和Click to Do,延期了几个月才在Canary上出现

switch sd 卡只能用 fat32,否则会丢失数据,所以我的 1tb 卡一直是 fat32 的。这个“人为限制”其实早就可以用 diskgenies 绕过

2 个赞

如果只是UI上的限制,是不是意味着,可以直接hack进去恢复大于32G磁盘的FAT32选项(虽然不如直接用命令行)

不过阿三应该感谢30年前的程序员让win11多了项“值得称道”的“新特性”

那不就是第三方干的事情

是的是的,名字里的 32 让我以为 FAT32 就是最大容量 32G 的版本,然后 exFAT 就是支持超级大最大容量的改进版本。

1 个赞

是win太大跨度太久了吗?总觉得这样的“草台时刻”超级多的样子

啊,这……我甚至是第一次知道 Windows 之前还有这限制……

话说我之前买过几个 64 GB 的 U 盘,文件系统用的都是 FAT32(好像出场的时候有些就是格式化成 FAT32 的),而且平时格式化 U 盘基本上都是在 Linux 上进行的,所以从来不知道 Windows 还有不能把 大于 32 GB 的分区格式化成 FAT32 的限制。

另外我没有把 FAT32 中的 “32” 和 容量联系起来过,可能是因为我还见过 FAT16,而早期操作系统有 16 位和 32 位的,所以我一直以为 “FAT32” 的意思是给 32 位操作系统使用的 :xk:


言归正传,我上网查了一下,“FAT32” 这个名字中,“32” 的含义其实是:

为了解决FAT16对于卷大小的限制同时让DOS的实模式在非必要情况下不减少可用常规内存状况下处理这种格式,微软公司决定实施新一代的FAT,它被称为FAT32,带有32位的簇数,目前用了其中的28位。

理论上,这将支持总数达268,435,438(<228)的簇,允许磁盘容量达到8TB。

参考资料:https://zh.wikipedia.org/wiki/檔案配置表#FAT32

簇(Data cluster)或者分配单位(allocation unit)是操作系统中硬盘的文件储存管理单位,可由一或多个物理扇区组成,由格式化时选定文件系统而定。簇是操作系统用的逻辑概念,而非硬盘的物理特性。

参考资料:https://zh.wikipedia.org/wiki/簇

1 个赞

对的,不过这样会导致最小簇变大,存小文件就很浪费,哪怕是1kB也要占一个簇。NTFS是可以存在MFT里面的。

据说4GB的文件大小也是人为限制。

1 个赞

这个和 FAT32 的技术设计有关吧。

∵ FAT32 中,记录文件大小的字段是 32 位(是二进制位),单位是字节。

∴ 文件的最大大小就是232-1 字节。

又 ∵ 1 GB = 210 MB = 210×210 KB = 210×210×210 字节 = 230 字节,

∴ 232 字节 = 232÷230 GB = 22 GB = 4 GB

∴ 232-1 字节 ≈ 4 GB

综上所述,FAT32 中,文件的最大大小约为 4 GB。

我们可以用 10 进制类比一下。用 3 位数字,最大能表示的数字是多少呢?答案是 999(即 103-1)。

不过……考虑到文件系统也是人设计的,所以说 “4GB的文件大小也是人为限制”……也完全正确。

2 个赞

顺带,FAT系列文件系统还有文件总数限制(不是FAT16的根目录文件数限制):
(采自DS的回答;已从wiki条目印证)>>>

文件系统 簇号位数 FAT表最大项数 (理论) 对文件数量的影响
FAT16 16位 2^16 = 65,536 个 硬上限:包括根目录在内,所有文件和文件夹的总数不能超过这个数(实际略少,因为部分值被保留)。
FAT32 32位 2^28 ≈ 2.68亿 个 硬上限:理论上最多能管理2.68亿个簇,因此文件/文件夹总数不可能超过这个数(实际会远低于此)。
exFAT 32位 (增强) 2^32 - 1 ≈ 42.9亿 个 硬上限:理论上最多可管理42.9亿个簇,文件数量上限是天文数字。
<<<

NTFS直接使用文件的形式存放链表来记录数据块位置,从而摆脱了FAT表的束缚,文件大小和文件数都不受限制(只受限于最小一个扇区一个文件的规则,文件数上限就是磁盘/分区上扇区总数)。

有趣的是,纯NTFS分区的磁盘,需要老式Legacy(BIOS)的引导;而新式UEFI引导则需要磁盘第一个分区是FAT32文件系统才能实现……

我知道2^32=4G这个哏,不过我隐约记得有个地方说这只是个碰巧的解释。

现在找不到那篇文章了,我想大概是把32位Windows只支持4GB内存和这件事情记混了。

这不巧了吗,我的C盘是NTFS,D和E都是FAT32 :joy:

C盘是 NTFS,不代表第一个分区是 NTFS 的
——
补:DiskGenius的分区图:

其中MSR分区是微软保留的隐藏分区,无内容无格式化,纯占着连它自己也不知道能拿来干嘛

1 个赞