Windows文件服务器启用了重复数据删除(Data Deduplication)经验分享
昨天发现公司的文件服务器(windows 2019 )上的磁盘空间快满了,2T的空间只有200多G了,于是删除了2020年12月31日前的所有文件,发现剩余空间居然一点都没改变!!
这个问题我曾在一个客户那边也出现过,客户使用的是存储,我理所当然的就把问题归咎于存储设备了,并要求客户找存储厂商解决,我也就没再跟进此事。
我自己的文件服务器并没有用存储,这是怎么回事呢?我用Diskginus 打开磁盘查看,发现System Volume Information\Dedup\ChunkStore下占用的空间与失去的空间一致,经研究,这是因为在该磁盘上启用了重复数据删除功能所致。
Data Deduplication是windows 2012开始增加的新功能,可以大大优化存储空间。不过在使用的时候需要注意,我已经经历了2起因为这个功能引发的小问题了。
如下所示,Datadisk1上激活了Deduplication的功能,硬盘本身1.9T,但是实际保存了近乎3.5T的内容,节省空间45%以上。
需要注意的是,这个功能激活以后,存储文件的方式就和windows 2008 以前的方式不太一样了。每个文件把自己的内容分成了2个部分,自己所独有的,以及和其他文件相同的部分。每个文件自己仅仅保留独有的部分,比如名称,属性,创建时间等等,这些东西我们一般称为metadata,另外占据90%以上的“真正内容”,是保存在chunk store中,也就是每个磁盘对应的隐藏文件夹 System Volume Information Store里面 (你如果打开VSS,快照也是保存在这里面)
比如说,查看一下其中一个文件的属性就可以看见,该文件的Size,也就是逻辑大小应该是21.6G,但是Size On Disk只有258K,这个其实仅仅是他的metadata的内容。如果我删掉这个文件夹,那么他仅仅会清空258K的文件!!我们还需要执行一个Garbae collection(垃圾回收)的操作,才能将该文件关联的内容从Chunk Store中删除。这就是为什么我最初删除了不用的文件,但是我的剩余空间并没有增加,因为我并没有删除对应的Chunk Data。
知道了工作原理,那么我们来看看如何删除?
首先看看当前的状态,这个可以通过GUI查看,也可以通过命令行,不过命令行可以获取更多的信息,比如看看上一次的优化,垃圾回收,和自我修复是什么时候执行的?该磁盘总共多少个文件,有多少个已经优化了?这些具体的数据GUI里面都看不见的,所以Powershell的相关命令真的很重要。
也可以查看一下默认的schedule task是什么时候,可以跟上一个结果进行对比
这个计划任务也可以通过GUI查看
当我删除了一个文件以后,为了释放空间,我可以更改GarbeCollection schedule task的时间让他执行,也可以输入以下命令强制立刻执行磁盘清理
Start-DedupJob -Volume D: -Type GarbageCollection -full
总之,Data Deduplication是个很好的功能,他在windows传统的文件压缩功能上更进了一步,和VSS类似,是直接执行在Volume磁盘上,激活了Dedup的磁盘不能和文件压缩功能混用。