在 Win7 NTFS 卷上,我使用正确支持 --link-dest 的 cwrsync 来创建“快照”类型的备份。所以我有:
z:\backups\2010-11-28\cygdrive\c\Users\...
z:\backups\2010-12-02\cygdrive\c\Users\...
2010-12-02 的内容主要是指向 2010-11-28 目录中文件的硬链接,但只有 2010-12-02 中有一些新文件或更改的文件。在 Linux 上,“du”实用程序将告诉我每个增量快照的实际大小。在 Windows 上,cygwin 下的 explorer 和 du 都被硬链接欺骗,显示 2010-12-02 占用的空间比 2010-11-28 多一点。
是否有一个 Windows 实用程序可以显示实际使用的正确空间?
答案1
尝试使用Sysinternals 磁盘使用情况(也称为du
),具体使用-u
和-v
标志将只计算唯一的出现次数,并将显示每个文件夹的使用情况。
据我所知,文件系统不会显示原始文件和硬链接之间的差异(这实际上是硬链接的要点),因此您不能逐个文件夹地忽略它们,而需要进行比较。
为了测试,我创建了一个包含 6 个文件的随机文件夹。克隆了所有内容。然后在第一个文件夹中创建了几个硬链接和软链接,以引用第一个文件夹中的其他文件以及第二个文件夹中的一些文件。
运行du -u -v testFld
结果(注意文件夹旁边的值以 KiB 为单位):
104 <path>\testFld\A
54 <path>\testFld\B
149 <path>\testFld
Totals:
Files: 12
Directories: 2
Size: 162,794 bytes
Size on disk: 162,794 bytes
运行du -u -v testFld\a
结果:
104 <path>\testFld\a
...
运行du -u -v testFld\b
结果:
74 <path>\testFld\b
...
注意到不匹配了吗?
A 中引用 B 中文件的符号链接仅在“完整”运行期间计入 A,而 B 仅返回 54(即使这些文件最初位于 B 中并且从 A 硬链接)。当您单独测量 B 时(或者,如果您不使用唯一标志-u
),它将计入其“完整”测量值 74。
答案2
PowerShell 5 可能是一个选项。它适用于 Windows 7,但我只在 Server 2012 R2 上测试过,2015 年 4 月预览
PowerShell 5 中的文件系统提供程序具有两个新属性LinkType
和Target
:
ls taskmgr.exe | fl LinkType,Target
返回:
LinkType : HardLink
Target : C:\Windows\WinSxS\amd64_microsoft-windows-advancedtaskmanager_..._6.3.9600.17..2\Taskmgr.exe
所以现在我只能显示 system32 中所有不是硬链接的文件:
cd $env:SystemRoot\System32
ls -Recurse -File -force -ErrorAction SilentlyContinue | ? LinkType -ne HardLink | Measure-Object -Property Length -Sum
返回:
Count : 844
Sum : 502,486,831
您可以将其与所有文件进行比较:
ls -Recurse -File -force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
Count : 14092
Sum : 2,538,256,262
因此,超过 13,000 个大小超过 2GB 的文件是硬链接
答案3
答案4
我也对这个问题做了一些研究。以下是我发现的结果。
NTFS 中包含硬链接文件的文件夹大小可以从三种不同的含义来考虑:
- 大小包括所有硬链接文件的大小(由 WE 显示)。
- 仅就当前文件夹而言的唯一文件的大小。
- 仅就整个磁盘而言唯一文件的大小。
如果启用了“跟踪 NTFS 硬链接”选项,则 TreeSize Professional 在“详细信息”选项卡的“已分配”列中显示数字 2。
下面是 winsxs 文件夹的示例 (10 对应 7.5Gb):
获得 3 号值对我来说仍然是个问题。尽管我能够通过使用带有 NL_Info 插件的 Total Commander 获得下限。我得到的是只有一个硬链接(唯一文件)的文件占用的大小。对于给定的示例,它大约为 5Gb。
因此尝试扩展 harrymc 的回答或换句话说。