NTFS误报可用空间?

我最近接到个问题,客户打电话来报告卷根的“磁盘大小”与卷属性中报告的“已用空间”数量之间存在显著差异。在考虑这一点时,我注意到我自己的C:驱动器有一个神秘的20GB的差异。

下面是我如何找到答案的故事。

在开始之前,有两种方法用于计算磁盘使用量…
方法1–体积位图分析

下面的饼图显示的%已用%和%空闲指示基于卷位图分析。隐藏的$Bitmap:$Data:“”流是通过FSCTL_GET_volume_Bitmap IO控制代码从卷中读取的,并计算1和0。二进制“1”表示已分配的群集,而“0”表示空闲群集。设置位总数表示卷上已分配的群集总数。这是计算已分配空间和可用空间的最快和最可靠的方法。

方法2-使用FindFirstFileEx/FindNextFile扫描文件

导航到“C:\”文件夹,选择“所有文件/文件夹”,然后右键单击,然后选择“属性”。当shell枚举它可以在根文件夹和子文件夹中找到的所有文件时,将出现一个对话框。“大小”和“磁盘大小”字段最终将显示Explorer找到的所有文件的所有主数据流的总大小。在我的例子中,这个方法只找到102GB中的80.25GB(留下21.75GB的差异)。

 

为什么会有这么大的区别?

简单的回答是-“如果您在Explorer中看不到它,它不会被添加到总大小中。”
如何找到隐藏的磁盘使用…

首先,检查您的文件是否在当前用户帐户和资源管理器设置下都是可见的。取消选中“隐藏受保护的操作系统文件”并选择“显示隐藏的文件和文件夹”。完成后,再次查看磁盘上的大小。

 

它与饼图的匹配度在百分之几以内吗?如果没有,请继续执行下面的操作。

运行CHKDSK并保存输出。最后的总结信息就是我们想要看到的。

 

基于CHKDSK输出,我们可以通过将以下内容相加来计算元数据的总使用量…

KB

GB

Description

57036

.05 GB

Space used by 22677 indexes.

0

0 GB

Space used by $Badclus file.

1352680

1.29 GB

Space used by $MFT.

65536

.06 GB

Space used by $Loffile.

1475252

1.4 GB

 Metadata Total

在本例中,metadata使用量仅占1.4 GB。如果metadata数量占使用率的比例很高,那么我们需要更仔细地了解卷的使用情况,而不是简单地查找隐藏文件。
从CHKDSK输出可以看出,用户文件占用的总空间为106095080kb(101.18gb)。这占总使用量的很大一部分,因此我们应该查看用户文件,以了解为什么在Explorer中看不到这些文件。

你有权限查看卷/文件夹吗?
a、 如果这是系统驱动器,请查看“\Documents and Settings”或“\users”文件夹,看看是否可以浏览所有配置文件文件夹。如果没有,您可能需要与所有者联系以检查他们的文件夹大小,并查看他们在用户文件夹中保存了什么。如果他们像我一样,他们将有5年的内存转储,MP3,VHD,PDF等。
b、 试试看”CACLS.EXE x: \/T”,或浏览驱动器上的文件夹,查找“拒绝访问”错误。一旦发生这种情况,请为自己授予对子树的该部分的权限(如果您的管理权限允许),或者让有权访问该文件夹的人为您枚举内容。检查该文件夹中所有文件的文件数和磁盘大小,并将其添加到总数中。
c、 继续此过程,直到所有文件夹中的所有文件总数为。
d、 总数有意义吗?如果没有,则继续下一步。
在我神秘的20GB差异的情况下,我发现了一个以前安装的旧用户配置文件。果然,我在浏览时收到了一个拒绝访问的错误。我获得了文件夹的所有权。这个用户习惯于在桌面的子文件夹中收集内存转储和虚拟机。我用delete键恢复了不少空闲空间。我重新扫描了这卷书,但令我失望的是,仍然有很大的不同。

 

是否有其他流文件?尝试使用STREAMS.EXE从(http://technet.microsoft.com/en-us/sysinternals/default.aspx). Streams将递归子目录并按备用命名流报告空间使用情况。将其导入文本文件,并使用文本编辑器或电子表格程序对其进行分析。

当通过文件扫描方法计算总使用量时,硬链接可能会有问题。硬链接的使用并不广泛,但这一点值得一提。硬链接是指向现有文件的额外索引项。这些是通过CreateHardLink函数创建的。虽然文件实际上存在于一个位置,但每个硬链接都有自己的大小字段。因此,单个文件可以添加两次到运行总数中。另一件要知道的事情是硬链接是不同步的,因此可能只有一个链接会显示实际的文件大小(请参阅下面的示例)。

 

不幸的是,很少有选项可用于检测硬链接悖论,但当文件扫描显示的使用率超过位图时,需要考虑这一点。既然我们的情况正好相反,硬链接并不是一个重要因素。

卷影复制服务是否为快照维护差异区域文件?使用VSSADMIN LIST SHADOWSTORAGE查找。将卷影存储添加到运行总数中。
VSSVC为制作卷快照预先分配空间。为了支持此功能,diff area文件保存在“\System Volume Information”文件夹中。此预先分配的空间用于维护“早期版本”功能和“系统还原”应用程序的时间点信息。如果您是希望将这些特性的影响降到最低的用户类型,那么可以使用VSSADMIN调整卷影存储的大小,以便它对磁盘使用的影响更小。我更喜欢保留这些特性的默认设置(并记下它使用了多少磁盘空间)。

 

如果你的数字仍然没有意义,那么现在是时候检查活动隐藏的文件/文件夹了。有许多不同的rootkit扫描器可以帮助您识别是否存在活动隐藏的文件和文件夹。尝试使用类似Rootkit Revealer的扫描仪。看到我没有大量的神秘用法,我很满意没有恶意逻辑隐藏我的文件。在考虑了所有因素后,只剩下1.57GB的差异(这是由用户回收站的内容计算的)。
每当你看到“已用空间”和“磁盘大小”之间的差异时,一定要问自己“我没有看到什么?”?”

posted on 2020-10-15 07:59  活着的虫子  阅读(419)  评论(0编辑  收藏  举报

导航