Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Шелезяки —> HDD & UDMA100

Устранение ошибок при работе HDD в высокоскоростных режимах

Автор: lissyara.


    Возникла необходимость поставить на почтовый сервак "HDD Rack" - коробочку формата 5`25 для харда - чтобы можно было его вынуть, если приедут "маски-шоу" :) - ибо народ по почте привык кидать ценные документы, а в офисе imap - вся почта на сервере. Раки уже были, как раз был очередной налёт на офис - погасил сервак, поставил саму коробку. Менты уехали, поставил хард в салазки, воткнул в сервак (вообще на нём три харда - под систему, под файлопомойку и под раздел /var - его и примостил в салазки) хард. Разумеется всё завелось, но утром, в отчёте сервака были интересные строки:
mx.lissyara.su kernel log messages:
+++ /tmp/security.l44DM1B9 Sat May 13 03:02:47 2006
+ad2: WARNING - READ_DMA UDMA ICRC error (retrying request) LBA=53074623
+ad2: WARNING - READ_DMA UDMA ICRC error (retrying request) LBA=53074623
+ad2: FAILURE - READ_DMA status=51<READY,DSC,ERROR> error=84<ICRC,ABORTED> LBA=53074623
+g_vfs_done():ad2s1d[READ(offset=27174174720, length=49152)]error = 5

Первая мысль была - пока таскали хард с места на место - стукнули где-то... Ну и посыпался. Идеи с перегревом отпадали сразу - в серверной холодно, плюс у коробочки свой вентилятор для харда (хотя коробка пластмассовая - это конечно минус, на корпус тепло не уходит. При случае надо будет купить ляминевую и заменить - ибо деталь в ней отвественная). Посмотрел журнал событий - раньше такого не было, началось именно после установки рака... Решил протестить хард:
/usr/home/lissyara/>dd if=/dev/ad2 of=/dev/null bs=1m
dd: /dev/ad2: Input/output error
313+0 records in
313+0 records out
328204288 bytes transferred in 5.592864 secs (58682687 bytes/sec)
/usr/home/lissyara/>

Мдя. Но тут вспомнил устройство самой коробки - сопливенький шлейф, хреновые разъёмы... И мелькнула шальная мысль - может он вовсе и не UDMA133 как обещается в инструкции? Решил посмотреть инфу по харду:
/usr/home/lissyara/>atacontrol cap ad2

Protocol              ATA/ATAPI revision 6
device model          WDC WD800JB-00JJA0
serial number         WD-WCAM93738482
firmware revision     05.01C05
cylinders             16383
heads                 16
sectors/track         63
lba supported         156301488 sectors
lba48 not supported
dma supported
overlap not supported

Feature                      Support  Enable    Value           Vendor
write cache                    yes      yes
read ahead                     yes      yes
Tagged Command Queuing (TCQ)   no       no      0/0x00
SMART                          yes      no
microcode download             yes      yes
security                       yes      no
power management               yes      yes
advanced power management      no       no      0/0x00
automatic acoustic management  yes      no      254/0xFE        128/0x80
/usr/home/lissyara/>

Нихрена не нашёл списка поддерживаемых режимов. Поставил режим PIO:
/usr/home/lissyara/>atacontrol mode ad2 pio4
current mode = PIO4
/usr/home/lissyara/>

И начал бэкапить БД что там хранились. Через час всё было готово, никаких ошибок, но убивала скорость - около 6 мегабайт в секунду, и загрузка проца 100% - в основном прерываниями... Тогда решил оттестить все режимы UDMA - посмотреть, может на каком и заработает нормально:
/usr/home/lissyara/>atacontrol mode ad2 udma33
current mode = UDMA33
/usr/home/lissyara/>
/usr/home/lissyara/>dd if=/dev/ad2 of=/dev/null bs=1m
76319+1 records in
76319+1 records out
80026361856 bytes transferred in 2831.827350 secs (28259619 bytes/sec)
/usr/home/lissyara/>atacontrol mode ad2 udma66
current mode = UDMA66
/usr/home/lissyara/>
/usr/home/lissyara/>dd if=/dev/ad2 of=/dev/null bs=1m
76319+1 records in
76319+1 records out
80026361856 bytes transferred in 1602.992097 secs (49923117 bytes/sec)
/usr/home/lissyara/>atacontrol mode ad2 udma100
current mode = UDMA100
/usr/home/lissyara/>dd if=/dev/ad2 of=/dev/null bs=1m
dd: /dev/ad2: Input/output error
313+0 records in
313+0 records out
328204288 bytes transferred in 5.585376 secs (58761359 bytes/sec)
/usr/home/lissyara/>

Слетало на UDMA100 - т.е. виноват скорей всего не сам хард, а говёная коробка (хотя и винт не лучший - но тут уж не моя вина - коли начальство жмётся на новый сигейт, то приходится ставить что есть, предупреждая это самое начальство, что в случае поломок с меня ничё не спрашивайте). Порывшись в стартовых скриптах системы не нашёл штатного средства установки нужных скоростей дисков при загрузке. Добавил в один из своих скриптов такие строки:
# switch UDMA100 -> UDMA66 because problem at /dev/ad2
/sbin/atacontrol mode ad2 udma66

Ну и всё.

P.S. Статья вообще-то задумывалась про atacontrol, но ввиду того, что ещё не разобрался с рэйдами, что можно создавать с его помощью, это пока откладывается. Попозже. Когда разберусь.



размещено: 2006-05-13,
последнее обновление: 2006-05-13,
автор: lissyara


Toptyg, 2006-11-28 в 19:28:26

Чувак, +5 тебе супер статья.
//Вторая статья с сайта и все в точку)))
 

sickboy, 2007-01-25 в 11:59:11

Ага, отлично написано.
Но мне она не помогла, хотя проблема схожая

Alien, 2007-02-10 в 13:05:41

Синтаксис atacontrol немного другой, во FreeBSD 5.5 как  минимум. Например:
atacontrol cap 2 ad4
atacontrol mode 2 udma100 BIOSPIO,
то есть в коммандах требуется указывать номер канала.

Мне почему то не удалось поменять скорость винтов, видимо они не поддерживают ничего кроме UDMA150, т.к. SATA.

GhostMaster, 2007-05-15 в 23:43:25

Сталкивался с подобным но только в худших масштабах - стели слайсы с винта при работе в любом ДМА режиме даже на этапе загрузки. Накопал что драйвер переводится в PIO путем прописывания hw.ata.ata_dma="0" в /boot/loader.conf
Ну а дальше уже можно режим сменить любым скриптиком в процессе загрузки системы/

_Dron_, 2007-10-23 в 13:42:44

а узнать текущий режим можно при помощи
atacontrol mode ad0

Пожары, 2009-09-25 в 9:42:53

Лиссяра ! Ты как всегда лучший ! СПАСИБО !!!

Серега, 2011-02-23 в 10:25:34

Чувак, ты крут, как ты мне помог этой статьей =))) Давно тебя читаю кстати, ваще спс, слов нет )))))))



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.044 секунд
Из них PHP: 26%; SQL: 74%; Число SQL-запросов: 77 шт.
Исходный размер: 24538; Сжатая: 7289