为啥删除大型 NTFS 卷上的文件夹后文件操作会挂起

Posted

技术标签:

【中文标题】为啥删除大型 NTFS 卷上的文件夹后文件操作会挂起【英文标题】:Why does file operations hangs after deleting folder on large NTFS volume为什么删除大型 NTFS 卷上的文件夹后文件操作会挂起 【发布时间】:2017-01-02 19:52:17 【问题描述】:

在 Windows Server 2012R2 下有一台具有 54.5 TB NTFS 卷的计算机。卷几乎已满且高度碎片化(defrag.exe 表示它有 98% 的碎片空间)。它用于存储视频存档,文件夹结构为:d:\Video\。 Video下大约有4K个文件夹,每个文件夹包含100-12K个文件。

当我删除其中任何一个文件夹时,每个 WINAPI 文件函数“挂起”的时间间隔都很长(几分钟或几十分钟)。他们不返回任何他们根本不返回的错误。在那段时间之后,他们终于返回而没有任何错误。

我可以在 Windows 性能分析器中看到,在挂起时间时,系统进程中有一个 CPU 消耗线程。它的堆栈:

2 [Root]
3   |- ntoskrnl.exe!KiStartSystemThread
4   |    ntoskrnl.exe!PspSystemThreadStartup
5   |    |- ntoskrnl.exe!ExpWorkerThread
6   |    |    |- Ntfs.sys!NtfsCheckpointAllVolumes
7   |    |    |    Ntfs.sys!NtfsForEachVcb
8   |    |    |    Ntfs.sys!NtfsCheckpointAllVolumesWorker
9   |    |    |    Ntfs.sys!NtfsCheckpointVolume
10  |    |    |    Ntfs.sys!NtfsFreeRecentlyDeallocated
11  |    |    |    |- Ntfs.sys!NtfsDeviceIoControl
12  |    |    |    |    |- Ntfs.sys!NtfsCallStorageDriver
13  |    |    |    |    |    ntoskrnl.exe!KeExpandKernelStackAndCalloutInternal
14  |    |    |    |    |    ntoskrnl.exe!KiSwitchKernelStackContinue
15  |    |    |    |    |    ntoskrnl.exe!KySwitchKernelStackCallout
16  |    |    |    |    |    Ntfs.sys!NtfsStorageDriverCallout
17  |    |    |    |    |    volsnap.sys!VolSnapDeviceControl
18  |    |    |    |    |    |- volsnap.sys!VspQueryCopyFreeBitmap
19  |    |    |    |    |    |    |- ntoskrnl.exe!RtlFindNextForwardRunClearCapped

谁能帮助我了解发生了什么?我拥有对服务器的完全访问权限,并且可以提供任何其他信息。


NTFSInfo 输出:

NTFS Information Dump V1.01
Copyright (C) 1997 Mark Russinovich
http://www.sysinternals.com

Volume Size
-----------
Volume size            : 57223549 MB
Total sectors          : 117193830399
Total clusters         : 3662307199
Free clusters          : 7644452
Free space             : 119444 MB (0% of drive)

Allocation Size
----------------
Bytes per sector       : 512
Bytes per cluster      : 16384
Bytes per MFT record   : 1024
Clusters per MFT record: 0

MFT Information
---------------
MFT size               : 14959 MB (0% of drive)
MFT start cluster      : 196608
MFT zone clusters      : 3653996704 - 3654008160
MFT zone size          : 179 MB (0% of drive)
MFT mirror start       : 1

【问题讨论】:

您从 MS 支持那里得到答复了吗? 【参考方案1】:

很遗憾,我无法在我的支持对话中联系到开发人员。在我们进行卷备份后,问题停止在这台特定机器上重现。并且支持事件已关闭。

我们重新设计存档写入机制以减少文件碎片和可用空间碎片,并在新发现的低碎片卷上出现问题。

我猜是与可用空间碎片有关的问题。但我没有证据。

【讨论】:

以上是关于为啥删除大型 NTFS 卷上的文件夹后文件操作会挂起的主要内容,如果未能解决你的问题,请参考以下文章

File.Move() 操作无法从原始文件夹中删除文件而没有错误

无法删除 NTFS 盘上的文件或文件夹(对Windows文件的各种情况有比较详细的描述)

立即查询HFS或APFS卷上的文件和文件夹总数

电脑文件夹加密后无法解密

NTFS Change Journal - 文件更改跟踪

获取符号链接目标的卷名的最佳方法 [NTFS]