如果文件或目录被损坏,则系统可能仍然正常工作,具体取决于损坏的类型。如果系统中存在完好的数据副本,则任何损坏实际上都是不可恢复的。如果数据具有价值,必须从备份中恢复受影响的数据。即便如此,您也许能够从此损坏中恢复,而不必恢复整个池。
如果损坏出现在文件数据块中,则可以安全地删除该文件,从而清除系统中的错误。使用 zpool status -v 命令可以显示包含持久性错误的文件名列表。例如:
# zpool status -v pool: monkey state: ONLINE status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://www.sun.com/msg/ZFS-8000-8A scrub: scrub completed after 0h0m with 8 errors on Tue Jul 13 13:17:32 2010 config: NAME STATE READ WRITE CKSUM monkey ONLINE 8 0 0 c1t1d0 ONLINE 2 0 0 c2t5d0 ONLINE 6 0 0 errors: Permanent errors have been detected in the following files: /monkey/a.txt /monkey/bananas/b.txt /monkey/sub/dir/d.txt monkey/ghost/e.txt /monkey/ghost/boo/f.txt |
包含持久性错误的文件名列表可能描述如下:
如果找到文件的全路径并且已挂载数据集,则会显示该文件的全路径。例如:
/monkey/a.txt |
如果找到文件的全路径但未挂载数据集,则会显示不带前导斜杠 (/) 的数据集名称,后面是数据集中文件的路径。例如:
monkey/ghost/e.txt |
如果由于错误或由于对象没有与之关联的实际文件路径而导致文件路径的对象编号无法成功转换(dnode_t 便是这种情况),则会显示数据集名称,后跟该对象的编号。例如:
monkey/dnode:<0x0> |
如果元对象集 (Metaobject Set, MOS) 中的对象已损坏,则会显示特殊标签 <metadata>,后跟该对象的编号。
如果损坏发生在目录或文件的元数据中,则唯一的选择是将文件移动到别处。可以安全地将任何文件或目录移动到不太方便的位置,以允许恢复原始对象。