问题是对目录的任何修改都会无限期地锁定 Explorer,尽管 Samba 对其他目录的访问仍然有效。我试过在本地和 Samba 上移动文件。
即使枚举目录以获取文件列表也会无限期地锁定计算机。
我尝试使用 Pythonwin32file.FindFilesIterator
来迭代文件,但这也挂起。
我的想法是根据时间戳将每个文件移动到不同的目录(在我们正在处理的目录之上的目录中),这样我们在每个目录中最多会有一千个左右的文件......但是因为我什至无法枚举文件,这是一个非首发。
如果我不得不放弃并只删除目录,我愿意这样做,但标准删除也会无限期挂起。
我已经设置了这两个参数来提高速度,但它们也没有解决这个问题:
R:\>fsutil behavior query disablelastaccess
disablelastaccess = 1
R:\>fsutil behavior query disable8dot3
disable8dot3 = 1
这些都是连续图像,会遇到 8.3 文件名的“错误”,因此一个目录中的许多类似名称的文件可能需要很长时间来计算 8.3 文件名。据我了解,即使在启用 disable8dot3 之后,这些数据也会存储在文件系统中,因此它可能仍然会导致问题。
有任何想法吗?
我不知道它是否会起作用,也不知道这对您来说是否实用,但是将硬盘放入 Linux 计算机并在 Linux 上尝试呢?
(有可引导的 Live CD 可供下载 - 您甚至不必物理移动硬盘)。
你不应该做的两件事:
正在发生的事情是,资源管理器正在访问这些文件中的每一个,以获取将或可能显示在资源管理器界面中的信息。此外,如果您正在进行访问防病毒扫描(如果没有,为什么不进行),每个文件都会被扫描,即使它只是为了确定它是否是应该扫描的类型之一。在处理这么多文件时,所有这些都需要很长时间。
短期解决方案 - 改用命令行或某种形式的脚本。
长期解决方案 - 制定一个明智的方案,确保您在任何一个文件夹中的文件都不会超过几千个。
根据添加文件的方式以及文件夹碎片的严重程度,最快的方法甚至可能是移出您要保留的文件并核对分区!
尝试使用 PowerShell。使用移动项 Cmdlet
高温高压
总有
cmd.exe
它的del
命令。您需要重新启动以使 FSUTIL 更改生效,以防万一。
禁用 8.3 名称的 NTFS 功能(添加、删除、搜索)的一般复杂性顺序是 O(Log N),所以一旦事情达到这种状态,几乎你所做的任何事情都会花费相同的时间。
如果系统上有任何 AV 处于活动状态,请在修复此问题时将其关闭。
出于好奇,如果您使用 Robocopy 之类的工具将文件分块复制出来,您会获得更好的性能吗?我怀疑它不会有太大的不同,但它应该花费一半的时间删除(只有搜索涉及的目录而不是搜索然后删除条目)。不过,您最终仍然会遇到删除原件的问题。
使用带有 /mov 选项的 robocopy
http://technet.microsoft.com/en-us/library/cc733145.aspx
例如,我有一个包含 1.2 m 电子邮件文件的文件夹,它会挂起资源管理器。这些文件从日期开始命名,因此我为一年中的每个月创建了文件夹,然后对文件名中的日期使用 robocopy 过滤。
robocopy e:\sent-old\ e:\sentmail\2013-4 201304*.* /mov