В следующих разделах описан процесс определения типа повреждения и восстановления данных, если оно возможно.
Для сведения к минимуму риска повреждения данных в ZFS применяется расчет контрольной суммы, обеспечение избыточности данных и их самовосстановление. Тем не менее, повреждение данных может происходить в том случае, если пул не является избыточным, при повреждении во время нахождения пула в состоянии DEGRADED или в результате ряда маловероятных событий, приводящих к повреждению нескольких копий фрагмента данных. Вне зависимости от причины, результат одинаков: данные повреждены и, следовательно, недоступны. Предпринимаемое действие зависит от типа поврежденных данных и их относительной значимости. Возможно повреждение двух основных типов данных:
Метаданные пула – ZFS требует некоторых данных для открытия пула и обращения к наборам данных. При повреждении этих данных весь пул или целые ветви иерархии набора данных становятся недоступными.
Данные объектов – в этом случае повреждение происходит в рамках определенного файла или каталога. Эта проблема может привести к тому, что часть файла или каталога становится недоступной, или объект может оказаться полностью неработоспособным.
Данные проверяются в нормальном режиме работы, а также в процессе очистки. Для получения дополнительной информации о проверке целостности данных пула см. Проверка целостности данных ZFS.
По умолчанию команда zpool status отражает только возникшие повреждения, но не место их возникновения. Пример:
# zpool status 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: none requested config: NAME STATE READ WRITE CKSUM monkey ONLINE 0 0 0 c1t1d0s6 ONLINE 0 0 0 c1t1d0s7 ONLINE 0 0 0 errors: 8 data errors, use '-v' for a list |
Каждая запись о выявленной ошибке указывает только на то, что эта ошибка произошла в определенный момент времени. Это не означает, что ошибка по-прежнему присутствует в системе. Это утверждение справедливо для нормального режима работы. Некоторые временные сбои могут привести к повреждению данных, которое автоматически устраняется после исправления. Полная очистка пула обеспечивает проверку всех активных блоков в пуле, поэтому журнал ошибок сбрасывается по завершении каждой очистки. Если ошибки уже были устранены и завершение очистки не требуется, выполните сброс всех ошибок в пуле при помощи команды zpool online.
Если повреждение касается метаданных всего пула, выходные данные команды будут несколько другими. Пример:
# zpool status -v morpheus pool: morpheus id: 1422736890544688191 state: FAULTED status: The pool metadata is corrupted. action: The pool cannot be imported due to damaged devices or data. see: http://www.sun.com/msg/ZFS-8000-72 config: morpheus FAULTED corrupted data c1t10d0 ONLINE |
В случае повреждения в масштабе всего пула этот пул переводится в состояние FAULTED, поскольку невозможно обеспечить необходимый уровень избыточности.
При повреждении файла или каталога система может оставаться работоспособной в зависимости от типа повреждения. Если в системе отсутствуют какие-либо корректные копии данных, возможность восстановления фактически отсутствует. Если эти данные имеют ценность, единственным решением является восстановление поврежденных данных из резервной копии. Даже в этом случае можно исправить повреждение без восстановления всего.
При возникновении повреждения в блоке данных файла этот файл можно безопасно удалить, что позволит устранить ошибку. Для отображения списка имен файлов с повторяющимися ошибками используется команда 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: none requested config: NAME STATE READ WRITE CKSUM monkey ONLINE 0 0 0 c1t1d0s6 ONLINE 0 0 0 c1t1d0s7 ONLINE 0 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> |
При повреждении объекта в наборе объектов метаданных (MOS) отображается специальный тег <metadata>, а затем номер объекта.
При повреждении в каталоге или метаданных файла единственным решением является перемещение файла в какое-либо другое местоположение. Любой файл или каталог можно безопасно переместить в менее удобное местоположение, что обеспечивает восстановление исходного объекта.
При повреждении метаданных, препятствующем открытию пула, необходимо восстановить пул и все соответствующие данные из резервной копии. Используемый для этого механизм полностью зависит от конфигурации пула и стратегии резервирования. Сначала необходимо сохранить конфигурацию в соответствии с выходными данными команды zpool status, что позволит воссоздать ее после уничтожения пула. Затем выполните команду zpool destroy -f для уничтожения пула. Кроме того, сохраните файл, содержащий описание структуры наборов данных и различных указанных на локальном уровне свойств в безопасном местоположении, поскольку при недоступности пула эта информация также становится недоступной. На основе конфигурации пула и схемы набора данных после разрушения пула его конфигурацию можно восстановить в полном объеме. После этого можно заполнить данные с помощью любой используемой стратегии резервного копирования и восстановления.