我的 AWS EC2 Windows 主机处于非常奇怪的情况,我无法真正确定这是如何可能的。
不幸的是,当我尝试用谷歌搜索该主题时,我得到的只是有关调整/正确调整交换文件大小的结果,但没有关于在完整磁盘上交换文件过度分配的结果。
AWS 中的根设备:30GiB(Windows 中为 29.6GB)使用的驱动器空间(磁盘大小):
- Windows 文件夹:21.7GB (23,349,198,848 字节)
- Program Files(x86)文件夹:4.00GB(4,298,366,976 字节)
- pagefile.sys:8.00GB (8,589,934,592 字节)
- 以及其他较小的目录(用户、inetpub、python27 等)
用不了多久我们就会发现 22 + 4 + 8 > 30GB。
这怎么可能? 我有猜测(交换空间实际上直到使用时才分配?),但我实际上无法找到任何文档来解释这种情况是如何发生的?如果我在这台机器上使用更多的 RAM 以至于需要交换空间,这台机器会因为技术上没有可用的交换而突然崩溃吗?
附加信息: - 交换配置为“自定义大小”,“初始大小(MB)”和“最大大小(MB)”均设置为 8192。这不是系统管理的大小。
答案1
此异常与页面文件无关。Windows 文件夹实际上并非 21.7GB。C:\Windows 各个子目录中的许多项目都是指向 C:\Windows\WinSXS 的硬链接。System32 中的硬链接副本仅包含 MFT 中的条目,它不会像 WinSXS 中的副本那样占用磁盘空间。每个用户配置文件也有连接点(一个例子:应用程序数据 -> AppData)。除非大小调整工具考虑到这一点,否则这些文件的总大小将被计算两次(或更多),因为文件内容只存在于一个地方。不幸的是,大多数工具仍然无法正确执行此操作,即使是在资源管理器中,当您右键单击文件夹、选择属性并等待它计算大小时也是如此。
此处的链接描述了其他更精确的尺寸确定方法,例如 Sysinternals DU 和 Powershell,您可以在其中查找attributes -match "reparsePoint"
或linkType
属性(linkType 至少需要 PS V5)。
https://superuser.com/questions/217773/how-can-i-check-the-actual-size-used-in-an-ntfs-directory-with-many-hardlinks
什么是温斯克斯你问?
WinSxS 文件夹是系统中可以找到该组件的唯一位置,您在系统上看到的文件的所有其他实例都是通过从组件存储区硬链接“投影”的。
.\du.exe -u "C:\Windows"
DU v1.6 - Directory disk usage reporter
Copyright (C) 2005-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
Files: 161104
Directories: 35647
Size: 25,850,665,571 bytes
Size on disk: 26,113,503,232 bytes
.\du.exe "C:\Windows"
DU v1.6 - Directory disk usage reporter
Copyright (C) 2005-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
Files: 120914
Directories: 35647
Size: 20,464,951,291 bytes
Size on disk: 20,759,183,360 bytes