Какова вероятность того, что ZFS будет в согласованном состоянии (даже если некоторые данные были потеряны) и пул будет пригоден для использования / чтения при перезагрузке?
ZFS работает как система управления транзакционной базой данных, поскольку старые данные не обновляются при обновлении, как в традиционных файловых системах. Вместо этого новые данные записываются в другое место на диске, затем структуры метаданных файловой системы обновляются, чтобы указывать на новые данные, и только после этого блок старых данных освобождается для повторного использования файловой системой. Таким образом, внезапная потеря питания приведет к тому, что старая копия данных останется на месте, если новые обновления данных не будут на 100% зафиксированы в постоянном хранилище. Вы не будете заменять половину блока или что-либо подобное, что приведет к повреждению данных.
Кроме того, ZFS использует сложную схему контрольных сумм, которая позволяет файловой системе обнаруживать неверно записанные или поврежденные данные.
Если вы используете ZFS с избыточным хранилищем, эта же схема позволяет файловой системе выбирать между двумя или более избыточными копиями данных при восстановлении файловой системы. То есть, если у вас есть две копии данного блока, и только одна из них соответствует его сохраненной контрольной сумме, файловая система знает, что она должна восстановить плохую копию / копии с чистой.
Эти исправления могут происходить на лету, когда вы пытаетесь прочитать или изменить данные, после чего файловая система может понять, что запрошенные блоки не являются полностью кошерными, или во время операции zfs scrub
. Распространено запланировать периодическое выполнение скраба в пулах ZFS, в которых есть файлы, к которым редко обращаются, поскольку в противном случае файловая система не обнаружила бы потерю аппаратных данных при нормальной работе. Пулы ZFS, работающие на изощренном оборудовании, обычно показывают некоторое количество фиксированных блоков после каждой очистки.
Очистка является своего рода fsck
для других файловых систем типа Unix, за исключением того, что это происходит онлайн, когда файловая система монтируется и используется; это происходит в фоновом режиме и только когда пул в противном случае простаивает. Кроме того, реализации fsck
обычно проверяют только метаданные, но не данные, а контрольные суммы ZFS, и поэтому могут обнаруживать ошибки в обоих. Если эти механизмы целостности решают, что один из блоков должен быть заменен, он может использовать контрольные суммы, чтобы решить, какой копией заменить поврежденные копии.
Предполагая, что носители данных, аппаратное и программное обеспечение по-прежнему работают надежно / правильно, что еще могло пойти не так, чтобы в результате была потеря пула?
Насколько я знаю, такого случая нет. Либо одна из трех упомянутых вами вещей потерпела неудачу, либо ZFS смонтирует пул и выполнит чтение из него.
Очевидно, недостаточная избыточность + отказ диска (или другая серьезная проблема с оборудованием) - один из случаев
Да, хотя это может произойти в более тонком случае, чем я думаю, вы думаете.
Возьмите простое двустороннее зеркало. Я думаю, вы думаете о том, что один из дисков физически удален из компьютера или, по крайней мере, недоступен по какой-то причине. Но представьте, что сектор 12345 поврежден на обоих дисках. Тогда все хитрые контрольные суммы и избыточность в ZFS не могут вам помочь: обе копии повреждены, поэтому весь блок, содержащий этот сектор, не может быть прочитан.
Но здесь есть один умный момент: поскольку ZFS является одновременно файловой системой и диспетчером томов - в отличие от аппаратного копирования, подобного аппаратному RAID + ext4 или LVM2 + ext4 - команда zpool status
сообщит вам, какой файл поврежден без возможности восстановления. Если вы удалите этот файл, пул немедленно вернется в неповрежденное состояние; проблема была устранена Сбои, которые отделяют файловую систему от частей RAID и LVM, не могут этого сделать.
Какие ситуации должны возникнуть до того, как это не может произойти, и что должно произойти для их возникновения?
Единственный известный мне случай - это что-то вроде приведенного выше примера, когда повреждение данных повредило достаточно избыточных копий ключевых метаданных файловой системы, что ZFS не может их прочитать.
По этой причине с сегодняшними чрезвычайно большими дисками - 100 триллионов бит! - Я рекомендую вам настроить ZFS (или любую другую систему RAID или LVM в этом отношении) как минимум с двойной избыточностью. В терминах ZFS это означает raidz2, 3- сторонние зеркала или выше.
Тем не менее, ZFS обычно хранит дополнительные копии всех метаданных файловой системы сверх обычных уровней избыточности, используемых для обычных файловых данных. Например, двустороннее зеркало будет хранить 2 копии обычных пользовательских данных, но 4 копии всех метаданных. Вы можете набрать это обратно для производительности, но вы не можете отключить его полностью.
В руководстве ZFS есть глава о режимах сбоев ZFS, которая может показаться вам полезной.