关于FAT32分区的U盘4GB文件的测试

很多人都知道FAT32的分区,单文件大小不能超过4GB,关于这个问题就来测测看。

FAT32最大文件大小为2的32次方,也就是4294967296
Byte,这跟32位操作系统在不使用PAE的情况下不能使用超过4GB的内存是一个道理,那么:

4294967296 Byte = 4194304 KB = 4096MB =
4GB

4294967295 Byte = 4194304 KB – 1Byte = 4GB –
1Byte

我们使用windows自带的fsutil创建指定大小的空文件:

以管理员身份运行cmd,使用以下命令来创建一个4294967295
Byte的文件:

fsutil file createnew test.img
4294967295

然后再把它拷进FAT32格式的U盘里面,成功,如下图。事实证明FAT32文件系统能容纳的最大文件为4294967295
Byte = 4194304 KB – 1Byte = 4GB – 1Byte。

那么问题来了,上图里面的文件属性里面,文件大小为3.99GB (4294967295
Byte字节),然而占用空间却为4.00GB (4294967296
Byte字节),这是何故呢?

在windows里面对任意一个分区右键选择格式化,会出现下面这个图:

这里有个分配单元大小,它指的是存储设备上物理层面上划分的存储文件的最小单元,也就是说,一个任意大小的文件,占用的空间都必须是“分配单元大小”的整数倍。那么,如果选择格式化这个磁盘时选择是分配单元大小是8192字节,那么,一个8193字节的文件就会占用两个分配单元的空间,即16384字节=16KB,下面就来验证一下。

我们在这个盘上创建一个8193字节的文件,仍然使用上面提到的fsutil工具:

fsutil file createnew test.txt
8193

查看属性如下:

事实证明上面的推断是正确的,当写入8193字节的文件,以8192字节最小分配单元格式化的情况下,它就会占用两个8192字节也就是16384Byte
即16KB的空间。

所以在格式化磁盘的时候,这个分配单元大小是需要考虑的,要根据实际存储的文件来设置。如果格式化时选了16KB的分配单元大小,而经常在该磁盘上存储大量1KB左右的小文件,那么就是15KB的空间是被白白浪费的,假设存放了1000个1KB的文件,那么就是15KB*1000=15000KB=14MB的空间被浪费了。不过好在现在的U盘硬盘容量都是以数GB甚至数TB来算的,所以这点空间浪费也不算什么。

文件分配大小这个值,是根据不同的磁盘有不同的选择范围的。比如刚才测试用的U盘最小的分配单元就是4096,而另外一个U盘又是2048最小。而对于硬盘,固态硬盘和机械硬盘也有差异,比如我在用的一块SSD最小分配单元是512字节,而另外一块机械硬盘是4096字节。12年以前生产的稍老一些的机械硬盘,最小分配单元多都为512字节,12年后生产的机械硬盘,多采用了一种名为“高级格式化”技术,它的最小分配单元都是4096字节即4K。

其实关于分配单元大小可以展开很多讲的,比如以前的512字节分配单元的硬盘有何弊端?为什么现在的机械硬盘基本上都是4K最小分配单元,以及不同分配单元对于文件的读写速度有何影响?可以参考下面这篇文章
http://memory.zol.com.cn/213/2136092_all.html

最新文章

  1. C++ win32线程数上限
  2. ubuntu关于apache服务命令
  3. linuxMint下面的截图工具
  4. Android APP测试的日志文件抓取
  5. Altium Designer生成网表 导出网表【worldsing笔记】
  6. 详细解析 RxAndroid 的使用方式
  7. 一些实用的CSS Media Query代码片段,个人采集
  8. html标签大全(1)
  9. shell编程其实真的很简单(四)
  10. SerialPort如何读取串口数据并显示在TextBox上,多线程委托
  11. 利用MMdnn对比keras和mxnet
  12. 项目管理——WBS工作分解法
  13. 缺少的文件是 ..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props。
  14. 菜鸟翻译:国外的一个关于.net core的学习系列 第一天(安装并运行.NET core 到windox系统里面)
  15. AngularJS——第7章 依赖注入
  16. IDEA的GUI连接数据库写入SQL语句的问题总结
  17. 【转载】配置文件报错:不允许有匹配 [xX][mM][lL] 的处理指令目标
  18. mfc的一点总结-----Edit Control操作
  19. Devexpress GridControl无限高度惹得祸
  20. P2925 [USACO08DEC]干草出售Hay For Sale 题解

热门文章

  1. Spring mvc <mvc:resources ***/> 作用
  2. 准备把平台挪到linux
  3. (转载)android控件之WebView控件缩小
  4. 压缩图片C#算法
  5. FCC高级编程篇之Validate US Telephone Numbers
  6. Quartz任务调度 服务日志+log4net打印日志+制作windows服务
  7. HDU 6315 Naive Operations(线段树+复杂度均摊)
  8. 【转载】02-PowerDesigner的下载及安装
  9. Python ftplib 模块关于 ftp的下载
  10. MooseFS源代码分析(二)