Содержание

Дата написания: март 2018 г.
Автор: Graf

Работа с дисковым массивом HP


Установка

Используем Slackware Linux 14.2 64-bit без DE и всем, что с ними связанно, с обновлёнными пакетами при помощи slackpkg.

Скачиваем последнюю версию hpacucli. И так как это rpm-пакет, преобразовываем его в пакет Slackware и устанавливаем.

# wget https://mirror.nforce.com/pub/software/raidtools/hpacucli-tool/hpacucli-9.40-12.0.x86_64.rpm
# rpm2txz ./hpacucli-9.40-12.0.x86_64.rpm
# upgradepkg --install-new ./hpacucli-9.40-12.0.x86_64.txz

Скорее всего, после первого запуска hpacucli не обнаружит raid-контроллер. У меня не нашёл.

# hpacucli ctrl all show status

Error: No controllers detected.

Это значит не загружен модуль SCSI драйвера (SCSI generic (sg) driver). Загрузим его и снова посмотрим на наш контроллер.

# modprobe sg
# hpacucli ctrl all show status

Smart Array P410 in Slot 0
   Controller Status: OK
   Cache Status: Temporarily Disabled
   Battery/Capacitor Status: Failed (Replace Batteries/Capacitors)

Контроллер найден, можно продолжать с ним работать.
В дальнейшем, для автоматической загрузки модуля, можно в файле /etc/rc.d/rc.modules.local снять знак комментария со строки /sbin/modprobe sg или добавить её туда, при её отсутствии.

Использование в консоли

Для запуска консоли достаточно запустить hpacucli:

# hpacucli 
HP Array Configuration Utility CLI 9.40.12.0
Detecting Controllers...Done.
Type "help" for a list of supported commands.
Type "exit" to close the console.

=> 

далее вводим соответствующие команды и по завершении набираем exit для выхода из консоли. Полный список поддерживаемых команд можно получить набрав help в консоли hpacucli или непосредственно в терминале.

# hpacucli help 

Ниже приведена, слегка переделанная, таблица, взятая ЗДЕСЬ, с некоторыми командами.

Сокращения
Сокращения, которые можно использовать
в командах
 chassisname = ch
 controller = ctrl
 logicaldrive = ld
 physicaldrive = pd
 drivewritecache = dwc 
Управление контроллером дискового массива
Показать информацию (детально)
 ctrl all show config
 ctrl all show config detail 
Статус контроллера
 ctrl all show status 
Управление кэшированием
 ctrl slot=0 modify dwc=disable
 ctrl slot=0 modify dwc=enable 
Пересканировать устройства, добавленные
с момента последнего сканирования
 rescandetects newly added devices since the last rescan 
Управление физическими дисками в массиве
Показать информацию (детально)
 ctrl slot=0 pd all show
 ctrl slot=0 pd 2:3 show detail 

Можно указать определенный слот
для отображения информации только по определенному диску

Статус дисков
 ctrl slot=0 pd all show status
 ctrl slot=0 pd 2:3 show status 
Очистака
 ctrl slot=0 pd 2:3 modify erase 
Управление диодами на дисках
 ctrl slot=0 pd 2:3 modify led=on
 ctrl slot=0 pd 2:3 modify led=off 
Управление логическими дисками
Показать информацию (детально)
 ctrl slot=0 ld all show [detail]
 ctrl slot=0 ld 4 show [detail] 
Статус дисков
 ctrl slot=0 ld all show status
 ctrl slot=0 ld 4 show status 
Управление диодами на дисках
 ctrl slot=0 ld 4 modify led=on
 ctrl slot=0 ld 4 modify led=off 
Перезапустить «отказавшие» диски
 ctrl slot=0 ld 4 modify reenable forced 
Создание дисков логический диск
 ctrl slot=0 create type=ld drives=1:12 raid=0 

логический диск — чередование

 ctrl slot=0 create type=ld drives=1:13,1:14 size=300 raid=1 

логический диск — raid 5

 ctrl slot=0 create type=ld drives=1:13,1:14,1:15,1:16,1:17 raid=5 

где:
drivesконкретные диски, все диски (all drives) или неиспользуемые диски (unassigned drives)
sizeразмер логического диска в Мб
raidтип raid 0, 1, 1+0 и 5

Удаление
 ctrl slot=0 ld 4 delete 
Добавление дисков
 ctrl slot=0 ld 4 add drives=2:3 
Добавление дискового пространства (принудительно)
 ctrl slot=0 ld 4 modify size=500 forced 
Добавление резервного диска spare
 ctrl slot=0 array all add spares=1:5,1:7 

Отправка сообщения на e-mail при сбое

При создании скрипта обратите внимание на номер slot= и номера дисков выводимые hpacucli ctrl all show status и hpacucli ctrl slot=номер pd all show status

