некоторая презентация заявляет, что zfs имеет:
zfs может обнаруживать и исправлять скрытое повреждение данных.
например отсюда http://www.eecis.udel.edu/~bmiller/DE-OSUG/ECECIS-ZFS.pdf
1. Но нужно ли вам выделить запасной диск или пул zfs, чтобы сделать это вручную? или это заложено в zfs?
Чтобы это произошло, затронутые данные должны быть избыточными. Эта избыточность может быть достигнута без дополнительных дисков. Наличие нескольких дисков также не подразумевает избыточности.
ZFS поддерживает запасные устройства, но они предназначены для замены других устройств, находящихся в неисправном состоянии. Они не используются для избыточности данных.
2. Есть ли эта функция в однодисковой файловой системе zfs или вам нужен RAIDZ?
Независимо от конфигурации пула, поврежденные данные всегда обнаруживаются с помощью ZFS, если вы явно не отключите контрольные суммы, но это было бы очень плохой идеей.
Пулы с одним диском могут восстановить испорченный блок, если он содержит метаданные. Блоки, содержащие данные файла, могут быть восстановлены только в том случае, если для свойства copy установлено значение 2 или выше.
Несколько пулов дисков в чередующейся конфигурации аналогичны пулам с одним диском, то есть метаданные могут пережить гниение дисков, наличие блоков того же типа является требованием для самовосстановления файловых данных.
Несколько пулов дисков в избыточной конфигурации (зеркало, raidz, raidz2, raidz3) могут устранить любую проблему с гниением дисков (если, конечно, не возникнет серьезная ошибка, например, отказ нескольких дисков).
Ошибки обнаруживаются при чтении затронутого файла (или метаданных, или блока zvol). Если ZFS может исправить ошибку, ошибка будет прозрачно исправлена, и будут возвращены правильные данные. В противном случае выдается сообщение об ошибке чтения. Обратите внимание, что контрольная сумма не является ECC, поэтому ее нельзя использовать для восстановления битых блоков, только для их обнаружения.
Если вы хотите проверить весь пул, не дожидаясь чтения, вы можете использовать механизм очистки. ZFS проверит все использованные блоки и по возможности самостоятельно вылечит гнилые.
Чтобы обнаружить такое гниение на всем диске, необходимо выполнять периодический сбор данных. Некоторые дистрибутивы делают это в cron, так что взгляните на это.
Команда zpool scrub techrx
. Вы можете запускать только один процесс очистки за раз.
Каждый раз, когда данные считываются с диска, zfs проверяет их на гниение. Так что вы почти наверняка читаете чистые данные. Рекомендуется выполнять полную проверку от одного раза в неделю до одного раза в месяц (как мы делаем для большинства 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