删除和重新创建 NTFS 日志(或如何正确地 运行 'fsutil usn' 命令)

Deleting & Recreating NTFS Journals (Or How to Properly run the 'fsutil usn' Command)

我有一个 chkdsk 阶段 3 错误(与 NTFS usn 日志和安全描述符有关)。

损坏的 NTFS 日志阻止 chkdsk /f 运行 修复卷。所以 chkdsk 维修不会 运行 这不是解决方案。

但是,我听说可以通过删除并重新创建 NTFS 日志来修复损坏。这可以通过在命令提示符下或具有管理员权限的 PowerShell 中执行以下命令来完成:

fsutil usn deletejournal /d /n

其次是

fsutil usn createjournal m=<maxsize> a=<allocationdelta> <volumepath>

但是,有关这些命令的开关和参数的 Microsoft 文档非常少。任何人都可以请建议:

  1. /d 和 /n 开关的实际作用。它们是永久的吗?如果我正在创建新日志,是否需要重新启用它们?如果必须,我将如何重新启用?
  2. <maxsize><allocationdelta> 参数是什么?
  3. 如何确定要设置 <maxsize><allocationdelta> 的值?默认值是多少?

最后,以这种方式删除 NTFS 日志是否安全?

谢谢。

好的,为了其他人的利益,我将向您提供我获得的所有帮助我解决此问题的知识。

要重新创建 NTFS USN 日志,请先删除,然后重新创建日志。

正在删除日志
您可以使用删除 NTFS USN 日志...

fsutil usn deletejournal /d /n c:

/d 和 /n 开关的文档很少。微软文档 here 与在命令提示符下查询命令的使用时显示的信息冲突:

两者都不准确!命令提示符文档是错误的,因为两个开关都删除了日志,而不仅仅是 /d。 Microsoft 网页文档具有误导性,因为该日志实际上是被删除而不是被禁用。这些开关决定了如何它被删除。

因为删除日志可能需要很长时间,所以您可以通过开关控制它 运行 是进程内还是进程外。 /n 开关在锁定句柄的过程中执行 deletejournal(将其视为“锁定计算机”)。这会迫使您等到它完成。 /d 开关在进程外执行并允许您继续工作。删除日志可能需要数小时 运行,并且会在连续重新启动后继续,直到完成。我看到人们在两个开关互斥时将它们一起应用。

删除日志几乎总是安全的,但有时会对备份过程产生影响。使用日志的应用程序将看不到上次应用程序 运行 和日志被删除之间的文件更改。编程良好的应用程序将检测到日志已被删除,并将恢复为查找更改文件或重新创建文件的替代方法。我建议不管后果如何,删除是安全的,因为在最坏的情况下,您只会损害备份的增量能力。您仍然可以进行完整备份并重新开始;至少你的数据没有丢失!

重新创建日志
我被告知没有必要手动重新创建日志,因为 运行 备份(例如通过控制面板的 Windows-7 备份选项)将自动重新创建 NTFS 日志。

但是,如果您确实想手动重新创建日志,那么在命令提示符下,您可以通过运行以提升的权限执行以下命令

来执行 createjournal 命令
fsutil usn [createjournal] m=<maxsize> a=<allocationdelta> <volumepath>

什么是<maxsize>?什么是 <allocationdelta>

<maxsize> 确定日志的文件大小。通常它在 30Mb 到 40Mb 之间。在我的 Windows 带有 2TB 驱动器的 8.1 PC 上:

<maxsize> = 0x2000000 字节(十六进制)= 33,554,432 字节 = 33Mb

<allocationdelta> = <maxsize> 的 1/4 = 十六进制的 0x800000 字节 = 8,388,608 字节 = 8Mb

但是,我可能建议将 <allocationdelta> 设置为 <maxsize> 的 1/8,以获得更大的 <maxsize> 值。

仅供参考:您可以通过在具有提升权限的命令提示符下键入以下命令来查询日记的当前大小:

C:\Windows\system32> fsutil usn queryjournal C:

您将得到类似这样的输出:

am参数以BYTES的形式提供,以十六进制表示。

因此,我建议 <maxsize><allocationdelta> 使用以下值:

如果您有一个非常大的驱动器(4TB+,包含 400,000 多个文件),请使用:

fsutil usn createjournal m=536870912 a=67108864 C:

对于较小的驱动器 (<=2TB),文件较少(<=400,000 个文件),运行:

fsutil usn createjournal m=67108864 a=8388608 C:

如果您对这些数字的来源感到好奇,它们是位状态的数量提升到足以提供日志大小(以字节为单位)的幂。 IE:这些数字是 2^x,它给出了你想要的大小的精确大小 bytes。期刊的大小通常保持在 30Mb 到 40MB 之间。因此,我已经为 <maxSize> (m) 参数增加了下一个最高可用大小 (67Mb):

2^25 字节 x 2 = 33Mb x 2 = 67Mb

<allocationDelta>(a)参数需要在m的1/8左右,也就是8Mb左右。

您不会在 Internet 上的其他任何地方找到此解释!!!尤其是 Microsoft,可耻地未能充分记录这两个日志命令的使用。

您可以通过在提升权限的命令提示符处执行以下命令来查询系统上的文件数:

C:\Windows\system32> dir C:\ /s /a /w

您将看到这样的输出...

将文件和目录的数量相加为总数量;本例中为 1,616,718。

然后您可以使用以下 table(从 this page 转载)作为替代指南来找到最大大小和分配增量的适当值。

查看创建日志指南here: 另请参阅一些好的建议 here: