昨天豆子发现公司的文件服务器(windows 2012 )上的磁盘空间快满了,1.9T的空间只有10G剩余了,于是移走了40G的文件,意外的发现剩余空间居然一点都没改变!!这是怎么回事,经过研究,发现这是因为在该磁盘上打开了Deduplication的功能造成的。
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中删除。这就是为什么我最初删除了40G的文件,但是我的剩余空间并没有增加,因为我并没有删除对应的Chunk Data。
知道了工作原理,那么我们来看看如何删除?
首先看看当前的状态,这个可以通过GUI查看,也可以通过命令行,不过命令行可以获取更多的信息,比如看看上一次的优化,垃圾回收,和自我修复是什么时候执行的?该磁盘总共多少个文件,有多少个已经优化了?这些具体的数据GUI里面都看不见的,所以Powershell的相关命令真的很重要。
也可以查看一下默认的schedule task是什么时候,可以跟上一个结果进行对比
这个计划任务也可以通过GUI查看
当我删除了一个文件以后,为了释放空间,我可以更改GarbeCollection schedule task的时间让他执行,也可以输入以下命令强制立刻执行
Start-DedupJob–Volume E: –Type GarbageCollection –full
豆子设定了自动运行的时间,1.9T的磁盘大概运行了40分钟,就成功的释放了剩余的空间出来。
另外再谈谈另外一个遇见的场景,大概几个月之前,豆子在使用VEEAM还原文件服务器内容的时候,也因为Deduplication遇见过问题,会提示我访问权限有问题。解决方法也是需要在VEEAM服务器上安装Deduplication 服务,而且需要确保VEEAM的Windows等同或者高于文件服务器的版本号,才能正常识别这种新的存储方式。
总之,Data Deduplication是个很好的功能,他在windows传统的文件压缩功能上更进了一步,和VSS类似,是直接执行在Volume磁盘上,激活了Dedup的磁盘不能和文件压缩功能混用。不过使用的时候一定要小心,不能随便把以前的经验硬套进来。