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

Тестирование Raid-1 с помощью atacontrol

Автор: AlkoGekS.


Предупреждаю сразу, статья не моя, а Николая Солонина(в хендбуке нечто похожее, но не так подробно рссмотрено), но так как у него были некоторые неточности, я взялся переделать ее немного, так сказать по собственному опыту.
На работе мне была поставлена задача, собрать сервер на FreeBSD с массивом "чтоб диски дублировали друг друга (с) босс" :)
Вобщем собрал сервер, приступил к установке самой ОС, но так как я массивами не работал, погуглил на эту тему, типа "что да как". Создал массив raid1, все как положено. В процессе установки замялся на месте выбора девайсов, куда ставить.
В списке были:

 +-------------------------- Select Drive(s) -----------------------------+
 ¦ Please select the drive, or drives, on which you wish to perform       ¦
 ¦ this operation.  If you are attempting to install a boot partition     ¦
 ¦ on a drive other than the first one or have multiple operating         ¦
 ¦ systems on your machine, you will have the option to install a boot    ¦
 ¦ manager later.  To select a drive, use the arrow keys to move to it    ¦
 ¦ and press [SPACE] or [ENTER].  To de-select it, press it again.        ¦
 ¦                                                                        ¦
 ¦ Use [TAB] to get to the buttons and leave this menu.                   ¦
 ¦ +--------------------------------------------------------------------+ ¦
 ¦ ¦                          [ ] ad0  ad0                              ¦ ¦
 ¦ ¦                          [ ] ad1  ad1                              ¦ ¦
 ¦ ¦                          [X] ar0  ar0                              ¦ ¦
 ¦ +--------------------------------------------------------------------+ ¦
 +------------------------------------------------------------------------+
 ¦                         [  OK  ]    Cancel                             ¦
 +----[ Press F1 for important information regarding disk geometry! ]-----+

Подумав и полазив по инету, все же пришел к выводу что нужно спросить у Лиссяры, что собственно и сделал :)
По его совету поставил операционку на ar0.
Далее, пока сервер еще не установлен в стойку, захотелось протестить его, типа "а что же будет, если один хард прикажет долго жить".
Для начала посмотрим наши девайсы:
# atacontrol list
ATA channel 0:
    Master:      no device present
    Slave:       no device present
ATA channel 1:
    Master:      no device present
    Slave:       no device present
ATA channel 2:
    Master:  ad4 <ST380215AS/3.AAD> Serial ATA II
    Slave:       no device present
ATA channel 3:
    Master:  ad6 <ST380215AS/3.AAD> Serial ATA II
    Slave:       no device present
ATA channel 4:
    Master:      no device present
    Slave:       no device present
ATA channel 5:
    Master:      no device present
    Slave:       no device present
ATA channel 6:
    Master:      no device present
    Slave:       no device present
ATA channel 7:
    Master:      no device present
    Slave:       no device present

Ну и соответственно состояние самого массива:
# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: READY

Собстенно теперь отключаем один из хардов, можно из самой системы:
(Вот именно тут у Николая Солонина была неточность)
# atacontrol detach ata2

Диск выключен, можно проверить состояние массива:
# atacontrol status ar0
ar0: ATA RAID1 subdisks: DOWN ad6 status: DEGRADED

Как видим, остался один жесткий диск и целостность raid нарушена.
Подключим назад диск ad4. Для этого даем команду:
# atacontrol attach ata2
Master:  ad4 <ST380215AS/3.AAD> Serial ATA II
Slave:       no device present

Хоть жесткий диск подключился, но автоматически он естественно в массив не добавиться.
Придеться самим добавлять:
# atacontrol addspare ar0 ad4

Проверяем:
# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED

Диски в массиве, но зеркалирование не восстановлено, чтобы его восстановить пишем такую команду:
# atacontrol rebuild ar0

Процесс зеркалирования запущен. У меня ушло примерно 30 минут на восстановление зеркала.
Проверить состояние готовности можно так:
# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 68% completed

После окончания смотрим что получилось:
# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: READY

Ну и напоследок, для контроля состояния массива можно отправлять письма на какой-нибудь е-майл кадое утро к примеру:
0 8 * * * root atacontrol status ar0 | mail -s "server1 RAID status" mymail@me.com

P.S. В большей степени это заметка, чем статья, ИМХО :)



размещено: 2007-11-11,
последнее обновление: 2007-11-12,
автор: AlkoGekS


Tantra, 2007-11-11 в 19:46:43

Какая же актуальная статья! :) Пасип.. )

