Windows NTFS文件系统中大量小文件导致空间统计异常问题

Windows NTFS文件系统中大量小文件导致空间统计异常问题

更新时间:2020-01-09 10:04:17

免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

问题描述

  • 问题场景一:大量小于1KB文件占用空间问题。如下图所示,Windows系统中从文件统计看占用磁盘空间1.56MB,共计409600个小文件,每个文件包含几个字符,容量大约为几个bytes,但磁盘显示使用空间已经占用594MB,两处空间大小统计相差较大。
    image.png
  • 问题场景二:大量小文件但大于1KB文件占用空间问题。如下图所示,文件共409600个小文件,文件本身大小为1KB,实际文件容量为400MB,但占用空间为1.56GB。
    image.png

 

问题原因

  • 问题场景一:该情况为NTFS文件系统中NFT占用导致,与NTFS文件系统中的文件存储方式有关。NTFS文件系统格式化后简单的结构如图所示。
    image.png
    其中BOOT中存放文件系统基础信息,如簇大小等。NTFS的文件信息都存放在Master File Table(MFT)中,每个MFT的记录是1KB大小,且固定不变。每个记录对应一个文件,或者对应其它文件系统对象。记录格式为:记录头+属性1+属性2+...+属性n,属性里包括文件名、长度、修改时间等等。如果文件信息足够小,那么1KB的记录是用不满的,剩下的部分就可以放文件内容。其中,当文件足够小的时候,DATA里放的就是文件内容,当文件足够大的时候DATA放的是指针,指向另外一个区域保存更大的数据。针对此问题,409600个文件要消耗409600个MFT记录,共计消耗容量400MB。此外,NTFS文件系统日志和位图等也需要消耗空间,共计消耗594M容量。此情况也可以通过执行“chkdsk d:”命令获取相关系统占用信息,此问题执行“chkdsk d:”命令后详细信息如下图所示。
    image.png
    或者使用WinHex
    程序获取更详细的系统占用,下载WinHex后运行,后续使用“Tools-Open Disk”命令打开需要分析的磁盘,获取详细信息,如图所示,MFT占用了400MB空间,LogFile占用了64MB,BitMap占用了3.1MB
    image.png
  • 问题场景二:针对NTFS文件系统中默认文件的分配单元以簇的方式进行分配管理,默认最小的簇大小为4KB,当文件小于4KB或剩余分配不足4KB时,实际分配仍旧为一个簇,即4KB大小,则会导致占用磁盘空间较大。

 

解决方案

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
  • 问题场景一:针对MFT中已经分配的空间,默认删除文件会被标记为空,但不会自动回收,提升再次创建文件时的效率。如果确实需要释放,一般需要第三方磁盘清理或整理工具进行,分区容量不大时,也可以创建大文件占用空间,此时系统会自动释放已经删除的MFT空间。针对此类情况,也建议针对小文件进行定期压缩备份,降低MFT占用的空间,或从业务逻辑上减少大量小文件使用。
  • 问题场景二:如果业务中确实有大量小于4KB文件或大量小文件存储,也可以定期压缩备份减少磁盘占用,或者当小文件有固定大小时,可以在磁盘格式化时手工指定更小的簇大小,用以避免空间浪费的情况。指定簇大小可以在格式化过程中选择合适的分配单元大小,其中默认配置大小为 4096字节,如下图所示。
    image.png

 

提示:格式化磁盘为危险操作,请提前对磁盘进行快照备份,防止意外情况发生。快照备份方法请参考创建快照

 

相关文档

如何定位并更正NTFS文件系统中的磁盘问题请参考参考文档

适用于

  • ECS