В этом разделе описывается определение типов сбоев устройств, сброс временных ошибок и замена устройства.
Термин поврежденное устройство является достаточно неопределенным и может обозначать целый ряд возможных ситуаций:
Повреждение отдельных битов. С течением времени случайные побочные факторы, например магнитное воздействие и воздействие космических лучей, могут привести к непредсказуемому изменению сохраненных на диске битов. Эти события происходят относительно редко, но достаточно вездесущи, чтобы вызвать потенциальное повреждение данных в крупных системах или системах, работающих длительное время. Обычно эти ошибки являются временными.
Неверные адреса чтения или записи. Ошибки микропрограммного обеспечения или сбои оборудования могут привести к чтению или записи целых блоков в неправильном расположении на диске. Эти ошибки обычно являются временными, хотя большое количество таких ошибок может указывать на неисправность накопителя.
Ошибка администратора. Администратор может непреднамеренно записать на части диска некорректные данные (например, скопировать /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) удаляется из конфигурации.