Страница 1 из 1

Gmirror trouble

Добавлено: 2009-11-30 22:30:10
dm07
Всем привет. Имеется проблема с расстроенным GMIRROR, которое заметил после нескольких месяцев эксплуатации :smile: .
Итак:

Код: Выделить всё

uname -s -r
FreeBSD 7.1-PRERELEASE

Код: Выделить всё

gmirror status
      Name    Status  Components
mirror/gm0  DEGRADED  ad0

Код: Выделить всё

gmirror list
Geom name: gm0
State: DEGRADED
Components: 2
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 2
SyncID: 1
ID: 1898931226
Providers:
1. Name: mirror/gm0
   Mediasize: 320072932864 (298G)
   Sectorsize: 512
   Mode: r6w6e7
Consumers:
1. Name: ad0
   Mediasize: 320072933376 (298G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 2
   SyncID: 1
   ID: 1569215859

Код: Выделить всё

gmirror insert gm0 /dev/ad2
gmirror: Not all disks connected.
Но вот что не пойму: если из гмиррор отвалился ad2, а ad0 в строю, то смотрю:

Код: Выделить всё

ls /dev | grep ad
ad0
ad2
ad2s1
ad2s1a
ad2s1b
ad2s1c
ad2s1d
ad2s1e
ad2s1f
ad2s1g
Видим, что на ad0 нет слайсов, а ad2 есть. Как такое возможно?

Re: Gmirror trouble

Добавлено: 2009-11-30 22:46:49
angelas_
Так и должно быть. 0 диск у вас в зеркале, поэтому партиции напрямую не показываются. Добраться можно только через /dev/mirror/gm0* (но это партиции зеркала, а не диска), ну или вынув диск из зеркала. 2 диск у вас "выпал" из зеркала, поэтому вы и видете партиции напрямую.

Сначала нужно чтоб зеркало "забыло" о недостающем диске:

Код: Выделить всё

gmirror forget gm0
Ну и потом:

Код: Выделить всё

gmirror insert gm0 ad2
Кстати, тут совсем недавно была тема именно об этом, только видать не все поиском пользуются ;-)

Re: Gmirror trouble

Добавлено: 2009-11-30 22:50:27
dm07
angelas_ писал(а):Так и должно быть. 0 диск у вас в зеркале, поэтому партиции напрямую не показываются. Добраться можно только через /dev/mirror/gm0* (но это партиции зеркала, а не диска), ну или вынув диск из зеркала. 2 диск у вас "выпал" из зеркала, поэтому вы и видете партиции напрямую.

Сначала нужно чтоб зеркало "забыло" о недостающем диске:

Код: Выделить всё

gmirror forget gm0
Ну и потом:

Код: Выделить всё

gmirror insert gm0 ad2
Кстати, тут совсем недавно была тема именно об этом, только видать не все поиском пользуются ;-)
Спасибо.

Re: Gmirror trouble

Добавлено: 2009-11-30 22:55:57
dm07
Кстати, насколько я понял, для проверки на bad блоки составляющих гмиррор, мне нужно перегрузиться в сингл режим, подмонтировать интересующий слайс и запустить fsck -y /dev/ad0s1(a,e,g). Все верно?

Re: Gmirror trouble

Добавлено: 2009-11-30 23:07:33
angelas_
fsck проверяет целостность файловой системы, но никак не сектора диска. Для этого другие утилиты есть.
Перегружаться не обязательно, можно и так извлечь диск из зеркала и делать с ним всё что угодно. По опыту могу сказать, что если в логах полно матюков на какой-то конкретный диск - скорее всего начали битые сектора лезть. А если один раз матюкнулся, то может и просто вылетел, мало ли какой timeout прошёл, особенно это на SATA часто бывает. У меня на одном сервере года так два или три назад тоже матюкнулся один раз и вылетел. Я его обратно запихал, до сих пор работает :smile:

Re: Gmirror trouble

Добавлено: 2009-12-01 5:21:50
Overseer
из порта smartmontools попользуйтесь утилитой smartctl, посмотрите есть ли битые сектора (инфу С.М.А.Р.Т.)

Код: Выделить всё

smartctl -a /dev/DEVICE
тест на чтение всего диска:

Код: Выделить всё