serge, 2007-11-12 в 8:24:34

Имхо более правильней контролировать так:
schtep# cat /etc/periodic.conf | grep ata                                                                                                      /home/serge
# 405.status-ata_raid
daily_status_ata_raid_enable="YES"                       # Check ATA raid status

Omega, 2007-11-12 в 10:27:16

Таким способом можно создавать рейд с ОС даже если она была установлена на обычный диск

Omega, 2007-11-12 в 10:30:43

Спс за статью

Alex, 2007-11-12 в 11:31:52

Ну и до кучи для полноты добавить про camcontrol...

lisergey, 2007-11-28 в 21:41:51

опробовал на реальном железном сервере сделать описанное, благо были два винта в hot-swap корзинах.

так вот, при выдергивании mirror-винта, все работало как и предполагалось.
а при выдергивании master-винта в зеркале начинались косяки.

1) # atacontrol status ar0
ar0: ATA RAID1 status: DEGRADED
subdisks:
  0 --— MISSING
  1 ad6  ONLINE

#atacontrol addspare ar0 ad4
atacontrol: ioctl(IOCATARAIDADDSPARE): Device busy

описанный "финт ушами" не помогал
# atacontrol detach ata2
# atacontrol attach ata2
Master:  ad4 <ST3160815AS/3.AAA> Serial ATA II
Slave:       no device present
# atacontrol addspare ar0 ad4
atacontrol: ioctl(IOCATARAIDADDSPARE): Device busy

далее пробовал
# atacontrol attach ata2
atacontrol: ioctl(IOCATAATTACH): File exists
# atacontrol reinit ata2
Master:  ad4 <ST3160815AS/3.AAA> Serial ATA II
Slave:       no device present
# atacontrol addspare ar0 ad4
atacontrol: ioctl(IOCATARAIDADDSPARE): Device busy

после перезагрузки случилась бяка:
Nov 28 21:13:43 hermes kernel: ad4: 152627MB <Seagate ST3160815AS 3.AAA> at ata2-master SATA300
Nov 28 21:13:43 hermes kernel: ad6: 152627MB <Seagate ST3160815AS 3.AAA> at ata3-master SATA300
Nov 28 21:13:43 hermes kernel: ar0: WARNING - mirror protection lost. RAID1 array in DEGRADED mode
Nov 28 21:13:43 hermes kernel: ar0: 152627MB <Intel MatrixRAID RAID1> status: DEGRADED
Nov 28 21:13:43 hermes kernel: ar0: disk0 READY (master) using ad4 at ata2-master
Nov 28 21:13:43 hermes kernel: ar0: disk1 DOWN no device found for this subdisk
Nov 28 21:13:43 hermes kernel: ar1: WARNING - mirror protection lost. RAID1 array in DEGRADED mode
Nov 28 21:13:43 hermes kernel: ar1: 152627MB <Intel MatrixRAID RAID1> status: DEGRADED
Nov 28 21:13:43 hermes kernel: ar1: disk0 DOWN no device found for this subdisk
Nov 28 21:13:43 hermes kernel: ar1: disk1 READY (mirror) using ad6 at ata3-master
Nov 28 21:13:43 hermes kernel: SMP: AP CPU #1 Launched!
Nov 28 21:13:43 hermes kernel: Trying to mount root from ufs:/dev/ar0s1a

фря 6.3-prerelease отругалсь, что файловая система была неправильно отмонтирована

Nov 28 21:13:43 hermes kernel: WARNING: / was not properly dismounted
Nov 28 21:13:43 hermes kernel: WARNING: /usr was not properly dismounted
Nov 28 21:13:43 hermes kernel: WARNING: /var was not properly dismounted
Nov 28 21:15:21 hermes fsck: /dev/ar0s1d: 132456 files, 827511 used, 3233552 free (15424 frags, 402266 blocks, 0.4% fragmentation)
Nov 28 21:18:13 hermes fsck: /dev/ar0s1e: 113 files, 144 used, 70607089 free (153 frags, 8825867 blocks, 0.0% fragmentation)

и самое главное:
# atacontrol status ar0
ar0: ATA RAID1 status: DEGRADED
subdisks:
  0 ad4  ONLINE
  1 --— MISSING

хотя я выдергивал ad4...
то есть это ну совсем неправильно.
вот если бы загрузился с ad6, то наверное было все чисто, но ктож знал...

как это победить, пока не знаю

AlkoGekS, 2007-12-05 в 17:51:48

