为什么文件操作在删除大型 NTFS 卷上的文件夹后挂起
Why does file operations hangs after deleting folder on large NTFS volume
Windows Server 2012R2 下有一台计算机,具有 54.5 TB NTFS 卷。卷几乎已满且高度碎片化(defrag.exe 表示它有 98% 的碎片 space)。用于存放视频档案,文件夹结构为:d:\Video\。 Video下大约有4K个文件夹,每个文件夹包含100-12K个文件。
当我删除任何一个文件夹时,每个 WINAPI 文件都会运行 "hangs",间隔很长(几分钟或几十分钟)。他们不会 return 犯任何错误,他们根本不会 return。在那段时间之后,他们终于 return 没有任何错误。
我可以在 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
不幸的是,我无法在支持对话中联系到开发人员。在我们进行卷备份后,问题将停止在此特定机器上重现。支持事件已关闭。
我们重新设计了存档写入机制以减少文件碎片和释放 space 碎片,并且最近发现了低碎片卷上的问题。
我猜这个问题与免费 space 碎片有关。但是我没有证据。
Windows Server 2012R2 下有一台计算机,具有 54.5 TB NTFS 卷。卷几乎已满且高度碎片化(defrag.exe 表示它有 98% 的碎片 space)。用于存放视频档案,文件夹结构为:d:\Video\。 Video下大约有4K个文件夹,每个文件夹包含100-12K个文件。
当我删除任何一个文件夹时,每个 WINAPI 文件都会运行 "hangs",间隔很长(几分钟或几十分钟)。他们不会 return 犯任何错误,他们根本不会 return。在那段时间之后,他们终于 return 没有任何错误。
我可以在 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
不幸的是,我无法在支持对话中联系到开发人员。在我们进行卷备份后,问题将停止在此特定机器上重现。支持事件已关闭。
我们重新设计了存档写入机制以减少文件碎片和释放 space 碎片,并且最近发现了低碎片卷上的问题。
我猜这个问题与免费 space 碎片有关。但是我没有证据。