1

Для отправки уведомлений, у нас будет использоваться

почтовый ящик alarm@adminunix.ru,

сервер исходящей почтыadminunix.ru

паролем: super_password

email администратора у нас будет it@adminunix.ru
В вашем случае, данные для подключения к почтовому серверу и адрес получателя, необходимо указать свои.

Настройка отправки почты с сервера:
Для начала установим пакет ssmtp:

sudo apt-get install ssmtp

Настраиваем ssmtp

Отредактируем конфигурационный файл:

sudo mcedit /etc/ssmtp/ssmtp.conf

Приведя его в к виду указанному ниже:

 # Config file for sSMTP sendmail
 #
 # The person who gets all mail for userids < 1000
 # Make this empty to disable rewriting.
 root=postmaster
#Указываем логин пользователя, для подключения к почтовому серверу
 authuser=alarm
 #Указываем пароль для подключения
 authpass=super_password
 AuthMethod=LOGIN
 # The place where the mail goes. The actual machine name is required no
 # MX records are consulted. Commonly mailhosts are named mail.domain.com
 #Адрес сервера исходящей почты
 mailhub=adminunix.ru
 rewriteDomain=adminunix.ru #принудительное указание домена в поле From
 # Where will the mail seem to come from?
 #rewriteDomain=
 # The full hostname Очень желательно, чтобы hostname совпадал с PTR записью IP адреса, с которого будем устанавливать соединение, но не обязательно. hostname=ts174-23.adminunix.ru
 # Are users allowed to set their own From: address?
 # YES - Allow the user to specify their own From: address
 # NO - Use the system generated From: address
 FromLineOverride=NO #Запрещает скриптам «решать» с какого ящика отправлять письмо.

теперь отредактируем алиасы для отправки почты:

mcedit /etc/ssmtp/revaliases

Добавим в него следующее:

root:alarm@adminunix.ru:adminunix.ru
 postmaster:alarm@adminunix.ru:adminunix.ru
#for yandex
 root:alarm@yandex.ru:smtp.yandex.ru:465
 ubuntu:alarm@yandex.ru:smtp.yandex.ru:465
 postmaster:alarm@yandex.ru:smtp.yandex.ru:465
#for gmail
 root:alarm@gmail.com:smtp.gmail.com:587
 ubuntu:alarm@gmail.com:smtp.gmail.com:587
 postmaster:alarm@gmail.com:smtp.gmail.com:587

Если необходимо отправлять почту через smtp.yandex.ru

mailhub=smtp.yandex.ru:465 #адрес и порт smtp сервера яндекса
 UseTLS=YES #Использование шифрования SSL/TLS

Если необходимо отправлять почту через smtp.gmail.com

 mailhub=smtp.gmail.com:587
 UseSTARTTLS=YES

для FreeBSD изменим почтового клиента используемого по умолчанию:

mcedit /etc/mail/mailer.conf

приведем его к следующему виду:

#sendmail/usr/libexec/sendmail/sendmail
 #send-mail/usr/libexec/sendmail/sendmail
 #mailq<>/usr/libexec/sendmail/sendmail
 #newaliases/usr/libexec/sendmail/sendmail
 #hoststat/usr/libexec/sendmail/sendmail
 #purgestat/usr/libexec/sendmail/sendmail
 sendmail/usr/local/sbin/ssmtp
 send-mail/usr/local/sbin/ssmtp
 mailq/usr/local/sbin/ssmtp
 newaliases/usr/local/sbin/ssmtp
 hoststat/usr/bin/true
 purgestat/usr/bin/true

Для проверки работы SSMTP

echo test | mail -v -s "testing ssmtp setup" it@adminunix.ru

Если вы хотите настроить отправку писем для своего веб-сайта на php, измените файл php.ini:

#for apache
 sudo nano /etc/php5/apache2/php.ini
 #for nginx and php-fpm
 sudo nano /etc/php5/fpm/php.ini[/bash]