lisergey >>> Может это косяк 6.3 какой-нить? Я оба харда тестил поочереди, все нормально.
Omega >>> Мне интересно как ты это сделаешь. Фря ставится на массив изначально... как ты потом массив собрался запихнуть туда, понятия не имею.

lisergey, 2007-12-06 в 0:41:11

врядли 6.3
времени тестить на 6.2 уже не было, начал ставить на первый винт.
ты как тестил - реально винты выдергивал или через atacontrol detach?

как с одного винта перенести все на массив, хорошо описано тут
http://www.opennet.ru/tips/info/896.shtml
проверял - работает.

AlkoGekS, 2007-12-10 в 17:39:46

Я и детачил оба харда и питание выдергивал с обоих, все нормально работает и по сей день. тьфу тьфу тьфу :)

lisergey, 2007-12-10 в 18:45:36

я просто выдергивал хот-свопные корзины с винтами.

а ты - сначал детач и потом питание?
или сразу питание, без предварительного детача?

что у тебя за контроллер был где все прошло пучком?
у меня
atapci0: <Intel ICH7 UDMA100 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0x3420-0x342f at device 31.1 on pci0
ata0: <ATA channel 0> on atapci0
ata1: <ATA channel 1> on atapci0
atapci1: <Intel ICH7 SATA300 controller> port 0x3440-0x3447,0x3434-0x3437,0x3438-0x343f,0x3430-0x3433,0x3400-0x341f mem 0xfd000400-0xfd0007ff irq 19 at device 31.2 on
pci0
atapci1: AHCI Version 01.10 controller with 4 ports detected
...
ad4: 152627MB <Seagate ST3160815AS 3.AAA> at ata2-master SATA300
ad6: 152627MB <Seagate ST3160815AS 3.AAA> at ata3-master SATA300

AlkoGekS, 2007-12-12 в 14:52:44

У меня стандартный, тот что в материнке... не помню название...matrix помоему

AlkoGekS, 2008-01-24 в 15:06:36

У меня вот такой:
atapci0: <Intel ICH8 SATA300 controller> port 0xcc00-0xcc07,0xc880-0xc883,0xc800-0xc807,0xc480-0xc483,0xc400-0xc41f mem 0xfe9fa800-0xfe9fafff irq 19 at device 31.2 on pci0
atapci0: AHCI Version 01.10 controller with 6 ports detected
...
ad4: 76319MB <Seagate ST380215AS 3.AAD> at ata2-master SATA300
ad6: 76319MB <Seagate ST380215AS 3.AAD> at ata3-master SATA300
ar0: 76316MB <Intel MatrixRAID RAID1> status: READY
ar0: disk0 READY (master) using ad4 at ata2-master
ar0: disk1 READY (mirror) using ad6 at ata3-master

KrivoSoft, 2008-02-13 в 17:26:01

to lisergey
Касаемо "бяки" в виде двух DEGRADED масивов ar0&ar1 после разваливания масива: это скорее не глюк, а фича :-)
Наблюдалось и на 6.2 и на 7й бете.
Главное западло этой фичи - это например когда выпадает первый диск, до перезагрузки машина работает на втором, а вот после перезагрузки из первого (ранее выпавшего диска) получается ar0, а с 2го (на котором пилили до перезагрузки) получается масив ar1.
Но собсвенно западло получается в том что при старте монтируются ФС с ar0 указанные в fstab - т.е. посути это ранее выпавший мастер-диск. А диск с актуальными данными в это время курит бамбук :-(
Ессно на машинах где данные меняются не часто трагедии в этом нет, а вот в других случаях есть риск получить такую кашу на двух дисках, что засинхронизировать ЭТО не сможет никто :-(
И еще касаемо рейдов забабаханых атаконтролом:
при одновременной записи на масив (dd, 1m блоками) в несколько (~3-5) потоков эти рейды сыпались на 80% аппаратных конфигураций, при заведомо целом и рабочем железе. Так что ИМХО не рекомендовано юзание сего при значительных нагрузках на дисковую подсистему.

Грозный Ламер, 2008-02-13 в 22:49:13

lisergey
KrivoSoft
Возможно эта фича вызвана отключенной опцией компиляции ядра ATA_STATIC_ID - статическая нумерация устройств
( http://www.lissyara.su/?id=1072 ).
Вот несколько более подробное описание этого момента:
http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/install-steps.html
-
Автору и редактору огромное спасибо за столь ценные материалы и личный опыт на доступном языке. Благодаря им мне стало намного легче осваивать эту систему. :)

lisergey, 2008-02-14 в 0:31:01

у меня в ядрах была эта опция
options ATA_STATIC_ID      # Static device numbering

насчет того что после перезагрузки система грузит систему с выпавшего диска, а не с живого второго диска с акутальными данными - это у меня было, и любые танцы с бубном вокруг атаконтрола не помогали.

методом тыка нашел такой способ - после "умирания" первого винта (если дох второй, то все проходило безболезненно по мануалу):
1) atacontrol detach дохлый винт
2) atacontrol delete array ar0
3) правим /etc/fstab так чтобы загрузиться со второго "живого" винта на котором актуальные данные
4) гасим комп, выкручиваем дохлый винт и ставим живой
5) грузимся как обычно, система поднимается в одно-дисковом режиме со второго винта, и дальше строим массив по статье
с опеннет