dd if=/dev/DEVICE of=/dev/null bs=64k
где DEVICE - имя вашего диска
в /var/log/messages будут ошибки, если что-то не так

Re: Gmirror trouble

Добавлено: 2009-12-01 9:48:42
dm07
В моем случае:

Код: Выделить всё

smartctl -a /dev/ad2 | grep Pre-fail
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       102
  3 Spin_Up_Time            0x0027   155   155   021    Pre-fail  Always       -       3216
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
Т.е. налицо проблемы чтения из-за имеющегося бэд-блока.

Также при ребилде гмиррора:

Код: Выделить всё

Dec  1 06:49:05 hosting kernel: ad2: FAILURE - WRITE_DMA48 status=51<READY,DSC,ERROR> error=10<NID_NOT_FOUND> LBA=303583616
Dec  1 06:49:05 hosting kernel: GEOM_MIRROR: Synchronization request failed (error=5). ad2[WRITE(offset=155434745856, length=131072)]
Dec  1 06:49:05 hosting kernel: GEOM_MIRROR: Device gm0: provider ad2 disconnected.
Dec  1 06:49:05 hosting kernel: GEOM_MIRROR: Device gm0: rebuilding provider ad2 stopped.
Чтож, придется планировать покупку нового HDD.

Re: Gmirror trouble

Добавлено: 2009-12-01 14:42:04
angelas_
Вот конкретный пример. Вчера 2 раза вылетел один и тот же диск из зеркала:

Код: Выделить всё

Nov 30 11:15:19 audit kernel: ad0: FAILURE - READ_DMA status=51<READY,DSC,ERROR> error=40<UNCORRECTABLE> LBA=140384799
Nov 30 11:15:19 audit kernel: GEOM_MIRROR: Request failed (error=5). ad0[READ(offset=71877017088, length=16384)]
Nov 30 11:15:19 audit kernel: GEOM_MIRROR: Device gm0: provider ad0 disconnected.
Запихал его обратно. Сегодня:

Код: Выделить всё

angelas@audit:~> gmirror status
      Name    Status  Components
mirror/gm0  COMPLETE  ad2
                      ad0
angelas@audit:~> 
Всё ещё на месте.
Точно такое же было с этим диском года 3 назад. Если ещё вылетит, надо будет посмотреть что там смарт говорит. А мож просто поменяем диски, а то старенькие 80Гб диски там стоят, места уже маловато..... :smile:

Re: Gmirror trouble

Добавлено: 2009-12-02 0:18:58
dm07
Ради интереса зашел на другой рабочий сервер, и вот что:

Код: Выделить всё

smartctl -a /dev/ad0 | grep Pre-fail
  1 Raw_Read_Error_Rate     0x000f   056   055   006    Pre-fail  Always       -       3189513
  3 Spin_Up_Time            0x0003   096   096   000    Pre-fail  Always       -       0
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   074   060   030    Pre-fail  Always       -       64891441049
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
Обратите внимание на значения (:shock:) Raw_Read_Error_Rate и Seek_Error_Rate. При этом на машинке стоит gmirror и он целый. Правда у обоих потребителей стоит флаг DIRTY. Но в любом случае, один из потребителей не вышибается из гмиррор (в отличии от сервера в сообщении ниже).

Re: Gmirror trouble

Добавлено: 2009-12-02 0:28:35
dm07
Overseer писал(а):из порта smartmontools попользуйтесь утилитой smartctl, посмотрите есть ли битые сектора (инфу С.М.А.Р.Т.)

Код: Выделить всё

smartctl -a /dev/DEVICE
тест на чтение всего диска:

Код: Выделить всё

dd if=/dev/DEVICE of=/dev/null bs=64k
где DEVICE - имя вашего диска
в /var/log/messages будут ошибки, если что-то не так
Итак, добавил в разрушенный гмиррор вылетивший диск. Ребилд закончился этим:

Код: Выделить всё

Dec  1 06:49:05 hosting kernel: ad2: FAILURE - WRITE_DMA48 status=51<READY,DSC,ERROR> error=10<NID_NOT_FOUND> LBA=303583616
Dec  1 06:49:05 hosting kernel: GEOM_MIRROR: Synchronization request failed (error=5). ad2[WRITE(offset=155434745856, length=131072)]
Dec  1 06:49:05 hosting kernel: GEOM_MIRROR: Device gm0: provider ad2 disconnected.
Dec  1 06:49:05 hosting kernel: GEOM_MIRROR: Device gm0: rebuilding provider ad2stopped.
Проверка на бэд-блоки:

Код: Выделить всё

dd if=/dev/ad2 of=/dev/null bs=64k
4883925+1 records in
4883925+1 records out
320072933376 bytes transferred in 18203.830190 secs (17582725 bytes/sec)
Т.е. ошибок не найдено. В чем может быть дело? Что я делаю не так?

Re: Gmirror trouble

Добавлено: 2009-12-02 15:07:44
angelas_
Ну раз диск при синхронизировании после повторного возвращения в зеркало снова вылетел - похоже всё-таки проблема с диском. Советую его заменить на новый и восстановить зеркало, а со старым диском поиграться на одтельном железе с каким-нибудь badblocks или похожими программами. :smile:

Проверка на плохие сектора только чтением? Сомнительно и ненадёжно.. ;-)

Вы флаг DIRTY неправильно интерпретировали. В нормальном рабочем режиме если ведётся запись на диск он и должен быть DIRTY. По этому флагу gmirror устанавливает нужена ли ресинхронизация после перезагрузки, так как при потере питания или любом другом "unclean shutdown" этот флаг останется в состоянии "DIRTY". Примерно так. Вот коментарий Павела на этот счёт:
http://lists.freebsd.org/pipermail/free ... 37660.html
:smile:

Re: Gmirror trouble

Добавлено: 2009-12-02 19:51:45
Alex Keda
use mhdd

Re: Gmirror trouble

Добавлено: 2009-12-05 0:29:48
Overseer
dm07 писал(а): Проверка на бэд-блоки:

Код: Выделить всё

dd if=/dev/ad2 of=/dev/null bs=64k
4883925+1 records in
4883925+1 records out
320072933376 bytes transferred in 18203.830190 secs (17582725 bytes/sec)
Т.е. ошибок не найдено. В чем может быть дело? Что я делаю не так?
не появились ошибки в дмесге или в смарте?
попробуйте тест на запись (только весь диск затрется!!!!)
выньте диск из рейда и запустите тест на запись

Код: Выделить всё

badblocks -s -v -w -b 4096 /dev/ad2
/usr/ports/sysutils/e2fsprogs - тут утилита

можете в скрине запустить тест, он может занять несколько часов.
после теста будет сообщение, есть ли битые сектора.
+ опять же, посмотреть смарт.

Re: Gmirror trouble

Добавлено: 2009-12-05 3:54:23
Dimon5
Здраствуйте, уважаемые форумчане.

Проблема та же что и создателя этой темы, тоесть сегодня обнаружил что из Raid-1 выпал жесткий диск вот что выводит:

Код: Выделить всё

gmirror status      
Name    Status  Components
mirror/gm0  DEGRADED  ad8
Я выполнил команду:

Код: Выделить всё

gmirror forget gm0
После этого выполнил

Код: Выделить всё

gmirror insert gm0 ad16
После этого Выбивает следующую ошибку:

Код: Выделить всё

gmirror: Cannot store metadata on ad16.
Тоесть диск не хочет снова включаться в Raid.

Помогите решить эту проблему с восстановлением Raid - массива.

Re: Gmirror trouble

Добавлено: 2009-12-05 4:19:07
Dimon5
Кстати вот какие записи в логе в момент когда диск вылетел из Raid-1

Код: Выделить всё

