一个OneDrive同步目录里能放多少个文件?有限制吗?
答案是15万个(150000, 150K)。这是微软未公开的秘密。
数字的由来
当我用OneDrive Windows客户端下载一个OneDrive目录时,发现文件数目是15万个。而源目录里放了接近20万个文件。
以为是同步异常中止了,于是清除账号重新下载了一次。结果还是15万。
直觉上这个数字不应该是NTFS文件系统的限制。为了确认,我在这个目录里新建了一个文件。于是彩蛋出现了。
微软怎么说的?
微软很自豪地说:
With the OneDrive sync client, files automatically sync in the background, the individual file size limit is increased to 10 gigabytes, and the 20,000 file limit has been removed.
来源:Take advantage of the new OneDrive Sync Client
微软说去掉了2万个文件的限制(不知道这是总数2万,还是单个目录2万。估计是总数),但它没说这个额度提升到了15万!
究竟是谁的限制?
登录OneDrive网页版,发现云端的文件数也是15万个。
而原始文件是193529个,而且是用OneDrive Linux客户端上传的。看来是只上传了15万个文件。
从Linux和Windows两种客户端的表现来看,说明15万的限制不是来自客户端,而是来自云端。
DropBox怎么说?
The number of files you can store in your Dropbox is limited by the amount of storage space in your Dropbox account.
The performance of the Dropbox desktop app can decline if you have more than 300,000 files synced to your computer. This is a soft limit and depends highly on the hardware specifications of the computer running the app. Some customers can sync more files without issue.
来源:How many files can I store in my Dropbox account?
这里并没有说每目录的文件数限制,估计也是没有限制。
文件系统的限制
引申思考:一个目录里能放多少个文件?
回答:这一般取决于文件系统。
- FAT32: 65,536个。 见:FAT File System
- NTFS:4,294,967,295 (2^32-1)个。 见:NTFS vs FAT vs exFAT(实际上这里只是说了一个巻的文件数限制,但一些说法认为目录里的文件数只受限于此,ext4也是这样)
- ext4: 没有限制。(没找到确定的说法,这里说连子目录数都没有限制;这里说取决于mkfs的参数。基本上都是没有限制的意思。)
为什么是15万?
15万是一个很突兀的数字。它不接近2的任何次方,所以毫无码农之美感;它看起来也不像一个有特别意义的数字(比如以151129为限制是因为写到这行代码时是2015年11月29日)。
所以它不可能来自程序自身。怀疑它是一个非码农的产品经理拍板的数字,或者运维人员设定的一个值。希望它是一个统计分析的结果,比如文件数超过15万,同步性能会明显下降;或者统计分布预测,在一个目录里放10万个文件的用户比例小于1ppm。