一些演示文稿声明zfs有:
zfs可以检测并纠正无提示数据损坏。
例如从这里http://www.eecis.udel.edu/~bmiller/DE-OSUG/ECECIS-ZFS.pdf
1.但是你需要分配一些空闲的磁盘或zfs池来手工完成吗? 或者这是zfs的内在?
受影响的数据需要重复发生。 这个冗余可以在没有额外的磁盘的情况 多个磁盘也不意味着冗余。
ZFS支持备用设备,但它们在这里可以replace处于故障状态的其他设备。 它们不用于数据冗余。
2.单磁盘zfs文件系统是否具有此function,或者您必须获得RAIDZ?
无论池configuration如何,除非明确地禁用校验和,否则总是会检测到损坏的数据,但这是一个非常糟糕的主意。
单个磁盘池包含元数据时可以恢复一个烂块。 包含文件数据的块只能在副本属性设置为2或更高时才能恢复。
条带化configuration中的多个磁盘池类似于单个磁盘池,即元数据可以承受磁盘腐烂,同上存在是文件数据自我修复的要求。
冗余configuration(镜像,raidz,raidz2,raidz3)中的多个磁盘池可以恢复任何磁盘腐烂问题(当然,除非有多个磁盘失败等大规模错误情况)。
在读取受影响的文件(或元数据或zvol块)时会检测到错误。 如果ZFS能够恢复错误,则错误将被透明地修复,并返回正确的数据。 否则,会报告读取错误。 请注意,校验和不是ECC,因此不能用于恢复损坏的块,只能检测它们。
如果您想要validation整个池而不等待读取发生,则可以使用擦洗机制。 ZFS将检查所有使用的块,并在可能时自我修复那些烂块。
要检测整个磁盘上的这种腐烂情况,必须运行一个周期性的数据缓冲区。 有些发行在cron工作中做,所以看看它。
该命令是zpool scrub techrx 。 您一次只能运行一个清理过程。
每次从磁盘读取数据时,zfs都会检查读取数据是否腐烂。 所以你很确定要阅读干净的数据。 build议每周进行一次完整的检查,一个月一次(正如我们对大多数RAID所做的那样)。
1你不需要分配磁盘空间。 数据更正是在可用空间内完成的(我记得第一次是通过重写错误的扇区来完成的,如果失败了,他们在别处重写,但这可能是不准确的)。 当然,如果你的磁盘已经100%满了,这可能是不可能的
2该过程基于已经集成到zfs中的校验和
3大多数情况下,清理校正数据,因为校验和实际上是纠错码。 如果损坏的数据太大,那么zfs不能恢复它们,但是你的磁盘已经被认为是死的
您可以在这里获得更多信息:
运行定期的数据清理: http : //www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide
zfs自愈再次沉默腐败: http : //hub.opensolaris.org/bin/view/Community+Group+zfs/selfheal