Автор Тема: Замена диска в SUN сервере (может пригодится кому)  (Прочитано 29317 раз)

Оффлайн Tico Solaris

  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +118/-0
    • Просмотр профиля
Данная инструкция описывает процесс определения неисправности на 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


Готово =) Можно пользоваться!

Оффлайн keremet

  • Global Moderator
  • ROOT
  • *****
  • Сообщений: 461
  • Репутация: +237/-0
    • Просмотр профиля
    • OpenSolaris
Познавательно. На сколько понял, у вас используется UFS. Почему не ZFS?

Оффлайн Tico Solaris

  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +118/-0
    • Просмотр профиля
Во первых, исторически сложилось. ZFS еще не было, когда наши прилаги уже крутились на серваках SUN под Solaris 8 (а потом и 9).
Во вторых, ZFS по производительности чуть отстает. К тому же в 10-ке (не Open Solaris, а Solaris 10 для SPARC серверов) есть ряд "недочетов", с которыми столкнулись. Например - нельзя удалить из пула ZFS дисковое пространство. Добавить - сколько хочешь, а потом убрать назад никак.
Вот и работает в основном UFS по сей день, т.к. привыкли.
Хотя сейчас для некоторых решений перебираемся на ZFS.

Оффлайн keremet

  • Global Moderator
  • ROOT
  • *****
  • Сообщений: 461
  • Репутация: +237/-0
    • Просмотр профиля
    • OpenSolaris
Какими утилитами можно уменьшить размер дискового пространства, выделенного под UFS?

Оффлайн Tico Solaris

  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +118/-0
    • Просмотр профиля
Не очень понял вопрос, если честно...
Сжать что-ли? Или переразбить диск по новому?

Оффлайн keremet

  • Global Moderator
  • ROOT
  • *****
  • Сообщений: 461
  • Репутация: +237/-0
    • Просмотр профиля
    • OpenSolaris
Например - нельзя удалить из пула ZFS дисковое пространство. Добавить - сколько хочешь, а потом убрать назад никак.
Как я понял, указанный недостаток ZFS отсутствует у UFS. Вот про то, как это реализовано, я и интересовался.

Оффлайн evgenp

  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
    • Просмотр профиля
День добрый!
следовал Вашей статье для замены выгоревшего HDD d primepower 650
solaris 9
# 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    configured   unknown
c1::dsk/c1t4d0                 CD-ROM       connected    configured   unknown
#
format
Searching for disks...done

c0t1d0: configured with capacity of 68.36GB


AVAILABLE DISK SELECTIONS:
       0. c0t0d0 <FUJITSU-MAP3735NC-3701 cyl 24345 alt 2 hd 8 sec 737>
          /pci@87,2000/scsi@1/sd@0,0
       1. c0t1d0 <HITACHI-HUS103073FL3800-SA1B cyl 52689 alt 2 hd 3 sec 907>
          /pci@87,2000/scsi@1/sd@1,0

судя по всему диск таки прижился

а дальше ничего не могу с новым диском сделать
ругается
# tail -f /var/adm/messages
Jun 25 13:16:09 SMO00C00H scsi: [ID 107833 kern.warning] WARNING: /pci@87,2000/scsi@1/sd@1,0 (sd1):
Jun 25 13:16:09 SMO00C00H       Corrupt label; wrong magic number
Jun 25 13:48:06 SMO00C00H scsi: [ID 107833 kern.warning] WARNING: /pci@87,2000/scsi@1/sd@1,0 (sd1):
Jun 25 13:48:06 SMO00C00H       Corrupt label; wrong magic number
Jun 25 13:52:07 SMO00C00H scsi: [ID 107833 kern.warning] WARNING: /pci@87,2000/scsi@1/sd@1,0 (sd1):
Jun 25 13:52:07 SMO00C00H       Corrupt label; wrong magic number
Jun 25 13:57:22 SMO00C00H scsi: [ID 107833 kern.warning] WARNING: /pci@87,2000/scsi@1/sd@1,0 (sd1):
Jun 25 13:57:22 SMO00C00H       Corrupt label; wrong magic number
Jun 25 13:57:22 SMO00C00H scsi: [ID 107833 kern.warning] WARNING: /pci@87,2000/scsi@1/sd@1,0 (sd1):
Jun 25 13:57:22 SMO00C00H       Corrupt label; wrong magic number

