В предыдущей статье шла речь о мониторинге физических дисков под LSI 2108 Megaraid контроллером. Теперь хочу навести инструкцию по мониторингу физических дисков под Hewlett-Packard Company Smart Array контроллером под дистрибутивом Ubuntu 12.04. Эта инструкция подойдет под любой дистрибутив линукс, отличается только процесс установки утилиты мониторинга hpacucli.
Мониторинг дисков используя hpacucli
Для начала убедимся, что у нас HP контроллер. Для этого есть очень удобный и распространенный способ – просмотр имеющихся pci-устройств командой lspci.
root@s02:~# lspci | grep -i RAID 04:00.0 RAID bus controller: Hewlett-Packard Company Smart Array G6 controllers (rev 01)
Так же признаком HP-raid контроллера есть наличие символьного устройства hpilo.
root@s02:~# cat /proc/devices | grep hp 250 hpilo
Так же можно воспользоваться утилитами smartctl и lshw чтобы узнать тип подключенных дисков, но это не многообещающий вывод. Он только даст нам направление, в котором нужно копать.
root@s02:~# smartctl -i /dev/sda smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.8.0-26-generic] (local build) Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net Vendor: HP Product: LOGICAL VOLUME Revision: 5.70 User Capacity: 600,093,712,384 bytes [600 GB] Logical block size: 512 bytes Logical Unit id: 0x600508b1001c5aac8a914351b4dead47 Serial number: 50123456789ABCDE Device type: disk Local Time is: Mon Mar 3 20:23:12 2014 IST Device does not support SMART root@s02:~# lshw -c disk *-disk:0 description: SCSI Disk product: LOGICAL VOLUME vendor: HP physical id: 0.0.1 bus info: scsi@0:0.0.1 logical name: /dev/sda version: 5.70 serial: 50123456789ABCDE size: 558GiB (600GB) capabilities: 15000rpm partitioned partitioned:dos configuration: ansiversion=5 signature=000b5306 *-disk:1 description: SCSI Disk product: LOGICAL VOLUME vendor: HP physical id: 0.0.0 bus info: scsi@0:0.0.0 logical name: /dev/sdb version: 5.70 serial: 50123456789ABCDE size: 279GiB (299GB) capabilities: 15000rpm partitioned partitioned:dos configuration: ansiversion=5 signature=000ab3ca *-disk:2 description: SCSI Disk product: LOGICAL VOLUME vendor: HP physical id: 0.0.2 bus info: scsi@0:0.0.2 logical name: /dev/sdc version: 5.70 serial: 50123456789ABCDE size: 1676GiB (1800GB) capabilities: 15000rpm partitioned partitioned:dos configuration: ansiversion=5 signature=0003c4be
После того, как мы убедились в наличии HP/Compaq Smart Array Controller — первым делом установим специализированную (заточенную под HP рейд контроллеры) утилиту hpacucli.
echo 'deb http://hwraid.le-vert.net/ubuntu precise main' > /etc/apt/sources.list.d/raid.list wget -O - http://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.key | sudo apt-key add - apt-get update apt-get install hpacucli
Теперь проверяем работу утилиты. Для начала посмотрим конфигурацию контроллера.
root@s02:~#hpacucli ctrl all show config Smart Array P410i in Slot 0 (Embedded) (sn: 50123456789ABCDE) array A (SAS, Unused Space: 0 MB) logicaldrive 1 (279.4 GB, RAID 1, OK) physicaldrive 1I:1:1 (port 1I:box 1:bay 1, SAS, 300 GB, OK) physicaldrive 1I:1:2 (port 1I:box 1:bay 2, SAS, 300 GB, OK) array B (SAS, Unused Space: 0 MB) logicaldrive 2 (558.9 GB, RAID 1, OK) physicaldrive 1I:1:3 (port 1I:box 1:bay 3, SAS, 600 GB, OK) physicaldrive 1I:1:4 (port 1I:box 1:bay 4, SAS, 600 GB, OK) array C (SAS, Unused Space: 0 MB) logicaldrive 3 (1.6 TB, RAID 5, OK) physicaldrive 2I:1:5 (port 2I:box 1:bay 5, SAS, 600 GB, OK) physicaldrive 2I:1:6 (port 2I:box 1:bay 6, SAS, 600 GB, OK) physicaldrive 2I:1:7 (port 2I:box 1:bay 7, SAS, 600 GB, OK) physicaldrive 2I:1:8 (port 2I:box 1:bay 8, SAS, 600 GB, OK) SEP (Vendor ID PMCSIERA, Model SRC 8x6G) 250 (WWID: 50123456789ABCED)
Как видим, у нас есть три логических диска, которые являют собой два RAID1 и один RAID 5. В первых два рейда входит по два физических диска, в третий – 4 физических диска. Контроллер подключен к слоту с номером 0 (Slot 0). Команда hpacucli может и не найти ни единого контроллера, даже если он действительно подключен и нормально работает. Если вы столкнулись с такой проблемой…
root@s02:~#hpacucli ctrl all show config Error: No controllers detected.
… и при этом вы точно уверены в том, что у вас HP контроллер – нужно установить дополнительную утилиту uname26. Дело в том, что некоторые программы заточены под ядро 2.6, и их нужно запускать в режиме совместимости с ядрами 3.0 и выше. hpacucli утилита не исключение и для корректной работы (в отдельных случаях) ее нужно запускать в режиме совместимости (в контексте ядра 2.6). Для этого качаем утилиту uname26 и компилируем.
wget http://mirror.linux.org.au/linux/kernel/people/ak/uname26/uname26.c gcc -o uname26 uname26.c
Теперь запускаем нашу команду в контексте 2.6 ярда.
root@s02:~/test# ./uname26 hpacucli ctrl all show config Smart Array P410i in Slot 0 (Embedded) (sn: 50123456789ABCDE) array A (SAS, Unused Space: 0 MB) logicaldrive 1 (279.4 GB, RAID 1, OK) physicaldrive 1I:1:1 (port 1I:box 1:bay 1, SAS, 300 GB, OK) physicaldrive 1I:1:2 (port 1I:box 1:bay 2, SAS, 300 GB, OK) array B (SAS, Unused Space: 0 MB) logicaldrive 2 (558.9 GB, RAID 1, OK) physicaldrive 1I:1:3 (port 1I:box 1:bay 3, SAS, 600 GB, OK) physicaldrive 1I:1:4 (port 1I:box 1:bay 4, SAS, 600 GB, OK) array C (SAS, Unused Space: 0 MB) logicaldrive 3 (1.6 TB, RAID 5, OK) physicaldrive 2I:1:5 (port 2I:box 1:bay 5, SAS, 600 GB, OK) physicaldrive 2I:1:6 (port 2I:box 1:bay 6, SAS, 600 GB, OK) physicaldrive 2I:1:7 (port 2I:box 1:bay 7, SAS, 600 GB, OK) physicaldrive 2I:1:8 (port 2I:box 1:bay 8, SAS, 600 GB, OK) SEP (Vendor ID PMCSIERA, Model SRC 8x6G) 250 (WWID: 50123456789ABCED)
Проблема решена. Если по прежнему осталась — попробуйте установить самую последнюю версию программы.
#echo "deb http://downloads.linux.hp.com/SDR/downloads/MCP/ubuntu precise/current non-free" >> /etc/apt/sources.list.d/hp.list #wget -qO - http://downloads.linux.hp.com/SDR/downloads/MCP/GPG-KEY-mcp | sudo apt-key add - #apt-get update #apt-get install hpacucli
С этого вывода мы можем наблюдать статусы логических и физических дисков, но, как мы знаем, еще нужно мониторить статус батареи (BBU), статус контроллера и статус рейда. Для этого используем детальный вывод и словим статус контроллера и батареи.
root@s02:~# hpacucli ctrl all show config detail | grep -E "(Controller Status|Battery/Capacitor Status)" Controller Status: OK Battery/Capacitor Status: OK
Теперь можно словить статус рейда.
root@s02:~# hpacucli ctrl all show config detail | grep -A3 Array: Array: A Interface Type: SAS Unused Space: 0 MB Status: OK -- Array: B Interface Type: SAS Unused Space: 0 MB Status: OK -- Array: C Interface Type: SAS Unused Space: 0
Всю нужную информацию мы получили. Можно также написать маленький скрипт, который будет нам выводить общий статус здоровья дисков под HP/Compaq Smart Array Controller.
root@s02:~# cat hpraid.sh #!/bin/bash ERROR_COUNT=0 get_status() { if [ -z "$1" -o -z "$2" ]; then echo "Couldn't parse hpacucli output" else case "$2" in "array") device_type='array'; regex='array [a-Z]' ;; "ld") device_type='logicaldrive'; regex='logicaldrive [0-9]' ;; "pd") device_type='physicaldrive'; regex='physicaldrive [0-9][a-Z]:[0-9]:[0-9]' ;; esac while read device_id do status=`hpacucli ctrl slot=$1 $device_id show status | grep -oP '(?<=: ).*'` #echo "$device_id, Status: $status" if [ "$status" != "OK" ] then failed_item="${device_type}=${device_id}\n${failed_item}" let "ERROR_COUNT += 1" fi done < <(hpacucli ctrl slot=$1 $device_type all show status | grep -Eo "$regex") fi } error_message() { echo -e "$1" | while read line do d_type=`echo $line | cut -d= -f1` d_id=`echo $line | cut -d= -f2-` case "$d_type" in "logicaldrive") hpacucli ctrl slot=0 $d_id show detail | grep -oE 'Disk Name:.*|Mount Points:.*' | sed ':a;N;$!ba;s/\n/<br>/g' echo '<br>===<br>' ;; "physicaldrive") hpacucli ctrl slot=0 $d_id show detail | grep -oE 'Status:.*|Serial Number:.*|Model:.*|Size:.*' | sed ':a;N;$!ba;s/\n/<br>/g' echo '<br>===<br>' ;; esac done } for slot in `hpacucli ctrl all show | awk '{ print $6 }'` do # Controller status controller_status=`hpacucli ctrl slot=${slot} show detail | grep -oP '(?<=Controller Status: ).*'` #echo "Slot: $slot, Controller Status: $controller_status" # Other devices status for device in array ld pd do get_status "$slot" "$device" done done if [[ -n $1 ]] && [ $1 == 'log' ] then error_message "$failed_item" else echo ${ERROR_COUNT} fi exit 0
Немного разъясню скрипт. Вначале я ловлю статусы всех контроллеров, рейдов, батареи, физических и логических дисков. Очевидно, что если с ними нет проблем, то последние два символа каждой словленной строки – «ОК». Таким образом, была написана функция read_stat, которая выводит последние два символа строки состояния каждого элемента (т.е. слово «ОК»), и если эти символы не совпадают с «ОК» — проблема с одним из элементов, следовательно, ловим эту ошибку и увеличиваем счетчик на 1. Чтобы увидеть лог ошибок – скрипт нужно запустить с аргументом log.
root@s02:~#./hpraid.sh 0 root@s02:~#./hpraid.sh log
Как видим, проблем с HP контроллером нет. Теперь запустим скрипт на сервере, где есть проблема.
root@s14:~# ./hpraid.sh 3 root@s14: ~# ./hpraid.sh log Status: Failed Size: 60 GB Serial Number: FED10759099902589732 Model: ATA Patriot Blaze === Disk Name: /dev/sdb Mount Points: /var/lib/mysql 55.9 GB ===
Список полезные команд для проверки дисков под CCISS (HP/Compaq Smart Array Controller) контроллером используя утилиту hpacucli.
# Краткая информация об контроллере hpacucli ctrl all show config # Полная информация об контроллере hpacucli ctrl all show config detail # Показать статус кеша, контроллера и батареи hpacucli ctrl all show status # Выключить/включить кэш hpacucli ctrl slot=0 modify dwc=disable hpacucli ctrl slot=0 modify dwc=enable # Просканировать на новые устройства (добавленные) hpacucli rescan # Краткая информация о физических дисках hpacucli ctrl slot=0 pd all show # Полная информация о конкретном физическом диском hpacucli ctrl slot=0 pd 2:3 show detail # Статус всех физических дисков hpacucli ctrl slot=0 pd all show status # Статус конкретного диска hpacucli ctrl slot=0 pd 2:3 show status # Стереть физический диск hpacucli ctrl slot=0 pd 2:3 modify erase # Включить/отключить индикатор на физическом диске hpacucli ctrl slot=0 pd 2:3 modify led=on hpacucli ctrl slot=0 pd 2:3 modify led=off # Полная информация о всех логических дисках hpacucli ctrl slot=0 ld all show # Полная информация о конкретном логическом диске hpacucli ctrl slot=0 ld 4 show # Статус всех логических дисков hpacucli ctrl slot=0 ld all show status # Статус конкретного логического диска hpacucli ctrl slot=0 ld 4 show status # Реактивация логического диска после изменений hpacucli ctrl slot=0 ld 4 modify reenable forced # Создание логического диска с RAID 0 включающего один физический диск hpacucli ctrl slot=0 create type=ld drives=1:12 raid=0 # Создание логического диска с RAID 1 с двух физических дисков hpacucli ctrl slot=0 create type=ld drives=1:13,1:14 size=300 raid=1 # Создание логического диска с RAID 5 с пяти физических дисков hpacucli ctrl slot=0 create type=ld drives=1:13,1:14,1:15,1:16,1:17 raid=5 # Удалить логический диск hpacucli ctrl slot=0 ld 4 delete # Добавление дополнительного физического диска к логическому hpacucli ctrl slot=0 ld 4 add drives=2:3 # Увеличение размера логического диска, после добавление нового физического hpacucli ctrl slot=0 ld 4 modify size=500 forced # Добавление двух запасных дисков hpacucli ctrl slot=0 array all add spares=1:5,1:7
Замена BBU для Write Back cache
Что такое Write Back cache я уже объяснял в предыдущих статьях. К примеру, в megaraid контроллерах политика записи на диск может включаться для отдельного виртуального диска, в HP рейдах, она включается для всего контроллера. Что нам нужно сделать, это заменить (или убедиться что работает) BBU и включить. Проверяем что у нас на данный момент.
root@il-nv-s01:~# hpacucli ctrl all show config detail | grep -E "(Drive Write Cache|Total Cache Size|No-Battery Write Cache|Battery/Capacitor Count|Battery/Capacitor Status)" Drive Write Cache: Disabled Total Cache Size: 512 MB No-Battery Write Cache: Disabled Battery/Capacitor Count: 1 Battery/Capacitor Status: OK
Как видим, кэш выключен, но с BBU все в порядке, по этому можно свободно включить политику кэширования.
root@il-nv-s01:~# hpacucli ctrl slot=0 modify dwc=enable Warning: Without the proper safety precautions, use of write cache on physical drives could cause data loss in the event of power failure. To ensure data is properly protected, use redundant power supplies and Uninterruptible Power Supplies. Also, if you have multiple storage enclosures, all data should be mirrored across them. Use of this feature is not recommended unless these precautions are followed. Continue? (y/n) y
И проверяем статус после.
root@il-nv-s01:~# hpacucli ctrl all show config detail | grep -E "(Drive Write Cache|Total Cache Size|No-Battery Write Cache|Battery/Capacitor Count|Battery/Capacitor Status)" Drive Write Cache: Enabled Total Cache Size: 512 MB No-Battery Write Cache: Disabled Battery/Capacitor Count: 1 Battery/Capacitor Status: OK
Вот, в принципе, и все.
Мониторинг дисков используя smartctl
Так же можно использовать smartctl для мониторинга дисков за HP/Compaq Smart Array контроллером. У нас есть 8 физических дисков. Поэтому можно запустить проверку всех параметров первых 8-ми дисков задав тип устройства CCISS (HP/Compaq Smart Array Controller). На практики, тип логического устройства не имеет никакого значения ТОЛЬКО для HP контроллеров под дистрибутивом Ubuntu 12.04. На остальных такой зависимости не проверял, так что сначала проверьте или совпадает модель физического диска при разных комбинациях логических устройств. К примеру
root@02:~# smartctl -i -d cciss,0 /dev/sda | grep "Serial number:" Serial number: S0K058TJ root@02:~# smartctl -i -d cciss,0 /dev/sdb | grep "Serial number:" Serial number: S0K058TJ root@02:~# smartctl -i -d cciss,0 /dev/sdc | grep "Serial number:" Serial number: S0K058TJ
Как видим при смене логического устройства(sda, sdb, sdc), но при неизменном порте устройства (cciss,0) – мы получаем информацию об одном и том же устройстве. Так что можно смело запускать скрипт такого типа, для проверки состояния дисков.
root@s02:~# cat smart.sh #!/bin/bash for port in {0..7} do smartctl -a -d cciss,$port /dev/sda done
Мониторинг дисков используя smartd
Предыдущие способы мониторинга дисков были ручными, т.е. нужно вручную запускать проверку дисков находясь на конкретном сервере, или же настроить систему мониторинга, которая будет использовать написанные выше скрипты для сбора информации о состоянии дисков. Но есть еще один способ мониторинга — это использование демона smartd, который будет отправлять нам письма о проблемных дисках. Детально о настройках демона smartd можно почитать здесь
Для начала добавим демон в автозагрузку.
root@s02:~# cat /etc/default/smartmontools start_smartd=yes smartd_opts="--interval=3600"
Так же было добавлено интервал запуска проверок. Далее нам нужно добавить диски на мониторинг, для чего служит файл smartd.conf.
root@s02:~# cat /etc/smartd.conf #Диски, которые нужно мониторить /dev/sda -d cciss,0 -o on -S on -m your@emailaddress.com -M diminishing -a -s (S/../.././00|L/../../7/03) /dev/sda -d cciss,1 -o on -S on -m your@emailaddress.com -M diminishing -a -s (S/../.././00|L/../../7/03) /dev/sda -d cciss,2 -o on -S on -m your@emailaddress.com -M diminishing -a -s (S/../.././00|L/../../7/03) /dev/sda -d cciss,3 -o on -S on -m your@emailaddress.com -M diminishing -a -s (S/../.././00|L/../../7/03) /dev/sdа -d cciss,4 -o on -S on -m your@emailaddress.com -M diminishing -a -s (S/../.././00|L/../../7/03) /dev/sdа -d cciss,5 -o on -S on -m your@emailaddress.com -M diminishing -a -s (S/../.././00|L/../../7/03) /dev/sdа -d cciss,6 -o on -S on -m your@emailaddress.com -M diminishing -a -s (S/../.././00|L/../../7/03) /dev/sdа -d cciss,7 -o on -S on -m your@emailaddress.com -M diminishing -a -s (S/../.././00|L/../../7/03) root@s02:~# /etc/init.d/smartd restart
Немного расшифрую вывод. Для все дисков включено запуск офлайн тестов (-o on) для обновление и сохранения значений атрибутов (-S on). Так же добавлена проверка всех текущих параметров (-а) и назначено запуск дополнительных коротких тестов каждый день в полночь (S/../.././00) и долгих тестов каждое воскресенье с 3 часов ночи (L/../../7/03). Если будет проблема хотя бы с одной из метрик — будет отправлено письмо на соответствующий адрес (-m your@emailaddress.com). При этом, письма будут отправляться систематически — 1,2,4,8,16,… дни (-M diminishing), пока проблема не будет устранена.
В следующей статье пойдет речь о настройке монитороинга дисков за Adaptec AACRaid контроллером
Помоему тут стоит уделить внимание еще одной утилите доступной в репозитариях (Debian, Ubuntu…) — cciss_vol_status
Тоже подойдет, но обрезанный функционал.