先上结论:
NTFS:
4294967267 个
( = 2 ^ 32 - 1 (NTFS 限制) - 27 (元数据占用的文件) - 1 (用来测试的文件夹))。
记不住就记2 ^ 32 - 1个,
或者干脆记约42亿个吧!!!!
FAT32:
65535个。
Windows 现在默认使用 NTFS 文件系统。
从 https://en.wikipedia.org/wiki/NTFS 转 https://technet.microsoft.com/en-us/library/cc781134(v=ws.10).aspx 可知,NTFS 的限制为单卷 4294967295 (= 2 ^ 32 - 1) 个文件。
然后问题是“一个文件夹最多放多少个文件”,因此已经默认先有一个文件夹占着。
然后 NTFS 默认还有那些不可见的元数据们。
做了一个测试,dd if=/dev/zero 出一个文件,用 OSFMount 挂载它,然后格式化为 NTFS,新建一个文件夹,卸载它,用 7-Zip 查看这个文件。
元数据按照 iNode 号排列如下:(混进了奇怪的东西)
0. $MFT
- $MFTMirr
- $LogFile
- $Volume
- $AttrDef
- . (文件夹)
- $Bitmap
- $Boot
- $BadClus
- $Secure
- $UpCase
- $Extend (文件夹)
- (没找到)
- (没找到)
- (没找到)
- (没找到)
- (没找到)
- (没找到)
- (没找到)
- (没找到)
- (没找到)
- (没找到)
- (没找到)
- (没找到)
- $Extend\$Quota
- $Extend\$ObjId
- $Extend\$Reparse
- $Extend\$RmMetaData (文件夹)
- $Extend\$RmMetaData\$Repair
- $Extend\$Deleted (文件夹)
- $Extend\$RmMetaData\$TxfLog (文件夹)
- $Extend\$RmMetaData\$Txf (文件夹)
- $Extend\$RmMetaData\$TxfLog\$Tops
- $Extend\$RmMetaData\$TxfLog\$TxfLog.blf
- $Extend\$RmMetaData\$TxfLog\$TxfLogContainer00000000000000000001
- $Extend\$RmMetaData\$TxfLog\$TxfLogContainer00000000000000000002
- $Extend\$UsnJrnl
- System Volume Information (文件夹)
- System Volume Information\EfaSIDat (文件夹)
- System Volume Information\EfaSIDat\SYMEFA.DB
- (自己建的文件夹)
因此在我的这个测试下,符合问题的情况为:
一个 NTFS 分区下有 40 个元文件,和一个题主说的文件夹,然后这个文件夹下有 4294967244 个文件。
虽然实际情况下有几万个文件就足够那个 Windows 资源管理器吃一壶了。
但是这跟那个英文维基说的不一致…那边写的是第 27 开始为自己的文件,那样的话极限就是 4294967267。并且得知那些“找不到”其实是 $MFT 扩展项的保留。是哪里被污染了吗…
好的找到污染源了就是 OSFMount。
于是重新搞了一下,用 mkfs.ntfs -F 直接创建,然后用 7-Zip 打开,确实发现上面的 27 - 39 消失了。于是确认极限为 4294967267 ( = 2 ^ 32 - 1 (NTFS 限制) - 27 (元数据占用的文件) - 1 (用来测试的文件夹))。
评论区有问到 FAT32。实测是 65535。
从 https://en.wikipedia.org/en/File_Allocation_Table
另外问问一般文件夹里面放多少个文件比较吼。
按功能而不是按数量吧?