имхо, такая схема слишком муторная, и сильно зависит от того, чтобы до перетыкания винтов не было перегрузов (что невозможно гарантировать, даже при наличии УПСов - у нас в Ростове иногда эл-во гасят на 2-3 часа в офисах)

я сильно сомневаюсь в том, что ar0 + ar1 - это реальная фича, а не бага.
кстати, я не встречал в мануале по эту особенность ни одного упоминания, что в случае "фичи" довольно странно.

lisergey, 2008-02-14 в 0:43:32

забыл добавить, что в случае выхода из строя первого винта в массиве, перемена винтов местами (здоровый винт - на канал где был больной винт, и а на его место - винт-замену) приводит к тому, что атаконтрол видит здоровый винт по месту сдохшего, но все равно считает его как миррор-диск.

изза этого если комп грузить с подключенным диском-заменой, то получаем кучу ругани и панику ядра.

KrivoSoft, 2008-02-14 в 10:52:06

to Грозный Ламер
options ATA_STATIC_ID в ядре присутствует.

to lisergey
Касаемо проблем после перетыкания винтов - я с таким не сталкивался. При установке любого диска с зеркала в любую систему ядро всегда находило масив, и нормально стартовало систему. Зависимостей от месторасположения дисков распавшегося рейда лично я не наблюдал. Хз, может везло :-)

Касаемо восстановления фунциклирования зеркала после разваливания и получения после ребута двух масивов - решал немного проще.
Если загрузились с неактуального ar0 - просто убивал этот масив, и ребутал машину. При целом загрузчике ОС начинала стартовать с бывшего Мастер-диска, находила масив ar0 (тот что после разваливания получился ar1) и нормально монтировала файловые системы с ar0 при том же самом fstab.
Ну и после старта добавляем уже свободный 1й диск в зеркало, и ребилдим масив.
Сие удавалось выполнять удаленно по ссш, единое что нужен человек на месте который нажмет резет после удаления неактуального ar0(т.к. нормально перезапустить ос ввиду отсутствия файловых систем уже не получится).

tm1, 2008-03-12 в 16:53:05

Ну теоретически можно было на рамдиск перегнать необходимые утилиты для перезагрузки ... ну а дальше ребут по SSH

Krivosoft, 2008-03-12 в 17:06:07

Ну про это же надо было сначала подумать :-)
Если бы точно знать что ресет нажать по месту некому - тогда да, а так....

Andrei, 2008-07-16 в 16:47:02

 А не лучше было бы создать RAID 1 c помощью gmirror? Хорошая скорость, нормальная надежность, не зависит от железа,что очень важно при переносе сервера на другую материнскую плату.

Nik, 2008-08-09 в 0:45:02

По поводу atacontrol и двух массивов возникших автоматически:
- После того как диск отвалился и массив стал DEGRADE, на том винте который выпал данные корявые, винт будет в   непонятном состоянии до перезагрузки и автоматически массив ar1 не создастся,проверено. В ходе обратного впихивания уже заведомо "битого"(может вы его сами detach сделали) винта при attache, я так понял что не правильных действиях возникает паника и все перегружается. Вот при загрузке и создаются два массива ar0(в котором данные с диса ata0) и вновь созданный массив ar1(в котором данные с диска ata1)(ну либо наоборот я про ata в зависимости в какой шине у вас повежденнй диск).
-После возникновения DEGRAD необходимо выяснить что по чем, система то не упала, вс в работе, посто выпал диск. Можно откусить его от райд и разными утилитами поюзать, выяснить что с ним и т.д. Потом если в этом есть необходимость исправить fstab, если есть необходимось все же гружиться с ошибочного диска. А потом впеед. Меняйте грузите и делайте с диском все что душе будет угодно !
Я так понял идеологию. Имеено отсюда и возникают два массива при перезагрузки системы. потому как система не может включить заведомо неисправный рейд в работу. Вам отдано принять решение какие данный более актуальны с них и грузитесь! Ну а всяиеании это конечно баг.

