В этой главе описывается выявление и восстановление различных типов сбоя ZFS. Здесь также приведена информация по предотвращению сбоев.
В этой главе содержатся следующие разделы:
В файловой системе ZFS, являющейся сочетанием файловой системы и диспетчера томов, могут возникать сбои различных типов. В начале этой главы описываются различные типы сбоя, а затем рассматривается их идентификация в работающей системе. В завершение приводятся инструкции по устранению сбоев. В ZFS могут возникать ошибки трех основных типов:
Следует отметить, что в одном пуле могут возникать все три типа ошибок, поэтому полная процедура восстановления включает в себя поиск и исправление всех ошибок поочередно.
Если устройство полностью удалено из системы, ZFS обнаруживает, что открыть устройство невозможно, и переводит его в состояние UNAVAIL. В зависимости от уровня репликации данных пула, в некоторых случаях это может привести к недоступности всего пула. При удалении одного диска в зеркальном устройстве или устройстве RAID-Z пул остается доступным. При удалении всех компонентов зеркала и нескольких устройств в составе RAID-Z или удалении устройства верхнего уровня с одним диском пул переводится в состояние FAULTED. До повторного присоединения устройства доступных данных нет.
Термин "повреждение" охватывает широкий спектр возможных ошибок. Ниже приведены следующие примеры ошибок:
временные ошибки ввода/вывода вследствие неисправности диска или контроллера;
повреждение данных на диске вследствие воздействия космических лучей;
ошибки драйвера, приводящие к передаче данных в неправильное местоположение или из него;
непреднамеренная перезапись части пространства физического устройства другим пользователем.
В некоторых случаях эти ошибки являются временными, например, случайная ошибка ввода/вывода при возникновении проблем в контроллере. В других случаях повреждения носят постоянный характер, например, повреждение данных на диске. Тем не менее, постоянный характер повреждения не обязательно указывает на то, что эта ошибка снова возникнет в будущем. Так, если администратор случайно перезаписывает часть диска, сбой оборудования не фиксируется и замена устройства не требуется. Точная идентификация сбоев устройства является сложной задачей, которая более подробно рассматривается в одном из следующих разделов.
Повреждение данных происходит в том случае, если одна или несколько ошибок устройств (указывающих на отсутствие или повреждение устройств) влияют на виртуальное устройство верхнего уровня. Например, на одной стороне зеркала может возникать большое количество ошибок, но это не приведет к повреждению данных. Однако в случае возникновения ошибки на другой стороне зеркала в том же расположении данные будут повреждены.
Повреждение данных всегда носит постоянный характер и требует специальной процедуры устранения сбоев. Даже при исправлении или замене основных устройств исходные данные утрачиваются окончательно. Чаще всего в этом случае необходимо восстановление данных на основе резервных копий. Ошибки в данных регистрируются по мере их возникновения, и для их обработки используется программа очистки диска, описанная в следующем разделе. При удалении поврежденного блока в ходе следующей очистки фиксируется отсутствие повреждений, и вся информация об ошибке удаляется из системы.
Эквивалентов служебной программы fsck для ZFS не существует. Эта служебная программа традиционно использовалась в двух целях: для восстановления и проверки данных.
В традиционных файловых системах сам способ записи данных обуславливал вероятность непредвиденных сбоев, приводящих к противоречивости данных. Поскольку традиционная файловая система не является транзакционной, в ней могут появляться блоки, ссылки на которые отсутствуют, неверные счетчики связей или другие противоречивые структуры данных. Журналирование позволяет решить некоторые из этих проблем, но также приводит к возникновению новых проблем в случае невозможности отката записей в журнале. В системе ZFS эти проблемы отсутствуют. Единственной причиной возникновения на диске несогласованных данных является сбой оборудования (в этом случае пул должен быть избыточным) или ошибка в программном обеспечении ZFS.
Поскольку служебная программа fsck предназначена для устранения известных патологий, характерных для отдельных файловых систем, создать такую служебную программу для файловой системы при отсутствии известных патологий невозможно. Возможно, в будущем некоторые проблемы повреждения данных будут признаны достаточно распространенными и идентифицируемыми для разработки служебной программы устранения сбоев, однако этих проблем всегда можно избежать путем организации пулов с избыточностью.
В противном случае всегда существует вероятность того, что в результате повреждения данных часть или все данные окажутся недоступными.
Помимо восстановления данных служебная программа fsck осуществляет проверку на отсутствие проблем в данных, хранящихся на диске. Традиционно эта задача выполнялась путем размонтирования файловой системы и выполнения служебной программы fsck, возможно, с переводом системы в однопользовательский режим. Этот случай приводит к простою, продолжительность которого пропорциональна размеру проверяемой файловой системы. Вместо явного вызова служебной программы для выполнения необходимой проверки ZFS предоставляет механизм программной проверки всего объема данных. Эта функциональность, называемая очисткой (scrubbing), обычно применяется для памяти и файловых систем в целях обнаружения и предотвращения ошибок до того, как они приведут к сбою оборудования или программного обеспечения.
Каждый раз, когда ZFS обнаруживает ошибку в процессе очистки или при обращении к файлу по запросу, ошибка регистрируется на внутреннем уровне, что позволяет получить сводку всех выявленных ошибок в пуле.
Наиболее простым способом проверки целостности данных является инициирование явной очистки всех данных в пуле. Эта операция позволяет проследить все данные в пуле и проверить возможность чтения блоков на определенный момент времени. Очистка выполняется с той скоростью, с которой это позволяют соответствующие устройства, несмотря на то, что приоритет ввода/вывода остается ниже, чем в нормальном режиме работы. Эта операция может негативно повлиять на производительность, несмотря на то, что файловая система остается доступной и обеспечивает в процессе очистки почти такой же отклик. Для инициирования явной очистки используется команда zpool scrub. Пример:
# zpool scrub tank |
Информацию по текущей очистке можно вывести при помощи команды zpool status. Пример:
# zpool status -v tank pool: tank state: ONLINE scrub: scrub completed after 0h7m with 0 errors on Tue Sep 1 09:20:52 2009 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t0d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 errors: No known data errors |
Следует отметить, что в конкретный момент времени может выполняться только одна операция активной очистки в пуле.
Выполняемую очистку можно остановить при помощи параметра -s. Пример:
# zpool scrub -s tank |
В большинстве случаев для обеспечения целостности данных операция очистки должна быть доведена до конца. Пользователь может прервать очистку по собственному усмотрению, если эта операция оказывает воздействие на производительность системы.
Выполнение программы очистки также гарантирует непрерывный ввод/вывод по всем дискам в системе. Программа очистки обладает побочным эффектом, который заключается в невозможности перевода неактивных дисков в режим пониженного энергопотребления функциями управления питанием. Если система обычно всегда выполняет операции ввода/вывода или объем потребления электроэнергии неважен, эту проблему можно игнорировать.
Для получения дополнительной информации об интерпретации выходных данных команды zpool status см. Запрос состояния пула устройств хранения данных ZFS.
При замене устройства инициируется операция переноса актуальных данных, в рамках которой данные корректных копий переносятся на новое устройство. Это действие представляет собой разновидность очистки диска. Поэтому в пуле одновременно может выполняться только одна такая операция. Если выполняется операция очистки, то операция переноса актуальных данных приостанавливает текущую очистку и перезапускает ее после завершения переноса.
Для получения дополнительной информации о переносе актуальных данных см. Просмотр статуса переноса актуальных данных.
В следующих разделах описывается процедура выявления проблем в файловых системах или пулах устройств хранения данных ZFS.
Для выявления проблем в конфигурациях ZFS можно воспользоваться следующими функциями:
вывод подробной информации пула устройств хранения данных ZFS с помощью команды zpool status;
уведомление об сбоях пулов и устройств с помощью сообщений диагностики ZFS/FMA;
отображение предыдущих команд ZFS, используемых для изменения информации о состоянии пула, с помощью команды zpool history.
В большинстве случаев поиск и устранение сбоев ZFS выполняются с помощью команды zpool status. Эта команда используется для анализа различных сбоев, возникающих в системе, и выявления наиболее серьезной проблемы, а также предлагает возможные действия и предоставляет ссылку на соответствующую статью базы знаний для получения дополнительной информации. Следует отметить, что эта команда позволяет выявить только одну проблему в пуле, несмотря на возможное наличие нескольких проблем. Например, ошибки, связанные с повреждением данных, всегда подразумевают сбой одного из устройств. Замена неисправного устройства не позволяет решить проблему повреждения данных.
Кроме того, для диагностики и уведомления о сбоях пулов и устройств доступен механизм диагностики ZFS. Также обеспечивается регистрация ошибок контрольной суммы, ввода/вывода и устройств, связанных со сбоем пула или устройства. Сбои ZFS, выявленные с помощью команды fmd, отображаются на консоли и регистрируются в файле системных сообщений. В большинстве случаев сообщение fmd содержит ссылку на команду zpool status.
Ниже приведено описание базового процесса восстановления.
При необходимости определения команд ZFS, после выполнения которых возникла ошибка, воспользуйтесь командой zpool history. Пример:
# zpool history tank History for 'tank': 2009-09-01.09:26:15 zpool create tank mirror c0t1d0 c0t2d0 c0t3d0 2009-09-01.09:26:34 zfs create tank/erick 2009-09-01.09:26:41 zfs set checksum=off tank/erick |
Следует отметить, что в приведенных выше выходных данных контрольные суммы для файловой системы tank/erick отключены. Такая конфигурация не рекомендуется.
Идентифицируйте ошибки с использованием сообщений fmd на системной консоли или в файлах /var/adm/messages.
Перейдите к дальнейшим инструкциям по устранению сбоев с помощью команды zpool status -x.
Устраните сбои, в т.ч.:
замените неисправное или отсутствующее устройство и переведите его в оперативный режим;
восстановите конфигурацию или поврежденные данные из резервной копии;
проверьте результат восстановления с помощью команды zpool status -x;
выполните резервное копирование восстановленной конфигурации (если применимо).
В этой главе описывается интерпретация выходных данных команды zpool status для диагностики типа сбоя и перехода к одному из следующих разделов, в которых приведены инструкции по устранению проблемы. Поскольку основной объем операций выполняется автоматически с помощью команды, для диагностики типа сбоя необходимо точно понимать, какие проблемы были выявлены.
Наиболее простым способом определения выявленных проблем в системе является выполнение команды zpool status -x. Эта команда выводит список пулов с явными проблемами. При отсутствии в системе неисправных пулов эта команда выводит следующее простое сообщение:
# zpool status -x all pools are healthy |
Без флага -x команда полностью отображает состояние всех пулов (или затребованного пула, если он указан в командной строке), даже если эти пулы в работоспособны.
Для получения дополнительной информации о параметрах командной строки для команды zpool status см. Запрос состояния пула устройств хранения данных ZFS.
Полные выходные данные команды zpool status выглядят следующим образом:
# zpool status tank pool: tank state: DEGRADED status: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scrub: none requested config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 mirror DEGRADED 0 0 0 c1t0d0 ONLINE 0 0 0 c1t1d0 OFFLINE 0 0 0 errors: No known data errors |
Эти выходные данные подразделяются на несколько разделов:
В разделе заголовка выходных данных команды zpool status содержатся следующие поля, некоторые из них отображаются только для неисправных пулов:
Имя пула.
Текущая работоспособность пула. Эта информация относится только к способности пула обеспечить необходимый уровень репликации. Пулы, находящиеся в состоянии ONLINE, по-прежнему могут содержать неисправные устройства или поврежденные данные.
Описание неисправности пула. При отсутствии выявленных сбоев это поле опускается.
Рекомендуемое действие по устранению ошибок. Это поле представляет собой сокращенную форму для направления пользователя к одному из следующих разделов. При отсутствии выявленных сбоев это поле опускается.
Ссылка на статью базы знаний, содержащую подробную информацию об устранении сбоя. Статьи в Интернете обновляются чаще, чем настоящее руководство, и поэтому для большинства актуальных процедур устранения сбоев указываются ссылки именно на них. При отсутствии выявленных сбоев это поле опускается.
Определяет текущее состояние операции очистки, которое может включать дату и время выполнения последней очистки, информацию о выполняемой очистке или указание на то, что запросы на очистку не поступали.
Определяет выявленные ошибки в данных или указывает на отсутствие таковых.
Поле config в выходных данных команды zpool status содержит информацию о конфигурации устройств, составляющих пул, а также их состоянии и любых ошибках, генерируемых этими устройствами. Устройства могут находиться в одном из следующих состояний: ONLINE, FAULTED, DEGRADED, UNAVAILABLE или OFFLINE. Если состояние устройства отлично от состояния ONLINE, это указывает на пониженную отказоустойчивость пула.
Во втором разделе выходных данных конфигурации отображается статистика ошибок. Эти ошибки подразделяются на три категории:
READ – ошибка ввода/вывода, возникшая при обработке запроса на чтение;
WRITE – ошибка ввода/вывода, возникшая при обработке запроса на запись;
CKSUM – ошибка контрольной суммы. В результате запроса на чтение устройство выдает поврежденные данные.
Эти ошибки могут использоваться для определения постоянного характера сбоя. Небольшое количество ошибок ввода/вывода может указывать на временный сбой, тогда как большое количество таких ошибок – на наличие постоянной проблемы, связанной с устройством. Эти ошибки не обязательно свидетельствуют о повреждении данных, интерпретируемом приложениями. Если устройство имеет конфигурацию с избыточностью, то дисковые устройства могут отображать неисправимые ошибки, тогда как на уровне зеркала или устройства RAID-Z ошибки не отображаются. В этом случае ZFS успешно извлекает корректные данные и предпринимает попытку восстановления поврежденных данных на основе существующих реплик.
Для получения дополнительной информации об интерпретации этих ошибок для идентификации сбоя устройства см. Определение типа сбоя устройства.
Наконец, в последнем столбце выходных данных команды zpool status отображается дополнительная информация. Эта информация дополняет данные в поле state и используется для диагностики типов сбоя. Если устройство находится в состоянии FAULTED, в этом поле указывается, является ли устройство доступным и нарушена ли целостность содержащихся в нем данных. Если для устройства выполняется перенос актуальных данных, в этом поле отображается ход выполнения этой операции.
Для получения дополнительной информации о наблюдении за процесса переноса актуальных данных см. Просмотр статуса переноса актуальных данных.
В третьем разделе выходных данных команды zpool status описывается текущее состояние всех явных очисток. Эта информация отличается от информации по обнаруженным ошибкам, несмотря на возможность ее использования для определения точности сообщений об ошибках, связанных с повреждением данных. Если последняя очистка была завершена недавно, наиболее вероятно обнаружение всех выявленных повреждений данных.
Для получения дополнительной информации об очистке данных и интерпретации соответствующей информации см. Проверка целостности данных ZFS.
Команда zpool status также отражает связь выявленных ошибок с пулом. Эти ошибки могут быть обнаружены при очистке диска или в нормальном режиме работы. ZFS ведет сохраняемый протокол всех ошибок в данных, связанных с пулом. При каждом завершении полной очистки соответствующий журнал очищается.
Ошибки, связанные с повреждением данных, всегда являются фатальными. Их наличие указывает на то, что по крайней мере в одном приложении возникла ошибка ввода/вывода из-за повреждения данных в пуле. Ошибки устройств в резервном пуле не приводят к повреждению данных и не регистрируются в журнале. По умолчанию отображается только количество обнаруженных ошибок. Полный список ошибок с подробной информацией можно просмотреть с помощью параметра zpool status -v. Пример:
# zpool status -v pool: tank state: UNAVAIL status: One or more devices are faulted in response to IO failures. action: Make sure the affected devices are connected, then run 'zpool clear'. see: http://www.sun.com/msg/ZFS-8000-HC scrub: scrub completed after 0h0m with 0 errors on Tue Sep 1 09:51:01 2009 config: NAME STATE READ WRITE CKSUM tank UNAVAIL 0 0 0 insufficient replicas c1t0d0 ONLINE 0 0 0 c1t1d0 UNAVAIL 4 1 0 cannot open errors: Permanent errors have been detected in the following files: /tank/data/aaa /tank/data/bbb /tank/data/ccc |
Аналогичное сообщение также отображается с помощью команды fmd на системной консоли и в файле /var/adm/messages. Эти сообщения также можно отслеживать с помощью команды fmdump.
Для получения дополнительной информации об интерпретации ошибок, связанных с повреждением данных, см. Определение типа повреждения данных.
Помимо сохраняемого отслеживания ошибок в пуле, ZFS также формирует сообщения типа "syslog" в случае представляющих интерес событий. События, требующие уведомления администратора, генерируются в следующих случаях:
Изменение состояния устройства. При переводе устройства в состояние FAULTED в ZFS выводится сообщение о возможном снижении уровня отказоустойчивости пула. Аналогичное сообщение выдается при последующем переводе устройства в оперативный режим и восстановлении работоспособности пула.
Повреждение данных. При выявлении повреждения данных в ZFS выводится сообщение о времени повреждения и расположении поврежденных данных. Это сообщение появляется только при первом выявлении повреждения. При последующем доступе это сообщение отсутствует.
Отказы пула и устройств. При сбое пула или устройства демон Fault Manager уведомляет об этих ошибках с помощью сообщений в системном журнале, а также команды fmdump.
При выявлении ZFS ошибки устройства и ее автоматическом исправлении уведомление не создается. Такие ошибки не приводят к сбою, связанному с обеспечением избыточности пула или целостностью данных. Кроме того, такие ошибки обычно являются результатом проблем с драйвером, сопровождаемых рядом собственных сообщений об ошибках.
В ZFS имеется кэш активных пулов и их конфигурации в корневой файловой системе. При повреждении или рассинхронизации содержимого файла по сравнению с данными на диске пул будет недоступен. ZFS стремится предотвратить эту ситуацию, несмотря на то, что всегда сохраняется вероятность случайного повреждения из-за характеристик файловой системы и устройства хранения. Эта ситуация обычно приводит к исчезновению из системы пула, который должен быть доступен. Эта ситуация может также привести к возникновению частичной конфигурации, в которой отсутствует некоторое (неизвестное) количество виртуальных устройств верхнего уровня. В любом случае конфигурацию можно восстановить, экспортировав пул (если он является видимым для всех), а затем снова импортировав его.
Для получения дополнительной информации об импорте и экспорте пулов см. Переход пулов устройств хранения данных ZFS.
Если устройство невозможно открыть, в выходных данных команды zpool status отображается состояние UNAVAILABLE. Это состояние означает, что обращение к устройству при первом доступе к пулу оказалось невозможным или что с тех пор устройство является недоступным. Если из-за проблем с этим устройством виртуальное устройство верхнего уровня недоступно, то также недоступны все элементы пула. В противном случае отказоустойчивость пула может быть снижена. В любом случае для восстановления нормальной работы необходимо заново присоединить устройство к системе.
Например, после сбоя устройства может появиться сообщение, аналогичное следующему из команды fmd:
SUNW-MSG-ID: ZFS-8000-FD, TYPE: Fault, VER: 1, SEVERITY: Major EVENT-TIME: Tue Sep 1 09:36:46 MDT 2009 PLATFORM: SUNW,Sun-Fire-T200, CSN: -, HOSTNAME: neo SOURCE: zfs-diagnosis, REV: 1.0 EVENT-ID: a1fb66d0-cc51-cd14-a835-961c15696fed DESC: The number of I/O errors associated with a ZFS device exceeded acceptable levels. Refer to http://sun.com/msg/ZFS-8000-FD for more information. AUTO-RESPONSE: The device has been offlined and marked as faulted. An attempt will be made to activate a hot spare if available. IMPACT: Fault tolerance of the pool may be compromised. REC-ACTION: Run 'zpool status -x' and replace the bad device. |
Следующий этап заключается в выполнении команды zpool status -x для просмотра подробной информации о проблеме, связанной с устройством, и ее решении. Пример:
Из этих выходных данных следует, что отсутствующее устройство c1t1d0 не функционирует. При выявлении неисправного диска устройство необходимо заменить.
Затем с помощью команды zpool online переведите замененное устройство в оперативный режим. Пример:
# zpool online tank c1t1d0 |
Проверьте, что пул с замененным устройством является работоспособным.
# zpool status -x tank pool 'tank' is healthy |
Процедура повторного подключения отсутствующего устройства зависит от рассматриваемого устройства. Если оно представляет собой подключенный к сети накопитель, необходимо восстановить сетевые подключения. Если устройство представляет собой накопитель для USB или другой сменный носитель, его необходимо повторно подключить к системе. Если устройство представляет собой локальный диск, возможен такой сбой контроллера, при котором устройство перестает быть видимым для системы. В этом случае контроллер необходимо заменить, после чего диски снова становятся доступными. Также возможно наличие других сбоев в зависимости от типа и конфигурации оборудования. Если накопитель неисправен и перестает быть видимым для системы (что маловероятно), устройство необходимо рассматривать как поврежденное. Выполните процедуры, описанные в разделе Замена или восстановление поврежденного устройства.
После повторного подключения устройства к системе ZFS может автоматически обнаружить или не обнаружить его доступность. Если пул ранее находился в состоянии FAULTED или система была перезагружена в рамках процедуры подключения, то ZFS автоматически повторяет сканирование всех устройств при попытке открытия пула. Если пул находился в состоянии DEGRADED и устройство было заменено во время работы системы, необходимо уведомить ZFS о доступности устройства и возможности его открытия с помощью команды zpool online. Пример:
# zpool online tank c0t1d0 |
Для получения дополнительной информации о переводе устройств в оперативный режим см. Перевод устройства в оперативный режим.
В этом разделе описывается определение типов сбоев устройств, сброс временных ошибок и замена устройства.
Термин поврежденное устройство является достаточно неопределенным и может обозначать целый ряд возможных ситуаций:
Повреждение отдельных битов. С течением времени случайные побочные факторы, например магнитное воздействие и воздействие космических лучей, могут привести к непредсказуемому изменению сохраненных на диске битов. Эти события происходят относительно редко, но достаточно вездесущи, чтобы вызвать потенциальное повреждение данных в крупных системах или системах, работающих длительное время. Обычно эти ошибки являются временными.
Неверные адреса чтения или записи. Ошибки микропрограммного обеспечения или сбои оборудования могут привести к чтению или записи целых блоков в неправильном расположении на диске. Эти ошибки обычно являются временными, хотя большое количество таких ошибок может указывать на неисправность накопителя.
Ошибка администратора. Администратор может непреднамеренно записать на части диска некорректные данные (например, скопировать /dev/zero на части диска), что приведет к неустранимому повреждению данных на диске. Эти ошибки всегда являются временными.
Временный сбой. Диск может оказаться недоступным на некоторое время, что приведет к ошибкам ввода/вывода. Эта ситуация обычно связана с подключенными к сети устройствами, однако временные сбои возможны и в случае локальных дисков. Эти ошибки могут быть как временными, так и постоянными.
Неисправное или часто отказывающее оборудование. Эта ситуация охватывает самые разные проблемы, связанные с неисправностью оборудования. Эти проблемы могут возникать в случае повторяющихся ошибок ввода/вывода, сбойных каналов передачи, приводящих к случайным повреждениям данных, или ряда других сбоев. Эти ошибки обычно являются постоянными.
Устройство в автономном режиме. Если устройство находится в автономном режиме, предполагается, что оно было переведено в это состояние администратором по причине сбоя. Администратор, который перевел устройство в это состояние, может определить, насколько верно это предположение.
Точное определение неисправности может быть достаточно затруднительным. Первый этап этого процесса заключается в проверке счетчиков ошибок в выходных данных команды zpool status:
# zpool status -v pool |
Ошибки подразделяются на ошибки ввода/вывода и ошибки контрольной суммы. Оба типа ошибок могут указывать на возможный тип сбоя. Как правило, в результате этой операции выявляется лишь незначительное количество ошибок (несколько ошибок за длительный период времени). Выявление большого количества ошибок указывает на неизбежный или уже произошедший сбой устройства. Однако ошибка администратора также может приводить к значительному возрастанию показателей счетчиков ошибок. Другим источником информации является системный журнал. Если в журнале отображается большое количество сообщений SCSI или драйвера Fibre Channel, это может указывать на серьезные сбои оборудования. Если сообщения "syslog" не генерируются, то наиболее вероятен временный характер повреждения.
Необходимо ответить на следующий вопрос:
Вероятно ли возникновение в этом устройстве другой ошибки?
Ошибки, возникающие однократно, считаются временными и не указывают на возможный сбой. Повторяющиеся ошибки или ошибки, серьезность которых указывает на возможный сбой оборудования, считаются критическими. Процедура определения типа ошибки выходит за рамки возможностей автоматизированного программного обеспечения, доступного в настоящее время в ZFS, и поэтому должна выполняться администратором вручную. После определения типа ошибки необходимо предпринять соответствующие меры по ее устранению. Устраните временные ошибки или замените устройство в случае фатальных ошибок. Эти процедуры описаны в следующих разделах.
Даже в том случае, если ошибки устройства считаются временными, они, тем не менее, могут привести к возникновению неисправимых ошибок в данных в пуле. Эти ошибки требуют специальных процедур восстановления, даже если основное устройство считается работоспособным или исправленным. Для получения дополнительной информации об устранении ошибок в данных см. Восстановление поврежденных данных.
Если ошибки устройства считаются временными, т.е. могут лишь с небольшой вероятностью оказать влияние на будущую работоспособность устройства, то это позволяет безопасно выполнить их сброс. Это указывает на отсутствие фатальных ошибок. Для сброса счетчиков ошибок RAID-Z или зеркальных устройств используется команда zpool clear. Пример:
# zpool clear tank c1t1d0 |
Этот синтаксис позволяет сбросить любые ошибки, связанные с устройством, и любые счетчики ошибок данных устройства.
Для сброса всех ошибок, связанных с виртуальными устройствами в пуле, и любых счетчиков ошибок в данных пула используется следующий синтаксис:
# zpool clear tank |
Для получения дополнительной информации о сбросе ошибок пула см. Сброс ошибок устройств в пуле устройств хранения данных.
Если повреждение устройства носит постоянный характер или высока вероятность постоянного сбоя в будущем, это устройство необходимо заменить. Возможность замены устройства зависит от настройки пула.
Для замены устройства пул должен находиться в состоянии ONLINE. Устройство должно входить в конфигурацию с избыточностью или быть работоспособным (находиться в состоянии ONLINE). Если диск входит в конфигурацию с избыточностью, необходимо наличие достаточного количества реплик для восстановления актуальных данных. При сбое двух дисков в четырехстороннем зеркале один диск может быть заменен, поскольку для него доступны работоспособные реплики. Однако при сбое двух дисков в четырехстороннем устройстве RAID-Z замена дисков невозможна, поскольку необходимые реплики для извлечения данных отсутствуют. Если устройство повреждено, но находится в оперативном режиме, заменить его можно только до перевода пула в состояние FAULTED. Однако любые неверные данные будут скопированы с устройства на новое устройство, если нет подходящих реплик с правильными данными.
В следующей конфигурации диск c1t1d0 может быть заменен, и любые данные в пуле могут быть скопированы из правильной реплики c1t0d0.
mirror DEGRADED c1t0d0 ONLINE c1t1d0 FAULTED |
Диск c1t0d0 также может быть заменен, однако самовосстановление данных невозможно, поскольку правильные реплики недоступны.
В следующей конфигурации ни один из поврежденных дисков не может быть заменен. Диски, находящиеся в состоянии ONLINE, также не могут быть заменены вследствие неисправности пула.
raidz FAULTED c1t0d0 ONLINE c2t0d0 FAULTED c3t0d0 FAULTED c3t0d0 ONLINE |
В следующей конфигурации любой диск верхнего уровня может быть заменен, несмотря на то, что все неправильные данные, присутствующие на диске, копируются на новый диск.
c1t0d0 ONLINE c1t1d0 ONLINE |
При сбое диска выполнение замены невозможно, поскольку сам пул находится в состоянии сбоя.
Если прекращение работы устройства приводит к сбою пула или это устройство содержит слишком большое количество ошибок данных в конфигурации без избыточности, то его безопасная замена невозможна. Без необходимой избыточности наличие актуальных данных для восстановления поврежденного устройства не обеспечивается. В этом случае восстановить пул можно только путем повторного создания конфигурации и восстановления данных.
Для получения дополнительной информации о восстановлении всего пула см. Устранение повреждений в масштабе всего пула устройств хранения данных ZFS.
После определения заменяемого устройства выполните команду zpool replace для замены устройства. Для замены поврежденного устройства другим устройством используется следующая команда:
# zpool replace tank c1t1d0 c2t0d0 |
Эта команда инициирует переход данных в новое устройство из поврежденного устройства или других устройств пула, если для него используется конфигурация с избыточностью. По завершении выполнения команды поврежденное устройство отключается от конфигурации, после чего может быть удалено из системы. Если устройство уже было удалено и заменено новым устройством в том же местоположении, используется форма команды для одного устройства. Пример:
# zpool replace tank c1t1d0 |
Эта команда выполняет надлежащее форматирование неформатированного диска и инициирует перенос актуальных данных из оставшейся конфигурации.
Для получения дополнительной информации о команде zpool replace см. Замена устройств в пуле устройств хранения данных.
В следующем примере показано, как заменить устройство (c1t3d0) в зеркальном пуле устройств хранения данных tank в системе Sun Fire x4500. Если необходимо заменить диск c1t3d0 на новый диск в том же расположении (c1t3d0), необходимо исключить диск из конфигурации перед попыткой его замены. в.
Сначала переведите заменяемый диск в автономный режим. Невозможно исключить диск из конфигурации, когда он используется.
Укажите исключаемый из конфигурации диск (c1t3d0) и исключите его. Когда диск переводится в автономный режим в этой зеркальной конфигурации, уровень пула будет понижен, но пул останется доступным.
Физически замените диск (c1t3d0). Перед физическим удалением сбойного диска убедитесь, что горит синий светодиодный индикатор "Готовность к удалению".
Настройте диск (c1t3d0).
Переведите диск (c1t3d0) в оперативный режим.
Выполните команду zpool replace для замены диска (c1t3d0).
Если ранее было установлено свойство пула autoreplace=on, то любое новое устройство, обнаруженное в том же физическом расположении, что и устройство, ранее входившее в пул, автоматически форматируется и заменяется без использования команды zpool replace. Эта функциональная возможность может не поддерживаться для некоторого оборудования.
Если отказавший диск автоматически заменяется устройством горячего резервирования, может потребоваться отключение резервного диска после замены отказавшего. Например, если резервное устройство c2t4d0 остается активным после замены отказавшего диска, его следует отключить.
# zpool detach tank c2t4d0 |
# zpool offline tank c1t3d0 # cfgadm | grep c1t3d0 sata1/3::dsk/c1t3d0 disk connected configured ok # cfgadm -c unconfigure sata1/3 Unconfigure the device at: /devices/pci@0,0/pci1022,7458@2/pci11ab,11ab@1:3 This operation will suspend activity on the SATA device Continue (yes/no)? yes # cfgadm | grep sata1/3 sata1/3 disk connected unconfigured ok <Replace the physical disk c1t3d0> # cfgadm -c configure sata1/3 # cfgadm | grep sata3/7 sata3/7::dsk/c5t7d0 disk connected configured ok # zpool online tank c1t3d0 # zpool replace tank c1t3d0 # zpool status pool: tank state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Tue Apr 22 14:44:46 2008 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 mirror ONLINE 0 0 0 c0t2d0 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 mirror ONLINE 0 0 0 c0t3d0 ONLINE 0 0 0 c1t3d0 ONLINE 0 0 0 errors: No known data errors |
Следует помнить, что предыдущая команда zpool output может показывать как новые, так и старые диски под заголовком replacing. Пример:
replacing DEGRADED 0 0 0 c1t3d0s0/o FAULTED 0 0 0 c1t3d0 ONLINE 0 0 0 |
Этот текст означает, что выполняется процесс замены, и актуальные данные переносятся на новый диск.
Если диск c1t3d0) заменяется на другой диск (c4t3d0), то после физической замены диска необходимо только выполнить команду zpool replace. Пример:
# zpool replace tank c1t3d0 c4t3d0 # zpool status pool: tank state: DEGRADED scrub: resilver completed after 0h0m with 0 errors on Tue Apr 22 14:54:50 2008 config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 mirror ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 mirror ONLINE 0 0 0 c0t2d0 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 mirror DEGRADED 0 0 0 c0t3d0 ONLINE 0 0 0 replacing DEGRADED 0 0 0 c1t3d0 OFFLINE 0 0 0 c4t3d0 ONLINE 0 0 0 errors: No known data errors |
Для завершения процесса замены диска может потребоваться выполнить команду zpool status несколько раз.
# zpool status tank pool: tank state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Tue Apr 22 14:54:50 2008 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 mirror ONLINE 0 0 0 c0t2d0 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 mirror ONLINE 0 0 0 c0t3d0 ONLINE 0 0 0 c4t3d0 ONLINE 0 0 0 |
В примере ниже представлено восстановление устройства протоколирования c0t5d0 после сбоя в пуле устройств хранения pool. Требуются следующие основные действия.
Ознакомьтесь с выходными данными zpool status -x и сообщением диагностики FMA, представленными ниже:
Физически замените отказавшее устройство протоколирования.
Включите устройство протоколирования.
Удалите информацию об ошибках пула.
# zpool status -x pool: pool state: FAULTED status: One or more of the intent logs could not be read. Waiting for adminstrator intervention to fix the faulted pool. action: Either restore the affected device(s) and run 'zpool online', or ignore the intent log records by running 'zpool clear'. scrub: none requested config: NAME STATE READ WRITE CKSUM pool FAULTED 0 0 0 bad intent log mirror ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 c0t4d0 ONLINE 0 0 0 logs FAULTED 0 0 0 bad intent log c0t5d0 UNAVAIL 0 0 0 cannot open <Physically replace the failed log device> # zpool online pool c0t5d0 # zpool clear pool |
Процесс замены диска может занять продолжительное время, в зависимости от его емкости и объема данных в пуле. Процесс переноса данных из одного устройства на другое называют переносом актуальных данных; для контроля этого процесса используется команда zpool status.
В традиционных файловых системах перенос актуальных данных выполняется на уровне блоков. Поскольку ZFS исключает искусственные слои диспетчера томов, перенос актуальных данных выполняется более универсальным и контролируемым образом. Эта функция имеет два основных преимущества:
ZFS выполняет перенос только минимального объема необходимых данных. В случае кратковременного отключения (в противоположность полной замене устройства) возможен перенос актуальных данных диска в течение нескольких минут или секунд, вместо переноса всего диска или усложнения процедуры за счет регистрации "грязных" зон, осуществляемой некоторыми диспетчерами томов. При замене всего диска процесс переноса актуальных данных занимает время, пропорциональное объему данных на диске. Для замены диска размером 500 ГБ могут потребоваться секунды, если только малая часть используемого пространства принадлежит пулу.
Процедура переноса актуальных данных безопасна и может быть прервана в любой момент. При отключении электропитания или перезагрузке системы процесс переноса актуальных данных запускается точно с момента прерывания без вмешательства пользователя.
Для контроля процесса переноса актуальных данных используется команда zpool status. Пример:
# zpool status tank pool: tank state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scrub: resilver in progress for 0h2m, 16.43% done, 0h13m to go config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 mirror DEGRADED 0 0 0 replacing DEGRADED 0 0 0 c1t0d0 ONLINE 0 0 0 c2t0d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 |
В приведенном примере диск c1t0d0 заменяется диском c2t0d0. Это событие отражается в выходных данных запроса состояния как replacing, что означает выполняющуюся замену виртуального устройства в настройке. Это устройство не существует в действительности, и создать пул с использованием этого типа виртуального устройства невозможно. Цель использования этого устройства состоит только в отображении процесса переноса актуальных данных и точном определении заменяемого устройства.
Следует отметить, что любой пул, для которого в настоящее время выполняется перенос актуальных данных, переводится в состояние ONLINE или DEGRADED, так как не может обеспечить необходимый уровень избыточности до завершения процесса переноса. Чтобы свести к минимуму воздействие на систему, перенос актуальных данных выполняется максимально быстро, хотя системные операции ввода-вывода всегда имеют более низкий приоритет, чем ввод-вывод по запросу пользователя. После завершения переноса актуальных данных выполняется переход к новой полной конфигурации. Пример:
# zpool status tank pool: tank state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Tue Sep 1 10:55:54 2009 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror ONLINE 0 0 0 c2t0d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 errors: No known data errors |
Пул снова переводится в состояние ONLINE, и исходный неисправный диск (c1t0d0) удаляется из конфигурации.
В следующих разделах описан процесс определения типа повреждения и восстановления данных, если оно возможно.
Для сведения к минимуму риска повреждения данных в 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 для уничтожения пула. Кроме того, сохраните файл, содержащий описание структуры наборов данных и различных указанных на локальном уровне свойств в безопасном местоположении, поскольку при недоступности пула эта информация также становится недоступной. На основе конфигурации пула и схемы набора данных после разрушения пула его конфигурацию можно восстановить в полном объеме. После этого можно заполнить данные с помощью любой используемой стратегии резервного копирования и восстановления.
ZFS была разработана как надежная и устойчивая к ошибкам система. Тем не менее, ошибки в программном обеспечении или определенные непредвиденные отказы могут вызвать фатальную ошибку системы при обращении к пулу. В рамках процесса начальной загрузки осуществляется открытие каждого пула. Это означает, что в результате подобных сбоев система оказывается в бесконечном цикле фатальной ошибки и перезагрузки. Для восстановления в такой ситуации необходимо информировать ZFS, что при запуске не следует искать никакие пулы.
В ZFS имеется внутренний кэш доступных пулов и их конфигураций в /etc/zfs/zpool.cache. Расположение и содержимое этого файла представляют собой закрытые атрибуты и могут изменяться. Если система становится незагружаемой, выполните начальную загрузку до этапа none с использованием загрузочного параметра -m milestone=none. После перехода системы в рабочий режим перемонтируйте корневую файловую систему как доступную для записи, а затем удалите или переместите файл /etc/zfs/zpool.cache в другое расположение. В результате этих действий ZFS не обнаруживает существующие в системе пулы, что позволяет предотвратить обращение к неисправному пулу, вызвавшему проблему. Затем систему можно перевести в нормальное состояние с помощью команды svcadm milestone all. При загрузке с альтернативного корня для восстановления используется аналогичный процесс.
После перехода системы в рабочий режим можно предпринять попытку импорта пула с помощью команды zpool import. Однако эта операция, вероятно, приведет к возникновению той же ошибки, что и при начальной загрузке, поскольку эта команда использует для доступа к пулам тот же механизм. Если в системе существуют несколько пулов, выполните следующее.
Переименуйте файл zpool.cacheили переместите его в другое место, как описано выше.
Определите проблемный пул. Для этого используйте команду fmdump -eV, показывающую пулы, для которых имеются сообщения о неустранимых ошибках.
Импортируйте пулы один за другим, пропуская проблемные пулы, указанные в выходных данных команды fmdump.