Найдите строку sendmail_path (она задокументирована с помощью 😉 и ниже неё вставьте:

sendmail_path = ssmtp -t

Отправка писем из скриптов bash/shell

Теперь давайте копнем глубже и попробуем отправить письмо из скрипта оболочки. Ниже простой скрипт, отправляющий информацию по использованию диска.

#!/bin/bash
 du -sh | mail -s "disk usage report" it@adminunix.ru

Откройте новый файл, вставьте в него приведенные выше строки, сохраните и запустите. Вы получите письмо, содержащее вывод команды «du -sh».
И последняя хитрость в письмах из командной сроки — добавление вложений к письмам, отправляемым из скриптов. Предположим, вам необходимо сделать резервную копию директории с конфигурационными файлами, заархивировать ее и отправить в качестве вложения с помощью mutt:

#!/bin/bash
 tar -zcf /home/user/backup.tar.gz /home/user/files_to_backup
 echo "Archived configuration files" | mutt -a /home/user/backup.tar.gz -s "backup data" it@adminunix.ru

Команда echo в начале третьей строки добавляет текст «Archived configuration files» в тело письма.

#!/bin/bash
 df -h > /tmp/mail_report.log
 free -m >> /tmp/mail_report.log
 mail -s “disk and RAM report” it@adminunix.ru < /tmp/mail_report.log

настройка Mdadm

Отредактируем настройки mdadm

sudo nano /etc/mdadm/mdadm.conf

Находим строку MAILADDR и вписываем туда адрес получателя уведомлений:

MAILADDR it@adminunix.ru

перезапускаем Mdadm

sudo /etc/init.d/mdadm restart

Теперь нам необходимо протестировать отправку уведомлений от Mdadm, в командной строке пишем:

mdadm --monitor --scan -1 --mail=it@adminunix.ru --test

Проверяем почтовый ящик админа, там будет лежать письма о состоянии RAID массива, такого содержания:

This is an automatically generated mail message from mdadm
running on Server_name.tld

A TestMessage event had been detected on md device /dev/md/0.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities: [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
 md0: active raid1 sdb1[2] sda1[0]
 19529656 blocks super 1.2 [2/2] [UU]

Теперь нам нужно проверить реагирование системы в боевых условиях.
Если дело происходит на физической системе, то выдергиваем SATA шлейф, если на виртуальной, то можно просто отключить один из дисков, после этого идем проверять почту, там будет лежать письмо, следующего содержания:

This is an automatically generated mail message from mdadm
running on Server_name.tld

A FailSpare event had been detected on md device /dev/md/0.

It could be related to component device /dev/sdb1.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities: [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
 md0: active raid1 sdb1[2](F) sda1[0]
 19529656 blocks super 1.2 [2/1] [U_]

Значит все отлично, система работает, уведомления отправляются и в случае чего, вы будете готовы все поднимать, а в нашей индустрии, быстро поднятое не считается упавшим…

Организация отказоустойчивой системы хранения данных — это, естественно, RAID. Стоит дать некоторое определение RAID: избыточный (резервный) массив собранный из независимых дисков. Полное описание классификации RAID массивов можно посмотреть на «Википедия 22». Рассматривая возможности покупки аппаратных RAID массивов, всегда приходится сталкиваться с достаточно высокой ценой. Однако, при выборе хранилища данных можно рассмотреть и другие альтернативы. Так, например, одно из возможных решений может быть реализовано на Linux (Debian) с применением недорогих комплектующих. Вот такое решение программного RAID массива мы сегодня и рассмотрим.

Постановка задачи:

  • Организовать отказоустойчивую систему хранения данных;

Условия:

  • быстрое развёртывание;
  • лёгкое управление;
  • минимальные потери при аппаратных сбоях;
  • возможность быстрого ремонта (замены) при аппаратных сбоях;
  • низкая стоимость;

Условия, которые мы поставили вполне выполнимы если мы будем использовать программный RAID массив. Для решения этой задачи не требуется высокопроизводительного и дорогостоящего оборудования, а также платного программного обеспечения.

Решение:

  • системный блок с установленным необходимым количеством жёстких дисков (наверняка, в закромах найдется старенький системник, можно использовать и новый с SATA дисками. Все зависит от того, какой дисковый объем и какая надёжность вам нужна)
  • операционная система Linux (почему именно она? Просто сейчас занимаюсь именно ей. Она бесплатна, всегда можно найти информацию по настройке и внедрению, открытые исходные коды)

Установим ее и приступим к «творению».

root# apt-get install mdadm

Во время установки система попросит параметры для обслуживания уже установленных массивов или для будущих. Чтобы не заморачиваться оставьте предложенные параметры по-умолчанию (all). Далее необходимо подготовить жёсткие диски для соединения в массив, определимся, что будем использовать массив класса RAID 1. Один из наиболее надежных (полное зеркалирование) и не дорогое решение.

root# fdisk /dev/sdb

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-41610, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-41610, default 41610):

Using default value 41610

Раздел у нас создан. Посмотрим его параметры.

Command (m for help): p

Disk /dev/sdb: 21.4 GB, 21474836480 bytes

16 heads, 63 sectors/track, 41610 cylinders

Units = cylinders of 1008 * 512 = 516096 bytes

Disk identifier: 0xda185917

Device Boot Start End Blocks Id System

/dev/sdb1 1 41610 20971408+ 83 Linux

Индификатор созданного раздела — 83, это стандартный раздел Linux. Он нам не подходит. Его необходимо сменить на «fd» (linux raid autodetect). Полный список можно посмотреть указав «L» вместо «fd», потом система задаст повторный вопрос.

Command (m for help): t

Selected partition 1

Hex code (type L to list codes): fd

Changed system type of partition 1 to fd (Linux raid autodetect)

Раздел создан, указан необходимый тип, для проверки можно ввести команду «p» и посмотреть результат, если все устраивает, то пора записать разделы на диск и приступить ко второму жёсткому диску.

Command (m for help): p

Disk /dev/sdb: 21.4 GB, 21474836480 bytes

16 heads, 63 sectors/track, 41610 cylinders

Units = cylinders of 1008 * 512 = 516096 bytes

Disk identifier: 0xda185917

Device Boot Start End Blocks Id System

/dev/sdb1 1 41610 20971408+ fd Linux raid autodetect

Command (m for help): w

The partition table has been altered!

Calling ioctl () to re-read partition table.

Syncing disks.

Аналогично готовим второй жёсткий диск

После завершения подготовки дисков можно приступать к непосредственному созданию массива. Создание RAID массива выполняется с помощью программы mdadm (ключ --create). Добавим опцию --level, для указания типа RAID массива, который хотим получить, в нашем случае первого (1) уровня. С помощью ключа --raid-devices укажем устройства, поверх которых будет собираться RAID массив.

root# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdd1

mdadm: size set to 20971328K

mdadm: array /dev/md0 started.

Если во время сборки не хватает физических дисков, но вы планируете добавить их позже, т.е. собрать не полный RAID массив (degraded) можно указать слово missing вместо имени устройства. Для RAID 5 это может быть только один диск, для RAID 6 — не более двух, для RAID 1 сколько угодно, но должен быть как минимум один рабочий. Массив создан, теперь необходимо убедится, что собранный RAID массив собран правильно.

root# cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md0 : active (auto-read-only) raid1 sdd1[1] sdb1[0]

      20971328 blocks [2/2] [UU]

          resync=PENDING

unused devices: <none>

Система сообщает, что создан RAID 1 массив, в который входят два устройства - sdd1 и sdb1. Проверка состояния нашего массива показывает [UU] — означает, что все в порядке, а ([_U] или [U_] означает, что массив поврежден. Имя нашего RAID массива md0.

Файловая система создана, но она еще не готова принимать к размещению данных. Можно посмотреть статус массива.

root# cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md0 : active raid1 sdd1[1] sdb1[0]

      20971328 blocks [2/2] [UU]

      [==>..................]  resync = 10.7% (2260416/20971328) finish=8.4min speed=36824K/sec

unused devices: <none>

Теперь нужно создать файл конфигурации нашего RAID массива. Система сама не запоминает какие RAID массивы ей нужно создать и какие компоненты в них входят. Эта информация находится в файле конфигурации mdadm.conf. Параметры, которые следует добавить в этот файл, можно получить при помощи команды mdadm --detail --scan --verbose.

root# mdadm --detail --scan --verbose

ARRAY /dev/md0 level=raid1 num-devices=2 metadata=00.90 UUID=ddddad18:ae4cb9be:cb5f3c5d:d16ad809

   devices=/dev/hdb1,/dev/hdd1

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

root# mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf

Настройка уведомления о состоянии RAID массива по email

Создаем новые диски с использование LVM

Теперь все готово.

1. RAID выйдет из строя со 100% вероятностью

This post is allegedly about surprising facts. But this fact should not surprise you. Still, some folks invest in RAID with the expectation that it removes the burden of backing up their files. Don’t make that mistake.

Instead, you should think about RAID as the first tier in your data protection strategy. When you consider which RAID configuration you might use, think about the coming day when the entire volume will be corrupted. I’m not talking about just one disk. I mean the whole shebang.

What’s your data recovery plan? How frequently are you willing to put up with the hassle to restore your data?  Some RAID implementations are aimed at making failure an infrequent event. Other configurations significantly increase the chance of failure.

Make sure you have a backup plan, then consider your RAID options in that context.

Fact 1 may not have been so surprising. Here are a few more that might actually surprise you:

2. Software RAID is almost always a better choice than hardware RAID

Software RAID has advanced significantly in the last few years (as of 2012). Hardware RAID still has the three key vulnerabilities it has always had: First, it is expensive. Second, if your RAID card fails, your RAID volume fails; it is a single point of failure. Third, if your RAID card fails, you must find an exact replacement for that card to recover your data.

On the other hand, software RAID costs nothing, and if your controller card or motherboard fail, you can just move your disks to another machine and set up the appropriate software to read them.

Yes, hardware RAID can be faster than software RAID, but that gap is closing, and the flexibility and reliabilty offered by software RAID outweighs that single advantage. The only case where hardware RAID is the right choice is when absolute speed is the only priority, and you’re willing to take risks with your data.

There are some articles on the web that compare hardware versus software RAID.  They are good reading, but in some cases the information they contain is old. You should be sure to make your decisions on the state of the art. As of 2012 there are a number of new capabilities offered by software RAID that make it worth considering:

  • Hot swapping works with software RAID. SATA 3G and SATA 6G made that possible. If a disk goes bad, swap it out, no down time.
  • Software RAID only consumes a small slice of CPU cycles. In my tests with mdadm on ubuntu I saw only 2% to 4% of one CPU dedicated to RAID. On a multi-core machine this is nothing.
  • Software RAID works with SSD caching. The most used data migrates to a very fast cache.
  • Software RAID supports variable size volumes that can be extended by adding more disks (specifically ZFS supports this, maybe others do as well).

3. Some “RAID cards” aren’t hardware RAID

Over the last few years SATA disk controller cards and motherboards have come out that claim to offer hardware RAID. They are really just disk controllers with BIOS that implements RAID in software.

How can you detect these cards and motherboards? Usually price is the giveaway. A $20.00 card is not likely to implement true hardware RAID. Also these cards usually offer windows-only support. Here’s a good.

4. On-disk data compression can make your RAID volume faster

That seems counter-intuitive because it takes computing power and time to compress data. Here’s why it can make your disk performance faster: The bottleneck in disk IO is bandwidth to the disk (your SATA pipe). If the data is compressed before writing, there’s less of it to write, so it moves more quickly to the disk.

ZFS offers compressed volumes.  I’m sure other software RAID implementations offer it as well. Here’s some discussion of this.

5. Maybe you don’t need RAID at all

Consider an SSD instead. Yes, SSDs are expensive, but a single SSD is less expensive than the multiple disks you’d need to build a comparably fast RAID volume. For example, as of this writing (May 2012) an Intel 250GB SSD prices in at $350 and it’s faster than many RAID configurations built with spinning disks. See one of my other posts for details on SSD speeds compared with RAID on SATA 3G.

SSDs can also be used as cache for a RAID volume. For our next server I’m contemplating a two disk mirror for reliability, augmented with an SSD cache for speed. This can be done easily with ZFS.

And yes, for ultra crazy speed, you can build a RAID volume out of SSDs.

6. The hottest new RAID tech comes from Oracle, and it is open source!

Nick Black of pointed me towards ZFS. I’ve looked at it deeply and decided it’s the way to go for our data. ZFS’ designers prioritized reliability and scalability, and it’s got most all existing filesystems and RAID implementations beat on those points.  ZFS was built by Sun Microsystems for their Solaris OS. They released it under an open source license and it is now available for Windows, Mac OS and Linux.

Oracle acquired ZFS through their acquisition of Sun. ZFS’s features are touted by Oracle for their hardware solutions. I’ll bet Oracle hates that Sun open sourced ZFS, but that’s a story for another blog.

Stay tuned for a blog from me on ZFS. For now, some rules of thumb for choosing RAID levels:

7. If speed is the only priority, choose RAID0

In RAID0 the data is split or “striped” across the multiple disks and written (or read) in parallel.  With N disks, speed up is N-times for reading and N-times for writing.  Here’s the downside though: Total failure of your RAID volume is N-times more likely. You should assume that RAID volume failure is an absolute certainty.

Choose RAID0 only if you can easily rebuild your RAID volume. Make sure you have a strong backup workflow.

8. If reliability is the only priority, choose RAID1

RAID1 is called “mirroring.” The data is fully duplicated on two (or more) disks. If one disk fails everything is OK; The RAID volume will continue operating, and it can be rebuilt when you replace the defective disk. RAID0 also offers N-times speed up for reads, but no speed up for writes.

9. In nearly all other cases, RAID10 is the way to go

In RAID10, pairs of disks are mirrored to create reliable volumes (RAID1), then those reliable volumes are combined via RAID0 for speed. Four disks combined in this way offer 2 times speedup over a single disk for reads and writes, yet they can also sustain loss of two disks and still operate. You get both speed and reliability.

Many folks would consider RAID5 for these applications. I think its a bad choice nowadays in comparison to RAID10 because RAID5 is subject to very slow write speeds; sometimes slower than writing to a single disk. See my tests here. Also RAID5 can only survive loss of one disk. In a 4 disk setup RAID10 can sustain two disk losses.

The main advantage of RAID5 is that it offers more total storage than RAID10. But the speed and reliability of RAID10 more than offset that advantage.

What about the other RAID levels? The three I mention above cover 99% of RAID use cases. The situations in which other RAID levels are useful are limited. If you want to dive in though, here’s a good starting point.

10. And the tenth surprising fact about RAID: There are only 9 surprising facts about RAID!

Столкнулся с медленной синхронизацией программного RAID.

Я использую Ubuntu Server и software raid mdadm, который объединяет 3ТБ диски в RAID1. После создания массива mdadm делает resync, который в моем случае предлагал завершить через 40000 минут. Я решил ускорить синхронизацию дискового массива. 

Для ускорения перестроения RAID нужно записать в /proc/sys/dev/raid/speed_limit_min определяет максимальную скорость записи, которую mdadm будет использовать для реконструкции дискового массива.

Снимаем ограничение:

echo 300000 > /proc/sys/dev/raid/speed_limit_min

Смотрим, что получилось:

watch --interval=1 cat /proc/mdstat

Скорость выросла до 147 МБ/с — это практически максимальная скорость записи, которую можно получить на используемых дисках.

md3 : active raid1 sdb5[1] sda5[0]
 2779548480 blocks super 1.2 [2/2] [UU]
 [===>.................] resync = 15.9% (443292288/2779548480) finish=264.1min speed=147420K/sec

Если один из дисков в программном RAID выходит из строя, то по умолчанию Ubuntu при загрузке не запустит ОС, а останется в консоли initramfs.

Это может помочь сохранить данные, предупредив полную неработоспособность RAID массива. Но это также может стать проблемой, если сервер используется в удаленном режиме — доступ к нему будет потерян.

Загружаться или нет с неполностью рабочим RAID система определяет по параметру BOOT_DEGRADED в файле /etc/initramfs-tools/conf.d/mdadm.

Чтобы система запустилась, нужно установить «BOOT_DEGRADED=true».

Также это может быть переопределено указанием для ядра опции bootdegraded=[true|false] при загрузке.

Управление программным RAID-массивом в Linux выполняется с помощью программы mdadm.

У программы mdadm есть несколько режимов работы.

Assemble (сборка)
Собрать компоненты ранее созданного массива в массив. Компоненты можно указывать явно, но можно и не указывать — тогда выполняется их поиск по суперблокам.
Build (построение)
Собрать массив из компонентов, у которых нет суперблоков. Не выполняются никакие проверки, создание и сборка массива в принципе ничем не отличаются.
Create (создание)
Создать новый массив на основе указанных устройств. Использовать суперблоки размещённые на каждом устройстве.
Monitor (наблюдение)
Следить за изменением состояния устройств. Для RAID0 этот режим не имеет смысла.
Grow (расширение или уменьшение)
Расширение или уменьшение массива, включаются или удаляются новые диски.
Incremental Assembly (инкрементальная сборка)
Добавление диска в массив.
Manage (управление)
Разнообразные операции по управлению массивом, такие как замена диска и пометка как сбойного.
Misc (разное)
Действия, которые не относятся ни к одному из перечисленных выше режимов работы.
Auto-detect (автоообнаружение)
Активация автоматически обнаруживаемых массивов в ядре Linux.

Формат вызова

 mdadm [mode] [array] [options]

Режимы:

  • -A, --assemble — режим сборки
  • -B, --build — режим построения
  • -C, --create — режим создания
  • -F, --follow, --monitor — режим наблюдения
  • -G, --grow — режим расширения
  • -I, --incremental — режим инкрементальной сборки

Настройка программного RAID-массива

Рассмотрим как выполнить настройку RAID-массива 5 уровня на трёх дисковых разделах. Мы будем использовать разделы:

   /dev/hde1
   /dev/hdf2
   /dev/hdg1

В том случае если разделы иные, не забудьте использовать соответствующие имена файлов.

 Создание разделов

Нужно определить на каких физических разделах будет создаваться RAID-массив. Если разделы уже есть, нужно найти свободные (fdisk -l). Если разделов ещё нет, но есть неразмеченное место, их можно создать с помощью программ fdisk или cfdisk.

Просмотреть какие есть разделы:

   %# fdisk -l
   Disk /dev/hda: 12.0 GB, 12072517632 bytes
   255 heads, 63 sectors/track, 1467 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot    Start       End    Blocks   Id  System
   /dev/hda1   *         1        13    104391   83  Linux
   /dev/hda2            14       144   1052257+  83  Linux
   /dev/hda3           145       209    522112+  82  Linux swap
   /dev/hda4           210      1467  10104885    5  Extended
   /dev/hda5           210       655   3582463+  83  Linux
   ...
   ...
   /dev/hda15         1455      1467    104391   83  Linux

Просмотреть, какие разделы куда смонтированы, и сколько свободного места есть на них (размеры в килобайтах):

   %# df -k
   Filesystem           1K-blocks      Used Available Use% Mounted on
   /dev/hda2              1035692    163916    819164  17% /
   /dev/hda1               101086      8357     87510   9% /boot
   /dev/hda15              101086      4127     91740   5% /data1
   ...
   ...
   ...
   /dev/hda7              5336664    464228   4601344  10% /var

Размонтирование

Если вы будете использовать созданные ранее разделы, обязательно размонтируйте их. RAID-массив нельзя создавать поверх разделов, на которых находятся смонтированные файловые системы.

   %# umount /dev/hde1
   %# umount /dev/hdf2
   %# umount /dev/hdg1

 

 Изменение типа разделов

Желательно (но не обязательно) изменить тип разделов, которые будут входить в RAID-массив и установить его равным FD (Linux RAID autodetect). Изменить тип раздела можно с помощью fdisk.

Рассмотрим как это делать на примере раздела /dev/hde1.

    %# fdisk /dev/hde
    The number of cylinders for this disk is set to 8355.
    There is nothing wrong with that, but this is larger than 1024,
    and could in certain setups cause problems with:
    1) software that runs at boot time (e.g., old versions of LILO)
    2) booting and partitioning software from other OSs
    (e.g., DOS FDISK, OS/2 FDISK)

    Command (m for help):

    Use FDISK Help

    Now use the fdisk m command to get some help:

    Command (m for help): m
    ...
    ...
    p   print the partition table
    q   quit without saving changes
    s   create a new empty Sun disklabel
    t   change a partition's system id
    ...
    ...
    Command (m for help):

    Set The ID Type To FD

    Partition /dev/hde1 is the first partition on disk /dev/hde.
    Modify its type using the t command, and specify the partition number
    and type code.
    You also should use the L command to get a full listing
    of ID types in case you forget.

    Command (m for help): t
    Partition number (1-5): 1
    Hex code (type L to list codes): L

    ...
    ...
    ...
    16  Hidden FAT16    61   SpeedStor       f2  DOS secondary
    17  Hidden HPFS/NTF 63  GNU HURD or Sys fd  Linux raid auto
    18  AST SmartSleep  64  Novell Netware  fe  LANstep
    1b  Hidden Win95 FA 65  Novell Netware  ff  BBT
    Hex code (type L to list codes): fd
    Changed system type of partition 1 to fd (Linux raid autodetect)

    Command (m for help):

    Make Sure The Change Occurred

    Use the p command to get the new proposed partition table:

    Command (m for help): p

    Disk /dev/hde: 4311 MB, 4311982080 bytes
    16 heads, 63 sectors/track, 8355 cylinders
    Units = cylinders of 1008 * 512 = 516096 bytes

    Device Boot    Start       End    Blocks   Id  System
    /dev/hde1             1      4088   2060320+  fd  Linux raid autodetect
    /dev/hde2          4089      5713    819000   83  Linux
    /dev/hde4          6608      8355    880992    5  Extended
    /dev/hde5          6608      7500    450040+  83  Linux
    /dev/hde6          7501      8355    430888+  83  Linux

    Command (m for help):

    Save The Changes

    Use the w command to permanently save the changes to disk /dev/hde:

    Command (m for help): w
    The partition table has been altered!

    Calling ioctl() to re-read partition table.
    WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
    The kernel still uses the old table.
    The new table will be used at the next reboot.
    Syncing disks.

Аналогичным образом нужно изменить тип раздела для всех остальных разделов, входящих в RAID-массив.

 

Создание RAID-массива

Создание RAID-массива выполняется с помощью программы mdadm (ключ --create). Мы воспользуемся опцией --level, для того чтобы создать RAID-массив 5 уровня. С помощью ключа --raid-devices укажем устройства, поверх которых будет собираться RAID-массив.

    %# mdadm --create --verbose /dev/md0 --level=5  --raid-devices=3 /dev/hde1 /dev/hdf2 /dev/hdg1
    mdadm: layout defaults to left-symmetric
    mdadm: chunk size defaults to 64K
    mdadm: /dev/hde1 appears to contain an ext2fs file system
        size=48160K  mtime=Sat Jan 27 23:11:39 2007
    mdadm: /dev/hdf2 appears to contain an ext2fs file system
        size=48160K  mtime=Sat Jan 27 23:11:39 2007
    mdadm: /dev/hdg1 appears to contain an ext2fs file system
        size=48160K  mtime=Sat Jan 27 23:11:39 2007
    mdadm: size set to 48064K
    Continue creating array? y
    mdadm: array /dev/md0 started.

Если вы хотите сразу создать массив, где диска не хватает (degraded) просто укажите слово missing вместо имени устройства. Для RAID5 это может быть только один диск; для RAID6 — не более двух; для RAID1 — сколько угодно, но должен быть как минимум один рабочий.

Проверка правильности сборки

Убедиться, что RAID-массив проинициализирован корректно можно просмотрев файл /proc/mdstat. В этом файле отражается текущее состояние RAID-массива.

    %# cat /proc/mdstat
    Personalities : [raid5]
    read_ahead 1024 sectors
    md0 : active raid5 hdg1[2] hde1[1] hdf2[0]
        4120448 blocks level 5, 32k chunk, algorithm 3 [3/3] [UUU]
    unused devices: <none>

Обратите внимание на то, как называется новый RAID-массив. В нашем случае он называется /dev/md0. Мы будем обращаться к массиву по этому имени.

Создание файловой системы поверх RAID-массива

Новый RAID-раздел нужно отформатировать, т.е. создать на нём файловую систему. Сделать это можно при помощи программы из семейства mkfs. Если мы будем создавать файловую систему ext3, воспользуемся программой mkfs.ext3. :

    %# mkfs.ext3 /dev/md0
    mke2fs 1.39 (29-May-2006)
    Filesystem label=
    OS type: Linux
    Block size=1024 (log=0)
    Fragment size=1024 (log=0)
    36144 inodes, 144192 blocks
    7209 blocks (5.00%) reserved for the super user
    First data block=1
    Maximum filesystem blocks=67371008
    18 block groups
    8192 blocks per group, 8192 fragments per group
    2008 inodes per group
    Superblock backups stored on blocks:
            8193, 24577, 40961, 57345, 73729

    Writing inode tables: done
    Creating journal (4096 blocks): done
    Writing superblocks and filesystem accounting information: done
    This filesystem will be automatically checked every 33 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.

Имеет смысл для лучшей производительности файловой системы указывать при создании количество дисков в рейде и количество блоков файловой системы которое может поместиться в один страйп ( chunk ), это особенно важно при создании массивов уровня RAID0,RAID5,RAID6,RAID10. Для RAID1 ( mirror ) это не имеет значения так как запись идет всегда на один device, a в других типах рейдов дата записывается последовательно на разные диски порциями соответствующими размеру stripe.Например если мы используем RAID5 из 3 дисков, с дефолтным размером страйпа в 64К и используем файловую систему ext3 с размером блока в 4К то можно вызывать команду mkfs.ext вот так:

      %# mkfs.ext3 -b 4096 -E stride=16,stripe-width=32 /dev/md0

stripe-width обычно расчитывается как stride * N ( N это дата диски в массиве — например в RAID5 — два дата диска и один parity ) Для неменее популярной файловой системы XFS надо указывать не количество блоков файловой системы соответствующих размеру stripe в массиве, а непосредственно размер самого страйпа

      %# mkfs.xfs -d su=64k,sw=3 /dev/md0

Создание конфигурационного файла mdadm.conf

Система сама не запоминает какие RAID-массивы ей нужно создать и какие компоненты в них входят. Эта информация находится в файле mdadm.conf.

Строки, которые следует добавить в этот файл, можно получить при помощи команды

 mdadm --detail --scan --verbose

Вот пример её использования:

    %# mdadm --detail --scan --verbose
    ARRAY /dev/md0 level=raid5 num-devices=4
    UUID=77b695c4:32e5dd46:63dd7d16:17696e09
    devices=/dev/hde1,/dev/hdf2,/dev/hdg1

Если файла mdadm.conf ещё нет, можно его создать:

    %# echo "DEVICE partitions" > /etc/mdadm/mdadm.conf
    %# mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf

Создание точки монтирования для RAID-массива

Поскольку мы создали новую файловую систему, вероятно, нам понадобится и новая точка монтирования. Назовём её /raid.

    %# mkdir /raid

Изменение /etc/fstab

Для того чтобы файловая система, созданная на новом RAID-массиве автоматически монтировалась при загрузке, добавим соответствующую запись в файл /etc/fstab хранящий список автоматически монтируемых при загрузке файловых систем.

   /dev/md0      /raid     ext3    defaults    1 2

Если мы объединяли в RAID-массив разделы, которые использовались раньше, нужно отключить их монтирование: удалить или закомментировать соответствующие строки в файле /etc/fstab. Закомментировать строку можно символом #.

    #/dev/hde1       /data1        ext3    defaults        1 2
    #/dev/hdf2       /data2        ext3    defaults        1 2
    #/dev/hdg1       /data3        ext3    defaults        1 2

Монтирование файловой системы нового RAID-массива

Для того чтобы получить доступ к файловой системе, расположенной на новом RAID-массиве, её нужно смонтировать. Монтирование выполняется с помощью команды mount.

Если новая файловая система добавлена в файл /etc/fstab, можно смонтировать её командой mount -a (смонтируются все файловые системы, которые должны монтироваться при загрузке, но сейчас не смонтированы).

   %# mount -a

Можно смонтировать только нужный нам раздел (при условии, что он указан в /etc/fstab).

   %# mount /raid

Если раздел в /etc/fstab не указан, то при монтировании мы должны задавать как минимум два параметра — точку монтирования и монтируемое устройство:

   %# mount /dev/md0 /raid

Проверка состояния RAID-массива

Информация о состоянии RAID-массива находится в файле /proc/mdstat.

    %# raidstart /dev/md0
    %# cat /proc/mdstat
    Personalities : [raid5]
    read_ahead 1024 sectors
    md0 : active raid5 hdg1[2] hde1[1] hdf2[0]
        4120448 blocks level 5, 32k chunk, algorithm 3 [3/3] [UUU]
    unused devices: <none>

Если в файле информация постоянно изменяется, например, идёт пересборка массива, то постоянно изменяющийся файл удобно просматривать при помощи программы watch:

%$ watch cat /proc/mdstat

Как выполнить проверку целостности программного RAID-массива md0:

echo 'check' >/sys/block/md0/md/sync_action

Как посмотреть нашлись ли какие-то ошибки в процессе проверки программного RAID-массива по команде check или repair:

cat /sys/block/md0/md/mismatch_cnt

Проблема загрузки на многодисковых системах

В некоторых руководствах по mdadm после первоначальной сборки массивов рекомендуется добавлять в файл /etc/mdadm/mdadm.conf вывод команды «mdadm --detail --scan --verbose»:

ARRAY /dev/md/1 level=raid1 num-devices=2 metadata=1.2 name=linuxWork:1 UUID=147c5847:dabfe069:79d27a05:96ea160b
  devices=/dev/sda1
ARRAY /dev/md/2 level=raid1 num-devices=2 metadata=1.2 name=linuxWork:2 UUID=68a95a22:de7f7cab:ee2f13a9:19db7dad
  devices=/dev/sda2

, в котором жёстко прописаны имена разделов (/dev/sda1, /dev/sda2 в приведённом примере).

Если после этого обновить образ начальной загрузки (в Debian вызвать 'update-initramfs -u' или 'dpkg-reconfigure mdadm'), имена разделов запишутся в файл mdadm.conf образа начальной загрузки и вы не сможете загрузиться с массива, если конфигурация жёстких дисков изменится (нужные разделы получат другие имена). Для этого не обязательно добавлять или убирать жёсткие диски: в многодисковых системах их имена могут меняться от загрузки к загрузке.

Решение: записывать в /etc/mdadm/mdadm.conf вывод команды «mdadm --detail --scan» (без --verbose).

При этом в файле mdadm.conf будут присутствовать UUID разделов, составляющих каждый RAID-массив. При загрузке системы mdadm находит нужные разделы независимо от их символических имён по UUID.

mdadm.conf, извлечённый из образа начальной загрузки Debian:

DEVICE partitions
HOMEHOST <system>
ARRAY /dev/md/1 metadata=1.2 UUID=147c5847:dabfe069:79d27a05:96ea160b name=linuxWork:1
ARRAY /dev/md/2 metadata=1.2 UUID=68a95a22:de7f7cab:ee2f13a9:19db7dad name=linuxWork:2

Результат исследования раздела командой 'mdadm --examine'"

/dev/sda1:
         Magic : a92b4efc
       Version : 1.2
   Feature Map : 0x0
    Array UUID : 147c5847:dabfe069:79d27a05:96ea160b
          Name : linuxWork:1
 Creation Time : Thu May 23 09:17:01 2013
    Raid Level : raid1
  Raid Devices : 2

Раздел c UUID 147c5847:dabfe069:79d27a05:96ea160b войдёт в состав массива, даже если станет /dev/sdb1 при очередной загрузке системы.

Вообще, существует 2 файла mdadm.conf, влияющих на автоматическую сборку массивов:

  • один при загрузке системы, записывется в образ начальной загрузки при его обновлении;
  • другой находится в каталоге /etc/mdadm/ и влияет на автосборку массивов внутри работающей системы.

Соответственно, вы можете иметь информацию:

1) в образе начальной загрузки (ОНЗ) и в /etc/mdadm/mdadm.conf;

