它并不像其属性所显示的那样占用那么多空间。

它并不像其属性所显示的那样占用那么多空间。

我正在寻找具体步骤在 Windows 7 中将文件夹移动winsxs到我的数据硬盘驱动器并在 SSD 中创建连接

mklink /J oldpath newpath

我只能找到这个,它链接自超级用户问题(winsxs 可以移动吗?如果可以,怎样移动?),但它适用于 Vista 并于 2007 年发布:

如何在 Vista 中移动 WinSxS 目录

我还在超级用户上找到了以下答案:

  1. 在 Windows 7 中,我可以为 winsxs 或安装程序文件夹创建符号链接或连接吗在这个超级用户问题中,用户询问是否可以在将文件夹移动到另一个驱动器后mlink对其进行操作,winsxs答案是“您可以为安装程序执行此操作。但问题是,你能做到吗温斯克斯?特别是在这个问题下的第一条评论说“这无法完成,因为这些已经是符号链接了”

  2. 如何在不关闭 Windows 的情况下释放 Windows 安装程序文件夹中的驱动器空间? 这是用于Windows/Installer文件夹,不是温斯克斯,并使用/D选项而不是/J中的选项mlink。但它们正在执行我想用 winsxs 执行的操作:将文件夹的内容复制到另一个驱动器,然后执行mklink /D oldpath newpath。但我可以用 来执行此操作吗?温斯克斯?(链接的博客文章也没有移动 winsxs 文件夹,他们只移动了其他文件夹)。此外,链接的博客文章的评论者报告说,他们无法从管理员权限更改为系统权限,这是运行命令或移动文件夹之前的第一步。

  3. 如何在不关闭 Windows 的情况下释放 Windows 安装程序文件夹中的驱动器空间?之前超级用户链接中的另一位评论者说,如果你建立一个连接,

“msiexec(显然)忽略了连接,并手动创建了 C:\Windows\Installer。这 1) 删除了连接,并且 2) 完全删除了目标目录的内容。”

这会发生在温斯克斯文件夹呢?

总结一下:

我想移动 winsxs 文件夹然后创建到它的连接,但我不确定我是否可以这样做或会产生什么后果。

  • 我一开始链接的针对 2007 年 Vista 编写的那些步骤是否适用于 Win 7?
  • 说这句话的用户“这无法完成,因为这些已经是符号链接了”正确的?
  • 如果 Vista 移动文件夹和创建连接的步骤在 Win 7 中不起作用,那么第 2 点链接博客文章中描述的步骤是否有效?如何正确地将权限从管理员更改为系统而不出现报告的错误?
  • 如果我设法创建连接点,msiexec 是否会忽略连接点,并手动创建 C:\Windows\winsxs,删除连接点并完全删除目标目录的内容?
  • 我会使用哪个选项,/J(连接)还是/D(符号链接)?我猜是的/J,我知道两者之间的区别,但由于另一个选项也出现在答案中,所以我什么都不知道了。不同的来源出现了不同的选项。谁是对的?

答案1

您应该了解的最重要的事情是WinSxS

它并不像其属性所显示的那样占用那么多空间。

WinSxS 属性屏幕截图

WinSxS 主要包含硬链接。硬链接与符号链接类似,但透明性更强。

文件不是以树的形式存储在硬盘上,而是以平面结构存储。然后,此结构中的项目被映射到文件夹树中并被命名。每个这样的映射都是一个硬链接。因此,硬链接将文件名和路径连接到文件的内容。

大多数文件只有一个硬链接。例如,当您下载文件时,其内容存储在硬盘上的某个位置,并在中创建一个名为的硬链接C:\Users\<yourUsername>\Downloads

如果需要,您可以创建额外的硬链接,可以在同一个目录中(使用不同的文件名)或同一驱动器上的其他位置。文件内容将只存储在驱动器上一次,因此创建第二个硬链接不会增加磁盘使用量。该文件可以从两个路径访问。这两个硬链接将共享属性、修改日期和文件内容。对一个文件的任何修改都会立即对第二个文件生效。文件不会从平面结构中删除,直到其所有硬链接都被删除,因此删除硬链接将使文件保持不变,除非它是最后一个硬链接。硬链接彼此无法区分,您无法分辨哪个是先创建的。它们都是完全等效的。(与符号链接相反,符号链接只有一个“主”文件。)

其他驱动器中的文件可以符号链接到任何驱动器,并且可以跨驱动器创建目录连接。但是,您无法创建指向其他驱动器上文件的硬链接。所有硬链接都必须指向同一卷上的文件。

现在让我们做一个实验。我将创建两个文件夹,然后在其中一个文件夹中放入一个 64 KB 的文件,在第二个文件夹中放入指向该文件的硬链接。

C:\Users\gronostaj\Desktop\experiment>mkdir A B

C:\Users\gronostaj\Desktop\experiment>fsutil file createnew A\hardlink1 65536
File C:\Users\gronostaj\Desktop\experiment\A\hardlink1 is created

C:\Users\gronostaj\Desktop\experiment>mklink /h B\hardlink2 A\hardlink1
Hardlink created for B\hardlink2 <<===>> A\hardlink1

我们有一个这样的文件夹树:

+ experiment
|-+ A
| `-- hardlink1
`-+ B
  `-- hardlink2

以下是 A 的属性,它包含一个指向 64 KB 文件的硬链接:

A 的属性,显示总大小为 64 KB

看起来合法。B 的属性也包含一个指向同一 64 KB 文件的硬链接:

B 的属性,显示总大小为 64 KB

这也行。现在我选择 A 和 B,然后根据属性看看它们占用了多少空间:

A 和 B 的属性,总大小为 128 KB

... 这个窗口在欺骗我们。只有一个物理文件占用 64 KB。但是 Windows 资源管理器不知道这一点 - 它计算硬链接指向的文件的总大小,并且有两个指向 64 KB 文件的硬链接。这就是为什么它认为这些文件夹占用的空间是实际的两倍。 不要相信属性中的文件夹大小。

WinSxS 包含 Windows 在某些时候使用的系统文件的硬链接。安装系统文件时,它会在其主位置和 WinSxS 中被硬链接。在新安装的 Windows 系统上,WinSxS 看起来有几 GB 大,但其实际大小为零,因为它只包含其他地方被硬链接的文件。

当系统文件被替换(例如通过 Windows 更新)时,它会从主位置移除,并在其位置安装一个新文件。此新文件也在 WinSxS 中硬链接。此时 Windows 仅使用该文件的较新版本,但您的硬盘包含两个版本,其中一个不再使用。这实际上会导致 WinSxS 增长。

Windows 为什么会这样做?

  1. 更新可以轻松卸载 - 旧文件仍然存在,在 WinSxS 中等着您。
  2. Windows 能够自动修复一些损坏文件的问题,因为 WinSxS 中保存了良好的副本。这就是它的sfc /scannow作用。

此时,我们可以得出结论,我们无法将 WinSxS 移动到其他驱动器,因为里面的一些文件在 中的其他位置被硬链接C:\Windows。您可以将它们复制到其他驱动器并创建连接,但这会增加总磁盘使用量(额外的硬链接不占用空间,额外的副本会占用空间),并且可能会破坏 WinSxS。

减少 WinSxS 大小的唯一合理方法是删除未使用的旧版本文件。这可以使用磁盘清理工具(适用于 Windows)通过检查Windows 更新清理复选框。如果它没有出现在磁盘清理中,则说明您的 WinSxS 已被压缩。

相关内容