2
« : Апрель 30, 2009, 12:57:42 pm »
Данная инструкция описывает процесс определения неисправности на HDD и его замены.
В моем случае используется SoftRaid на двух HDD (Solaris 10).
Рассмотрим наиболее вероятные проблемы с HDD. Для анализа нам необходим лог сервера – файл /var/adm/messages (messages.0 - 3). Чаще всего по нему можно определить причину сбоя с большой вероятностью.
«Тонкое» место на SCSI диске – это его контроллер (микросхема, расположенная на плате HDD).
Итак, возможные причины отказа:
1. Сбой диска (механическая неисправность).
2. Сбой работы SCSI контроллера (сам HDD работоспособен, но система его не видит). Можно восстановить HDD, заменив на нем плату с контроллером.
3. Нестабильная работа SCSI контролера. В этом случае система может работать с диском, но наблюдается большое количество ошибок на SCSI шине. Такие проблемы иногда можно вылечить переусадкой диска в слот сервера, но лучше заменить HDD.
4. «Выпадение» HDD из слота. Эта проблема лечится переусадкой диска в слот сервера.
Исходные данные – логи сервера. Примеры:
1. Пример лога с многочисленными ошибками по шине SCSI. Система «тормозит» при обращении к диску (особенно, если есть программное зеркало).
Apr 3 13:43:21 BER1281IVR02MTS scsi: [ID 365881 kern.info] /pci@1c,600000/scsi@2 (glm0):
Apr 3 13:43:21 BER1281IVR02MTS Cmd (0xe13d32d8) dump for Target 0 Lun 0:
Apr 3 13:43:21 BER1281IVR02MTS scsi: [ID 365881 kern.info] /pci@1c,600000/scsi@2 (glm0):
Apr 3 13:43:21 BER1281IVR02MTS cdb=[ 0x8 0x0 0x0 0x0 0x1 0x0 ]
Apr 3 13:43:21 BER1281IVR02MTS scsi: [ID 365881 kern.info] /pci@1c,600000/scsi@2 (glm0):
Apr 3 13:43:21 BER1281IVR02MTS pkt_flags=0x1c000 pkt_statistics=0x61 pkt_state=0x7
Apr 3 13:43:21 BER1281IVR02MTS scsi: [ID 365881 kern.info] /pci@1c,600000/scsi@2 (glm0):
Apr 3 13:43:21 BER1281IVR02MTS pkt_scbp=0x0 cmd_flags=0x8e1
Apr 3 13:43:21 BER1281IVR02MTS scsi: [ID 107833 kern.warning] WARNING: /pci@1c,600000/scsi@2 (glm0):
Apr 3 13:43:21 BER1281IVR02MTS Disconnected tagged cmd(s) (1) timeout for Target 0.0
Apr 3 13:43:21 BER1281IVR02MTS genunix: [ID 408822 kern.info] NOTICE: glm0: fault detected in device; service still available
Apr 3 13:43:21 BER1281IVR02MTS genunix: [ID 611667 kern.info] NOTICE: glm0: Disconnected tagged cmd(s) (1) timeout for Target 0.0
Apr 3 13:43:21 BER1281IVR02MTS glm: [ID 401478 kern.warning] WARNING: ID[SUNWpd.glm.cmd_timeout.6018]
Что значат эти каракули? =)
Для увеличения производительности SCSI шины, предусмотрена возможность запрашивать не одну операцию ввода/вывода, а сразу несколько. Для этого запросы маркируются (tagged queuing). По умолчанию происходит один такой "большой" запрос на 256 операций (однако предусмотрена возможность для изменения значения). Если обнаруживается ошибка - все 256 операций повторяются заново. Отсюда можно наблюдать "торможение".
Строка "Disconnected tagged cmd(s) (1) timeout for Target 0.0" сигнализирует о том, что обнаружилась ошибка при выполнении такого запроса к SCSI устройству.
Проще говоря, наблюдаются ошибки, связанные с обработкой запросов на устройство HDD. Наиболее вероятная причина - на данном диске неисправен контроллер SCSI. В идеале, диск необходимо заменить. Однако, может помочь "переусадка" диска.
2. Вариант с «умершим» SCSI контроллером:
Mar 3 02:58:26 BER1712SGW01VK md_mirror: [ID 104909 kern.warning] WARNING: md: d61: /dev/dsk/c0t0d0s6 needs maintenance
Mar 3 02:59:26 BER1712SGW01VK scsi: [ID 107833 kern.warning] WARNING: /pci@1c,600000/scsi@2/sd@0,0 (sd3):
Mar 3 02:59:26 BER1712SGW01VK Unit Attention retries exhausted. Check the target.
Mar 3 03:00:26 BER1712SGW01VK scsi: [ID 107833 kern.warning] WARNING: /pci@1c,600000/scsi@2/sd@0,0 (sd3):
Mar 3 03:00:26 BER1712SGW01VK Unit Attention retries exhausted. Check the target.
Mar 3 03:00:26 BER1712SGW01VK scsi: [ID 107833 kern.warning] WARNING: /pci@1c,600000/scsi@2/sd@0,0 (sd3):
Mar 3 03:00:26 BER1712SGW01VK offline
Проблема с диском на шине scsi@2, устройство sd@0,0. Проблема описывается строкой «Unit Attention retries exhausted. Check the target», – диск не отвечает системе на запросы.
Теперь необходимо привести в соответствие имена устройств. Мы знаем, что неисправен диск sd@0,0. Нам необходимо узнать логическое имя и проверить статусы программных зеркал (есть ли они, в каком состоянии). Аппаратные зеркала (raidctl) не рассматриваем, т.к. для Solaris они выглядят как одно физическое устройство.
1. Проверяем доступные диски командой format, определяем неисправный диск.
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0t0d0 <drive type unknown>
/pci@1c,600000/scsi@2/sd@0,0
1. c0t1d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424>
/pci@1c,600000/scsi@2/sd@1,0
Specify disk (enter its number):
Нас интересует диск c0t0d0. Именно он неисправен, подлежит замене. Этот диск находится в слоте 0 сервера.
2. Проверяем состояние зеркал командой metastat.
Этот раздел – тема отдельного разговора. В моем случе диск состоит из шести слайсов, каждый из них зазеркалирован на другой HDD. Метареплики хранятся на седьмом слайсе (объемом 50 МБ).
Если зеркало в состоянии State: Needs maintenance, то необходимо его лечить.
3. Удаляем мертвые метареплики. Метареплики хранятся на 7-ом слайсе (в моем случае):
#metadb -f -d /dev/dsk/c0t0d0s7
4. Перед заменой диска необходимо его отключить. Сначала проверяем имена дисков в системе.
# cfgadm -al
Ap_Id Type Receptacle Occupant Condition
c0 scsi-bus connected configured unknown
c0::dsk/c0t0d0 disk connected configured unknown
c0::dsk/c0t1d0 disk connected configured unknown
c1 scsi-bus connected unconfigured unknown
usb0/1 unknown empty unconfigured ok
usb0/2 unknown empty unconfigured ok
Нужный нам диск c0::dsk/c0t0d0.
Необходимо его деконфигурировать в системе:
#cfgadm -c unconfigure c0::dsk/c0t0d0
Теперь cfgadm –al должен показать, что диск деконфигурирован.
5. Вынимаем мертвый диск и ПЛОТНО(!!) вставляем новый. Защелку на новом диске закрываем только тогда, когда дальше его уже никак не пропихнуть.
6. После смены диска:
#cfgadm -c configure c0::dsk/c0t0d0
Теперь cfgadm –al должен показать, что диск cконфигурирован.
7. Далее настраиваем зеркало. Скопировать разбивку диска с рабочей половины зеркала на новый диск:
#prtvtoc /dev/rdsk/c0t1d0s2 | fmthard -s - /dev/rdsk/c0t0d0s2
8. Установить загрузочный блок на новый диск:
#installboot /usr/platform/sun4u/lib/fs/ufs/bootblk /dev/rdsk/c0t0d0s0
9. Создать на новом диске реплики:
#metadb -f -с 3 -a /dev/dsk/c0t0d0s7
10. Для каждого раздела заменить устройство в зеркале:
#metareplace -e d10 c0t0d0s0
#metareplace -e d20 c0t0d0s1
#metareplace -e d30 c0t0d0s3
#metareplace -e d40 c0t0d0s4
#metareplace -e d50 c0t0d0s5
#metareplace -e d60 c0t0d0s6
Готово =) Можно пользоваться!