Spa*_*awk 18 dd verification integrity
我正在使用dd
将数据从旧硬盘驱动器复制到新硬盘驱动器。我想确保数据的完整性是安全的。
关于这个答案,吉尔斯说
如果 [dd] 成功终止,则备份正确,除非出现硬件故障……
这究竟是什么意思?是否dd
有某种内置验证?
如果我改用 rsync,我--checksum
也会运行第二遍,以进行验证。这种偏执有道理吗?
Gil*_*il' 20
dd
或者任何其他应用程序都没有您可能想到的“某种内置验证”:它不会从存储介质中读回数据以与写入的数据进行比较。这就是操作系统的工作。
从应用程序对硬件进行读取验证实际上是不可能的。在某些情况下它会起作用,但在大多数情况下它什么也做不了。如果应用程序直接写入存储介质,则它可以回读它刚刚写入的内容,但这通常会从内存缓存中回读,这不会提供任何有用的保证。在您引用的示例中,dd
正在写入管道,在这种情况下,它无法控制线下数据会发生什么。在您的 rsync 示例中,第二遍rsync --checksum
毫无意义:理论上它可以捕获错误,但在实践中,如果确实发生了错误,那么第二遍可能不会报告任何错误,因此您将精力浪费在实际上并没有提供有用保证的事情上。
但是,应用程序确实会验证数据发生了什么,从某种意义上说,它们会验证操作系统是否已接受对数据的责任。所有系统调用都返回错误状态。如果系统调用返回错误状态,应用程序应该将该错误传播给用户,通常是通过显示错误消息并返回非零退出状态。
请注意,这dd
是一个例外:根据命令行参数,dd
可能会忽略某些错误。这是非常不寻常的:dd
是具有此属性的唯一常用命令。使用cat
代替dd
,这样您就不会冒腐败风险,而且速度可能会更快。
在数据复制链中,可能会出现两种错误。
“确定”的唯一方法是执行额外的读取和比较过程(在删除缓存之后)。
除此之外,以dd
与所有其他程序相同的方式检测读取和写入错误......如果驱动器(和其他涉及的组件)报告错误,它就会起作用;对于以静默方式接受数据而不实际写入数据的驱动器,您就不走运了。
这种偏执有道理吗?
如果你不能相信你的硬件是可靠的,事情就会变得复杂......
归档时间: |
|
查看次数: |
10035 次 |
最近记录: |