Руководство по администрированию файловых систем ZFS Solaris

Восстановление поврежденных данных

В следующих разделах описан процесс определения типа повреждения и восстановления данных, если оно возможно.

Для сведения к минимуму риска повреждения данных в ZFS применяется расчет контрольной суммы, обеспечение избыточности данных и их самовосстановление. Тем не менее, повреждение данных может происходить в том случае, если пул не является избыточным, при повреждении во время нахождения пула в состоянии DEGRADED или в результате ряда маловероятных событий, приводящих к повреждению нескольких копий фрагмента данных. Вне зависимости от причины, результат одинаков: данные повреждены и, следовательно, недоступны. Предпринимаемое действие зависит от типа поврежденных данных и их относительной значимости. Возможно повреждение двух основных типов данных:

Данные проверяются в нормальном режиме работы, а также в процессе очистки. Для получения дополнительной информации о проверке целостности данных пула см. Проверка целостности данных 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

Предшествующие выходные данные выглядят следующим образом:

При повреждении в каталоге или метаданных файла единственным решением является перемещение файла в какое-либо другое местоположение. Любой файл или каталог можно безопасно переместить в менее удобное местоположение, что обеспечивает восстановление исходного объекта.

Устранение повреждений в масштабе всего пула устройств хранения данных ZFS

При повреждении метаданных, препятствующем открытию пула, необходимо восстановить пул и все соответствующие данные из резервной копии. Используемый для этого механизм полностью зависит от конфигурации пула и стратегии резервирования. Сначала необходимо сохранить конфигурацию в соответствии с выходными данными команды zpool status, что позволит воссоздать ее после уничтожения пула. Затем выполните команду zpool destroy -f для уничтожения пула. Кроме того, сохраните файл, содержащий описание структуры наборов данных и различных указанных на локальном уровне свойств в безопасном местоположении, поскольку при недоступности пула эта информация также становится недоступной. На основе конфигурации пула и схемы набора данных после разрушения пула его конфигурацию можно восстановить в полном объеме. После этого можно заполнить данные с помощью любой используемой стратегии резервного копирования и восстановления.