2) только в ОНЗ (попадает туда при его создании обновлении);

3) только в /etc/mdadm/mdadm.conf;

4) нигде.

В том месте, где есть mdadm.conf, сборка происходит по правилам; где нет — непредсказуемо.
Примечание: если вы не обновили ОНЗ после создания RAID-массивов, их конфигурация всё равно в него попадёт — при обновлении образа другой программой / при обновлении системы (но вы не будете об этом знать со всеми вытекающими).

Дальнейшая работа с массивом

Пометка диска как сбойного

Диск в массиве можно условно сделать сбойным, ключ --fail (-f):

    %# mdadm /dev/md0 --fail /dev/hde1
    %# mdadm /dev/md0 -f     /dev/hde1

Удаление сбойного диска

Сбойный диск можно удалить с помощью ключа --remove (-r):

    %# mdadm /dev/md0 --remove /dev/hde1
    %# mdadm /dev/md0 -r       /dev/hde1

Добавление нового диска

Добавить новый диск в массив можно с помощью ключей --add (-a) и --re-add:

    %# mdadm /dev/md0 --add /dev/hde1
    %# mdadm /dev/md0 -a    /dev/hde1

 

Сборка существующего массива

Собрать существующий массив можно с помощью mdadm --assemble. Как дополнительный аргумент указывается, нужно ли выполнять сканирование устройств, и если нет, то какие устройства нужно собирать.

    %# mdadm --assemble /dev/md0 /dev/hde1 /dev/hdf2 /dev/hdg1
    %# mdadm --assemble --scan