Nik, 2008-08-09 в 0:47:27

Ну а всякие паники это конечно баг! Извиняюсь клава плоха!

gp, 2008-10-21 в 12:29:10


Решил отключить ata14 после чего при загрузки вовсе не загружается
======================================================

# atacontrol list
ATA channel 5:
   Master:      no device present
   Slave:  acd0 <NEC CD-RW NR-9200A/1.01> ATA/ATAPI revision 0
ATA channel 6:
   Master: ad12 <ST3250410AS/3.AAC> Serial ATA v1.0
   Slave:       no device present
ATA channel 7:
   Master: ad14 <ST3250410AS/3.AAC> Serial ATA v1.0
   Slave:       no device present

[/home/srg]:# atacontrol status ar0
ar0: ATA RAID0 stripesize=256 status: READY
subdisks:
  0 ad12 ONLINE
  1 ad14 ONLINE
:# atacontrol status ar0
ar0: ATA RAID0 stripesize=256 status: BROKEN
subdisks:
  0 ad12 ONLINE
  1 --— MISSING

          =========== DOWN =========

Sergafan, 2009-01-29 в 10:03:41

У меня такая же ботва происходит! status показывает одно, list и fstab другое! Это однозначно баг!!!

yeaa, 2009-02-07 в 6:32:06

по поводу -
#atacontrol addspare ar0 ad4
atacontrol: ioctl(IOCATARAIDADDSPARE): Device busy

у меня таже хрень, но замечено что заново приэтаченный винт почемуто поподал на ar1  проверено с помощью atacontrol status ar1  делаем
atacontrol remove ar1
после этого atacontrol addspare ar0 ad4
atacontrol rebuild ar0   проходят нормально райд ребилдится и переходит в рэди

yeaa, 2009-02-07 в 6:40:18

пардон  atacontrol delete ar1  конечно

miver, 2009-09-28 в 15:55:14

> yeaa
>у меня таже хрень, но замечено что заново приэтаченный винт >почемуто поподал на ar1

вот спасибо! я и не догадался посмотреть ar1
подобный глюк поймал на 7.1

Алеексагдр, 2009-12-07 в 19:27:22

Сегодня столкнулся с проблемой - "вылетел" один из дисков... система офф-лайн... пришлось решить какое же зеркало не совсем нужное и взамен него подставлять новый диск (причем каждый из дисков ad4 и 6 - по отдельности - работает в READY:) но вместе - один из них missing :)))) )

Ivan, 2011-11-29 в 15:24:14

Делал всё по статье. Но когда запускаешь
atacontrol rebuild ar0
Сервер просто ребутается, после чего raid всё в том же состоянии:

# atacontrol status ar0
ar0: ATA RAID1 status: DEGRADED
subdisks:
  0 ad4  ONLINE
  1 --— MISSING

___
Фря
8.2-RELEASE FreeBSD

melekhin, 2012-07-25 в 14:56:09

atacontrol list
ATA channel 0:
   Master:      no device present
   Slave:       no device present
ATA channel 1:
   Master:      no device present
   Slave:       no device present
ATA channel 2:
   Master:  ad4 <WDC WD1600AAJS-00PSA0/05.06H05> SATA revision 2.x
   Slave:       no device present
ATA channel 3:
   Master:  ad6 <WDC WD1600AAJS-00PSA0/05.06H05> SATA revision 2.x
   Slave:       no device present
ATA channel 4:
   Master:      no device present
   Slave:       no device present
ATA channel 5:
   Master:      no device present
   Slave:       no device present
ATA channel 6:
   Master:      no device present
   Slave:       no device present


atacontrol info ar0
atacontrol: Invalid channel ar0
root@ROUTER:/usr/home/mel # atacontrol status ar0
ar0: ATA RAID1 status: DEGRADED
subdisks:
  0 --— MISSING
  1 ad6  ONLINE

я сделал так

atacontrol reinit ata2
atacontrol addspare ad4
atacontrol rebuild ar0

заработало, FreeBSD 8.3



 

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.055 секунд
Из них PHP: 34%; SQL: 66%; Число SQL-запросов: 77 шт.
У Вас отключено GZIP-сжатие в браузере. Размер страницы 55172