Dec  3 19:57:25 novograd kernel: ad16: FAILURE - WRITE_DMA48 status=61<READY,DMA_READY,ERROR> error=4<ABORTED> LBA=715944531
Dec  3 19:57:25 novograd kernel: GEOM_MIRROR: Request failed (error=5). ad16[WRITE(offset=366563599872, length=2048)]
Dec  3 19:57:25 novograd kernel: GEOM_MIRROR: Device gm0: provider ad16 disconnected.
Dec  3 19:57:26 novograd kernel: ad16: FAILURE - WRITE_DMA status=61<READY,DMA_READY,ERROR> error=4<ABORTED> LBA=16789279
Dec  3 19:57:26 novograd kernel: ad16: FAILURE - WRITE_DMA status=61<READY,DMA_READY,ERROR> error=4<ABORTED> LBA=16789311
Dec  3 19:57:26 novograd kernel: ad16: FAILURE - WRITE_DMA status=61<READY,DMA_READY,ERROR> error=4<ABORTED> LBA=16789343
Dec  3 19:57:26 novograd kernel: ad16: FAILURE - WRITE_DMA status=61<READY,DMA_READY,ERROR> error=4<ABORTED> LBA=16789375
Dec  3 19:57:26 novograd kernel: ad16: FAILURE - WRITE_DMA status=61<READY,DMA_READY,ERROR> error=4<ABORTED> LBA=16789407
Dec  3 19:57:26 novograd kernel: ad16: FAILURE - WRITE_DMA status=61<READY,DMA_READY,ERROR> error=4<ABORTED> LBA=16789439

Re: Gmirror trouble

Добавлено: 2009-12-05 11:51:57
Alex Keda
диск меняйте

Re: Gmirror trouble

Добавлено: 2009-12-05 14:51:04
Dimon5
Но неужели больше ничего кроме замены диска не можно сделать? Просто сервер новый куплен месяц назад,
все это время работал в датацентре, жесткие диски новые 2Х1 Tb Western Digital.
Из-за чего такое могло случиться, ведь на сервер практически не было нагрузки приблизительно 1-2%.

При выполнении команды жесткий диск видно в системе, может, стоит проверить его специальными утилитами, может быть что-то с файловой системой.

Код: Выделить всё

ls  /dev | grep ad
ad16
ad8
ad8s1
cuad0
cuad0.init
cuad0.lock
Порекомендуйте, пожалуйста.

Re: Gmirror trouble

Добавлено: 2009-12-05 20:21:57
Alex Keda
mhdd

Re: Gmirror trouble

Добавлено: 2009-12-05 23:42:22
angelas_
Dimon5 писал(а):Но неужели больше ничего кроме замены диска не можно сделать? Просто сервер новый куплен месяц назад,
все это время работал в датацентре, жесткие диски новые 2Х1 Tb Western Digital.
Из-за чего такое могло случиться, ведь на сервер практически не было нагрузки приблизительно 1-2%.
Вам надо было перед тем, кад сервер запускать в продакшн его хорошенько протестировать. Теперь конечно выбор действий очень ограничен.
Бывает что и с новыми дисками вылезают косяки. Скорее всего диски были куплены из одной партии и серии, то вы сейчас ходите по лезвию бритвы, поэтому предлагаю, пока не поздно, купить ещё один диск и как можно быстрее заменить. Когда замените и восстановите зеркало, можете поиграться с отвалившимся диском и если с ним действительно проблемы - заменить по гарантии. А там уже заменив протестировать и если всё хорошо - положить в чулан как запасной к вашему серверу.
:smile:

Re: Gmirror trouble

Добавлено: 2009-12-10 14:38:19
shroo0m
Если сервер- тазик, собранный из дешевого железа, позиционируемого производителем, как офисное, то это скорее всего контроллер жестких дисков, встроенный в материнку. С объемистыми дисками они имеют свойство глючить жестоко Юзайте внешние (любой, даже дешевый, просто как "дырка для жестака", подойдет). Это не дефект. Ответ на вопрос "почему" вот: размечталися о серверной материнке за 2-3 тысячи рублев=). Не бывает таких.

Re: Gmirror trouble

Добавлено: 2009-12-12 4:48:07
Overseer
Dimon5 писал(а): После этого выполнил

Код: Выделить всё

gmirror insert gm0 ad16
После этого Выбивает следующую ошибку:

Код: Выделить всё

gmirror: Cannot store metadata on ad16.
sysctl kern.geom.debugflags=16
gmirror insert gm0 ad16

а так?

Re: Gmirror trouble

Добавлено: 2009-12-12 10:46:27
shroo0m
попробуй убить метаданные на диске и пересобрать с нуля зеркало

Re: Gmirror trouble

Добавлено: 2009-12-12 22:12:01
Alex Keda
иногда требуется ребут, или нетривиальные дейсвия по записи метаданных на диск с помощью dd и удалениия их оттуда штатными средствами
в /var/log/messages смотрите. там есть причина для всего.