не знаю что дальше делать
помогите плиз!

Илья

  • Гость
У меня такая же проблема была только не на сервере а рабочей станции нужно на диске переставить перемычку там есть где вставляется штекер посмотри.

Оффлайн evgenp

  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
    • Просмотр профиля
Диск скази 2
там нету перемычек вообще никаких :(
меня смущают вот эти параметры геометрии
FUJITSU-MAP3735NC-3701 cyl 24345 alt 2 hd 8 sec 737
HITACHI-HUS103073FL3800-SA1B cyl 52689 alt 2 hd 3 sec 907

может нада найти точно такой же винт и попробовать поменять?

Оффлайн evgenp

  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
    • Просмотр профиля
привезли винт аналочичный тому что стоял (ну почти аналогичный)
0. c0t0d0 <FUJITSU-MAP3735NC-3701 cyl 24345 alt 2 hd 8 sec 737>
          /pci@87,2000/scsi@1/sd@0,0
       1. c0t1d0 <FUJITSU-MAP3735NC-0108 cyl 47994 alt 2 hd 4 sec 747>
          /pci@87,2000/scsi@1/sd@1,0
в системе он определился нормально
на нем судя по всему есть уже какие то разделы которые счас попробую снести...
пробовал вот так сделать
# dd if=/dev/rdsk/c0t0d0s2 of=/dev/rdsk/c0t1d0s2
dd: /dev/rdsk/c0t1d0s2: open: I/O error
ничего не получилось
# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s -\ /dev/rdsk/c0t1d0s2
Usage:  fmthard [ -i ] [ -n volumename ] [ -s datafile ] [ -d arguments] raw-device
#
и где тут ашибка закралась?

Оффлайн keremet

  • Global Moderator
  • ROOT
  • *****
  • Сообщений: 461
  • Репутация: +237/-0
    • Просмотр профиля
    • OpenSolaris
Можно попробовать заменить s2 на p0. То есть:
dd if=/dev/rdsk/c0t0d0p0 of=/dev/rdsk/c0t1d0p0

Оффлайн evgenp

  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
    • Просмотр профиля
# dd if=/dev/rdsk/c0t0d0p0 of=/dev/rdsk/c0t1d0p0
dd: /dev/rdsk/c0t0d0p0: open: No such file or directory

а нужно ли руками создавать разделы так же как и на исходном диске?
есть вариант не делать зеркальный рэйд а сделать просто копию диска на диск и отложить его в ящик на всяк случай
если грохнется основной то пставить запасной и с него стартарнуть и работать дальше
как можно реализовать такую операцию??

Оффлайн keremet

  • Global Moderator
  • ROOT
  • *****
  • Сообщений: 461
  • Репутация: +237/-0
    • Просмотр профиля
    • OpenSolaris
# dd if=/dev/rdsk/c0t0d0p0 of=/dev/rdsk/c0t1d0p0
dd: /dev/rdsk/c0t0d0p0: open: No such file or directory

а нужно ли руками создавать разделы так же как и на исходном диске?
есть вариант не делать зеркальный рэйд а сделать просто копию диска на диск и отложить его в ящик на всяк случай
если грохнется основной то пставить запасной и с него стартарнуть и работать дальше
как можно реализовать такую операцию??

p0 означает все содержимое диска. Может быть попробовать вместо rdsk/ написать dsk/ ? У меня под OpenSolaris создание образа флешки идет так:
$ dd if=/dev/dsk/c12t0d0p0 of=flash.img
^C16353+0 records in
16352+0 records out
8372224 bytes (8,4 MB) copied, 8,97911 s, 932 kB/s

8,4 MB - потому что я прервал копирование.

Для данной операции команды dd будет вполне достаточно.


Оффлайн evgenp

  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
    • Просмотр профиля
то же самое написало :(

Оффлайн keremet

  • Global Moderator
  • ROOT
  • *****
  • Сообщений: 461
  • Репутация: +237/-0
    • Просмотр профиля
    • OpenSolaris
Покажи, что выдает команда
mount
Наверно имеет смысл создавать образ не всего диска, а только определенных разделов диска. Предлагаю попробовать создать образ раздела.