有什么可以 批量,全自动,同时 扫描所有磁盘错误的工具?

一个个的扫描真的是太麻烦了
想主要用于定期自动chkdsk扫描防止因为磁盘错误丢东西,其次是在偶然意外死机后方便的扫一下

你扫描的目的是啥呢?

看占用?wiztree
杀毒?这个快不了
找文件?everything

你不说目的我咋知道……

批量 chkdsk /f,自动卸载能卸载的磁盘,不能卸载的自动安排重启动扫描

扫描的目的一是定期自动扫描防止因为磁盘错误丢东西,二是偶然意外死机后扫一下。

管理员执行以下命令

chkntfs /t:0 /c a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:

在计算机启动时扫描所有卷
扫描完成后,启动到桌面执行
chkntfs /d
来取消之后的扫描

1 Like

谢谢,这个可以
不过启动时扫描应该比windows内慢吧?而且启动时不能同时扫描许多盘

两者都不会,理由:
1)启动时扫描单个盘的速度与Windows内一致。因为扫描启动时,Windows已经完成初始化,扫描所需的驱动都已就绪。由于扫描操作实际上只是简单的读取和对比,所以系统完全启动与否对此没有影响。此外,chkdsk与chkntfs内部实现应该是一致的
2)“盘”其实是一个硬盘中的多个分区。扫描一个“盘”时,chkntfs/chkdsk能吃满磁盘性能(注意扫描对磁盘是进行分散的读取,所以磁盘上下行带宽可能不满,但寻址性能实际上已达峰)读取多个“盘”时,磁盘也只能将有限的性能分给多个分区
例如,假设磁盘性能为1GB/s
顺次扫描该磁盘的10个10GB的“盘”时,每个“盘”使用全部性能性能进行扫描,扫描时间为
10×10GB/(1GB/s)=100s
并行扫描时,每个“盘”分配到0.1GB/s的性能,时间
1×10/(0.1GB/s)=100s
所以时间上理论上相同
注意,上面的结论是基于理想状态的
注意,机械硬盘由于其工作原理,在多分区并行扫描时反而会严重降低速度
注意,如果您的计算机有n块物理硬盘(n>1),不考虑其他因素,则性能确实有损失,速度下降到原先的1/n

1 Like

其实是有几个机械盘
不过我猜测对于机械盘扫描来讲读取等待时间应该是瓶颈,单盘应该远达不到CPU/PCIe/磁盘控制器工作能力的上限,回头测一下

1 Like

分散读取主要的性能瓶颈是在磁头寻道上,控制器肯定都很聪明的
不知道现在的硬盘优化没有,之前我有俩IDE接口的硬盘,百八十年前的老家伙了,分散读取比起连续读取来得慢的多
期待您的测试结果

1 Like

刚测了下,pcie3主板,3个sata3的4T机械盘,chkdsk扫描结束自带时间统计

3个盘单独扫描用时分别是14s/18s/29s,3个盘同时扫描也接近这个数值,差距不到1秒。所以并行扫描应该还是有很大优势的,至少3个机械盘没问题。

猜测IDE硬盘可能跟PCI的带宽上限更可比一点所以会受一些影响
而且pcie是有lane的设计的,猜测多个设备可以同时使用总线在一定程度上互不干扰,对单个设备来讲进一步减少了总线延迟,PCI大概是每个单位传输周期只能1个设备单独占用总线吧?

值得注意的是如果开启primocache这个第三方磁盘缓存,则第二次扫描相同硬盘的时间会大大被缩短,差距可以显著到14s->2s

1 Like

很感谢您与我分享了新数据!
另外我有一个疑问:在打开这种缓存软件的情况下,结果是否可信?

猜测chkdsk会读取几个重要的表和一些文件头尾标记之类的信息,这些如果都被cache了就会比较快,

试过关闭primocache,在第一次扫描之后使用sysinternal的sync命令清空磁盘缓冲,扫描时间并没有区别,猜测chkdsk是会跳过windows disk cache的。

而且对于chkdsk /f,缓冲出错的概率可以忽略,所以即使有缓冲应该也是可信的

如果做磁盘表面扫描那我不太确定cache是否会造成结果不准确

1 Like

在AI的辅助下我找到了一些关于这个问题的官方回复。其中官网提到这个软件是“原样”读取数据的,即

PrimoCache采用基于逻辑块的缓存机制

故如果有逻辑错误且此软件保证缓存数据与源数据一致(注意,强制关机可能导致缓存与源数据不一致),则逻辑错误检查结果可信

物理错误检查结果可信度就取决于扫描操作是否被驱动拦截。如果拦截则结果定不可信,之前我有扫过带傲腾缓存技术的硬盘,确实出现了坏道和慢道无法检出的情况。

1 Like

还有个问题就是chkntfs 似乎只能扫有dirty bit set的盘,感觉磁盘dirty bit没set的时候不一定等于磁盘没有错误。。。

1 Like

是的,dirty bit(下称脏位)类似于写入锁
脏位只能指示驱动器是否在被写入时强行终止过。其他错误不是脏位的职能范围,包括机械硬盘震动产生的坏道。故脏位被清除,驱动器不一定无误
由于文件系统或者硬件系统的自修复功能,数据即使被截断也有可能被无损地恢复。例如在写入索引而未写入数据体前拔出U盘,文件系统可能可以根据数据体恢复索引。被恢复后脏位不会清除。故脏位被设置,驱动器不一定有误
综上所述,脏位只能指示是否有强制的写入中断而无法完全体现驱动器是否有误

1 Like

原来如此,谢谢解释~

诶?chkNTFS应该能检查所有被指定了的驱动器的
如果需要设置脏位,可以用以下命令
fsutil dirty set C:
从a到z盘符的命令

for %i in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do fsutil dirty set %i:
2 Likes