为什么有些文件不能在 Windows 10 上移动?

kel*_*aka 23 windows windows-10

我正在尝试缩小我的分区。为了达到我需要的数量,我正在使用 JKdefrag。我已经看到一些文件被标记为红色 - 不可移动,例如hibernation.syspagefile.sys

最后,它们只是文件,而我是管理员。我唯一能做的就是通过禁用.

为什么它们不能移动?

注意:我不是在问如何禁用hibernation.syspagefile.sys等文件。我正在寻找它们不可移动的原因。可能被欺骗的问题的答案不包含原因。

har*_*ymc 40

某些系统文件在系统启动后无法移动,例如页面文件和注册表数据库文件。它们由 Windows 本身独占锁定,因此无法在 Windows 运行时移动或直接更新。

例如,当 Windows 正在运行时,页面文件是由它在磁盘上的直接簇号引用的。由于交换是影响系统性能的关键操作,因此 Windows 在想要执行或撤消交换时没有时间搜索磁盘和文件夹元数据。

使这些文件不可移动的另一个原因是它们对 Windows 的运行至关重要,因此 Windows 将它们保护到极限,并且不允许任何不通过其专用实用程序或 API 的访问。

任何能够移动这些文件的产品都需要重新启动才能在 Windows 启动之前访问磁盘。

  • @Džuris,在这种情况下,移动文件是指将其内容移动到磁盘的另一个区域。目标是在分区末尾获得所有可用空间,以便可以对其进行修剪。重命名无关紧要。 (10认同)
  • @Džuris 将文件 * 移动到另一个目录 * 只是一个重命名操作,因为文件名只是指向保存实际数据的物理扇区的指针。但是 kelalaka 询问在缩小分区的上下文中移动实际数据。所以,不,这不是简单的重命名。 (9认同)
  • @Džuris 我不认为他会这样做;他是对的,在文件系统中移动 `pagefile.sys` 不会改变其内容的物理位置。当然,我可以理解为什么 Windows 只会锁定文件并禁止任何操作,但是您暗示直接访问需要拒绝重命名,我不明白这是怎么回事。有趣的是,Linux(通常对锁定有一种自愿的态度)的行为是一样的。 (3认同)
  • 如果 Windows 通过簇号引用它,移动有什么问题?在同一个磁盘内移动只是重命名。如果他不使用这个名字,为什么 Windows 会在意? (2认同)
  • 直截了当地说:没有操作系统可以允许交换文件在复制时不可用。在交换瘫痪的情况下,操作系统是否甚至可以进行复制是一个大问题。没有交换空间分配,新进程不能启动,如果不能换出内存,内核可能会停止,不能换出缓存数据为要复制的数据腾出空间等。简而言之,移动的文件是不可用的,这就是关键系统文件不可移动的原因。移动当然不是重命名。 (2认同)

HoD*_*HoD 5

Raymond Chen 的一个很酷的故事:

Windows 机密 - 文件系统悖论

简而言之:

同样,这是另一个鸡与蛋的问题:要加载休眠文件,您需要文件系统驱动程序,但文件系统驱动程序在休眠文件中。如果将休眠文件保存在引导驱动器的根目录中,则可以使用微型文件系统驱动程序。

  • 这个很酷的故事与这个问题无关:OP 并没有试图将这些文件移出根目录,而是试图将它们 ** 移动到磁盘上的另一个物理位置**。 (11认同)
  • 他的最后一句话是,_“有人要求将休眠文件放在 [网络驱动器] 上只是时间问题。”_ (7认同)
  • 这是一个有趣的阅读,但它是关于将休眠文件移动到不同的目录。OP 的问题是关于在 HDD 上移动文件的物理位置,但不更改其在目录树中的位置。这就是碎片整理的作用。 (7认同)
  • @HoD 是的,但这并不是因为 JKdefrag 试图将 hiberfil 移出根目录。 (4认同)