Расширение массива

Расширить массив можно с помощью ключа --grow (-G). Сначала добавляется диск, а потом массив расширяется:

    %# mdadm /dev/md0 --add /dev/hdh2

Проверяем, что диск (раздел) добавился:

    %# mdadm --detail /dev/md0
    %# cat /proc/mdstat

Если раздел действительно добавился, мы можем расширить массив:

    %# mdadm -G /dev/md0 --raid-devices=4

Опция --raid-devices указывает новое количество дисков используемое в массиве. Например, было 3 диска, а теперь расширяем до 4-х — указываем 4.

Рекомендуется задать файл бэкапа на случай прерывания перестроения массива, например добавить:

--backup-file=/var/backup

При необходимости, можно регулировать скорость процесса расширения массива, указав нужное значение в файлах

    /proc/sys/dev/raid/speed_limit_min
    /proc/sys/dev/raid/speed_limit_max

Убедитесь, что массив расширился:

    %# cat /proc/mdstat

Нужно обновить конфигурационный файл с учётом сделанных изменений:

    %# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
    %# vi /etc/mdadm/mdadm.conf

Возобновление отложенной синхронизации

Отложенная синхронизация:

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active(auto-read-only) raid1 sda1[0] sdb1[1]
      78148096 blocks [2/2] [UU]
        resync=PENDING