Создадим скрипт который будет проверять состояние дисков в массиве каждый час и в случае выхода одного из строя слать сообщение на e-mail адрес.
Но перед этим установим и настроим ssmtp в замен стокового sendmail при помощи которого будем отсылать сообщение на e-mail.

# sbopkg -i ssmtp
# /usr/sbin/generate_config /etc/ssmtp/ssmtp.conf
Please enter the mail name of your system.
This is the hostname portion of the address to be shown
on outgoing news and mail messages headers.
The default is srv1.mydom.lan, your system's host name.

Mail name [srv1.mydom.lan]: localhost
Please enter the SMTP port number [25]: 465

Please check the configuration file /etc/ssmtp/ssmtp.conf for correctness.

Переходим в каталог etc/ssmtp и заполним ssmtp.conf

# Пользователь, который получает всю почту для userids < 1000
root=postmaster

# Полное имя машины
hostname=localhost

# Поле From: будет выставляться самим smtp переписывая значение вводимое скриптами
FromLineOverride=YES

# Пользователь на smtp-сервере (от кого шлем почту)
AuthUser=fromserver@mydom.ru

# Пароль входа на smtp-сервер для пользователя указанного в AuthUser
AuthPass=passwordforlogin

# Адрес и порт smtp-сервера
mailhub=smtp.mailserver.ru:465

# Перезапись домена на свой (если используется сторонний сервер, например от yandex)
rewriteDomain=mydom.ru

# Использовать SSL/TLS для аутентификации на smtp-сервере
UseTLS=YES

Тут же, в каталоге /etc/ssmtp изменим файл revaliases, если нет, то создадим.

# Некая защита от спама.
# root:ОТ_КОГО:ЧЕРЕЗ_КАКОЙ_SMTP_СЕРВЕР:SMTP_ПОРТ

root:fromserver@mydom.ru:smtp.mailserver.ru:465

Подменяем sendmail.

# mv /usr/sbin/sendmail /usr/sbin/sendmail.org 
# ln -s /usr/sbin/ssmtp /usr/sbin/sendmail

Проверим работу отправив тестовое письмо:

# echo test | mail -v -s "testing ssmtp" kakoyto-mail@yandex.ru
[<-] 220 smtp.mailserver.ru ESMTP
[->] EHLO localhost
[<-] 250 HELP
[->] AUTH LOGIN
[<-] 334 VXNlcm7hbWU7
[->] ZnJvbXNlcnZlckBtaWcta5NiLnJ5
[<-] 334 UGFzc7dvciQ7
[<-] 235 Authentication succeeded
[->] MAIL FROM:<fromserver@mydom.ru>
[<-] 250 OK
[->] RCPT TO:<kakoyto-mail@yandex.ru>
[<-] 250 Accepted
[->] DATA
[<-] 354 Enter message, ending with "." on a line by itself
[->] Received: by localhost (sSMTP sendmail emulation); Fri, 16 Mar 2018 12:58:41 +0300
[->] From: fromserver@mydom.ru
[->] Date: Fri, 16 Mar 2018 12:58:41 +0300
[->] To: kakoyto-mail@yandex.ru
[->] Subject: testing ssmtp
[->] User-Agent: Heirloom mailx 12.5 7/5/10
[->] MIME-Version: 1.0
[->] Content-Type: text/plain; charset=us-ascii
[->] Content-Transfer-Encoding: 7bit
[->] 
[->] test
[->] .
[<-] 250 OK id=1ewm7I-0004QJ-2Y
[->] QUIT

Работает.
Теперь напишем скрипт, допустим, в том же каталоге куда установился hpacucli, /opt/compaq/hpacucli/bld/hpacucli_send_mail

#!/bin/bash
###
# Отправка сообщения на e-mail при сбое одного или нескольких дисков в массиве.
###
 
# Кому отправляем
MAILTO=kakoyto-mail@yandex.ru
 
# Путь до hpacucli
HPACUCLI=`which hpacucli`
 
# Результат вывода
HPACUCLI_TMP=/tmp/hpacucli.tmp
 
# Проверяем, есть ли сбойные диски. Если есть, то шлем инфу на e-mail
if [ `hpacucli ctrl slot=0 pd all show | grep -E "(Failed|Rebuilding)" -c` -gt 0 ]
then
   msg="RAID Controller Errors"
   logger -p syslog.error -t RAID "$msg"
   $HPACUCLI ctrl slot=0 pd all show > $HPACUCLI_TMP
   mail -s "$HOSTNAME [ERROR] - $msg" "$MAILTO" < $HPACUCLI_TMP
   rm -f $HPACUCLI_TMP
fi

и отдадим скрипт cron'у на запуск каждый час:

* */1 * * * /opt/compaq/hpacucli/bld/hpacucli_send_mail 1> /dev/null
Все e-mail адреса, названия доменов и серверов придуманы!
Совпадения с реальными названиями, чистая случайность!

Обсуждаем на форуме.