Возобновить:

echo idle > /sys/block/md0/md/sync_action

P.S.: Если вы увидели «active (auto-read-only)» в файле /proc/mdstat, то возможно вы просто ничего не записывали в этот массив. К примеру, после монтирования раздела и любых изменений в примонтированном каталоге, статус автоматически меняется:

md0 : active raid1 sdc[0] sdd[1]

Переименование массива

Для начала отмонтируйте и остановите массив:

    %# umount /dev/md0
    %# mdadm --stop /dev/md0

Затем необходимо пересобрать как md5 каждый из разделов sd[abcdefghijk]1

    %# mdadm --assemble /dev/md5 /dev/sd[abcdefghijk]1 --update=name

или так

    %# mdadm --assemble /dev/md5 /dev/sd[abcdefghijk]1 --update=super-minor

Удаление массива

Для начала отмонтируйте и остановите массив:

    %# umount /dev/md0
    %# mdadm -S /dev/md0

Затем необходимо затереть superblock каждого из составляющих массива:

    %# mdadm --zero-superblock /dev/hde1
    %# mdadm --zero-superblock /dev/hdf2

Если действие выше не помогло, то затираем так:

    %# dd if=/dev/zero of=/dev/hde1 bs=512 count=1
    %# dd if=/dev/zero of=/dev/hdf2 bs=512 count=1