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

Небольшое вступление

Вообще говоря, существуют много способов сохранить нажитое непосильным путём. Самый ненадёжный из них, несмотря на многие заверения об обратном - это запись данных на CD или DVD диски. Если вы уж что-то хотите сохранить на дисках, то обязательно записывайте важную информацию как минимум на два диска разных производителей, кроме того, пишите на минимальной доступной скорости привода. Но всё равно вас это не спасёт, лет через 5 с большим шансом вы можете обнаружить, что оба ваших диска полностью или частично перестали читаться.

RAID массивы позволяют с помощью нескольких винчестеров создать систему хранения данных, которая будет обладать нужной степенью отказоустойчивости. Например, в случае массива RAID-5 ваши данные останутся в целости при сгорании одного из винчестеров, RAID-6 позволяет обеспечить гарантированное сохранение данных при вылете уже двух винчестеров. Есть много других конфигураций, о которых можно почитать в специализированных статьях. Сохранность данных обеспечивается за счёт уменьшения доступного суммарного места под данные, но поверьте, оно того стоит.

Кроме того, есть специальный тип RAID-0, который вообще говоря не обеспечивает никакой сохранности и нужен лишь для увеличения скорости работы.

Итак, если вы решили создать RAID массив, вам понадобятся как минимум несколько винчестеров. Но кроме того вам придётся выбрать технологию управления вашим массивом. Существуют три основных возможности: аппаратный RAID-массив, аппаратно-программный RAID-массив и программный RAID-массив. Первые два способа требуют наличия достаточно дорогих RAID-контроллеров и имеют один немаловажный недостаток: если у вас сгорит не винчестер, а RAID-контроллер, то восстановить массив обычно можно будет только достав ровно такой же контроллер. А поскольку нет никаких гарантий, что лет через 5 на рынке всё ещё будет нужное железо, то иногда использование аппаратных RAID-массивов нежелательно. С другой стороны, полностью аппаратный массив никак не зависит от программной начинки компьютера.

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

Утилита управления программными RAID массивами mdadm

Для создания и управления RAID массивом вам потребуется утилита mdadm, она есть в репозиториях и её можно поставить через Synaptic или командой

sudo aptitude install mdadm

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

В качестве примера будет использоваться RAID-5 массив на дисках sdb1, sdc1 и sde1. Кстати, как уже упоминалось - для создания массива вам нужны не винчестеры целиком, а лишь логические диски (желательно - одинакового объёма, в противном случае размер массива будет рассчитываться исходя из размера диска с минимальным объёмом), но использовать два диска на одном винчестере - очень плохая идея, ибо это уничтожает весь смысл применения RAID.

Итак, для начала нужно подготовить разделы, которые вы хотите включить в RAID, присвоив им тип fd (Linux RAID Autodetect) Это не обязательно, но желательно. В Ubuntu 9.10 это можно легко сделать с помощью Дисковой утилиты, которую можно найти в меню Система→Администрирование. Она же называется palimpsest. В консоли поменять тип раздела можно с помощью программы fdisk, но её использование не совсем тривиально.

Если у вас ещё нет нужных разделов - можете создать их с помощью gparted или cfdisk, обе эти утилиты необходимо доустанавливать отдельно.

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

mdadm --create --verbose /dev/md0 --level=5 \
  --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

Вы должны увидеть примерно такой вывод:

mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 64K
mdadm: /dev/sdb1 appears to contain an ext2fs file system
    size=48160K  mtime=Sat Jan 27 23:11:39 2007
mdadm: /dev/sdc1 appears to contain an ext2fs file system
    size=48160K  mtime=Sat Jan 27 23:11:39 2007
mdadm: /dev/sde1 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. Учтите, что в RAID-5 может быть не более одного отсутствующего диска, в RAID-6 - не более двух, а в RAID-1 должен быть хотя бы один рабочий.

To be continued… FIXME

Изменение конфигурационного файла

Если вам вдруг потребуется после создания массива производить какие-нибудь операции с его блочным устройством, которые изменят UUID, то обязательно необходимо изменить конфигурационный файл /etc/mdadm/mdadm.conf.

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

Для получения текущей работающей конфигурации выполните

sudo mdadm --detail --scan

Эта команда выведет по строчке конфигурации для каждого массива. Именно такие строчки должны быть записаны в файле /etc/mdadm/mdadm.conf за исключением того, что в строчках в файле не должно быть параметра metadata.

Если реальная конфигурация не совпадает с той, которая записана в /etc/mdadm/mdadm.conf, то обязательно приведите этот файл в соответствие с реальной конфигурацией до перезагрузки, иначе в следующий раз массив не запустится.

Работа с программным RAID с LiveCD

LiveCD диски Ubuntu по умолчанию не включают в себя утилиту mdadm, поэтому чтобы работать с RAID массивами с LiveCD вам необходимо сначала её установить:

sudo apt-get install mdadm

После этого нужно запустить все ваши массивы, сделать это можно командой

sudo mdadm --assemble --scan

Проверить статус массивов можно как всегда с помощью файла /proc/mdstat:

cat /proc/mdstat  

Устранение возникающих проблем и восстановление массивов

Массив внезапно перешёл в состояние inactive

Иногда из-за каких-то сбоев оборудования массив переходит в состояние inactive безо всяких ошибок на дисках. При этом все диски помечаются как неактивные. Выглядит это примерно так:

$ cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : inactive sdd1[2](S) sdb1[1](S) sdc1[0](S) sde1[3](S)
      2930287616 blocks
       
unused devices: <none>

Ничего страшного в этом нет, вам надо всего лишь остановить массив командой

sudo mdadm --stop /dev/md0

И затем пересобрать командой

sudo mdadm --assemble --scan --force
Если имел место серьёзный сбой массива, например, «вылет» чрезмерного количества дисков, то массив тоже перейдёт в состояние inactive, но в этом случае простой его пересборкой восстановить работоспособность не получится, мало того, она может даже навредить. Так что будьте внимательны и в случае возникновения проблем в первую очередь смотрите на состояние массива и всех его компонентов.

Только потом не забудьте примонтировать файловую систему, при перезапуске массива это не будет сделано автоматически. Если у вас массив прописан в /etc/fstab, то для его примонтирования обычно достаточно выполнить команду

sudo mount -a

Критическая фатальная ошибка при полной работоспособности винчестеров

Как бы мы не надеялись на технологию RAID, 100% гарантии она, увы, не даёт. Иногда случаются критические невосстановимые сбои. Например, когда одновременно вылетают 2 винчестера из RAID-5 массива. Это приводит к полной неработоспособности массива и с первого взгляда к невозможности его восстановить.

Если случилась такая беда, то:

  1. В первую очередь посмотрите состояние всех компонент массива командой

    sudo mdadm -E /dev/sdc1

    Вместо sdc1 нужно поочерёдно поставить все компоненты. Обратите особое внимание на последний блок каждого вывода, вот, например, как выглядел один из выводов у меня:

    # mdadm -E /dev/sdc1
    /dev/sdc1:
              Magic : a92b4efc
            Version : 00.90.00
               UUID : 22de433d:78efb608:be909337:4a7ae5f9 (local to host malamut-desktop)
      Creation Time : Tue Jan  5 21:26:49 2010
         Raid Level : raid5
      Used Dev Size : 732571904 (698.64 GiB 750.15 GB)
         Array Size : 2197715712 (2095.91 GiB 2250.46 GB)
       Raid Devices : 4
      Total Devices : 4
    Preferred Minor : 0
    
        Update Time : Mon May 17 23:07:51 2010
              State : clean
     Active Devices : 4
    Working Devices : 4
     Failed Devices : 0
      Spare Devices : 0
           Checksum : 10e9baf9 - correct
             Events : 154438
    
             Layout : left-symmetric
         Chunk Size : 64K
    
          Number   Major   Minor   RaidDevice State
    this     0       8       33        0      active sync   /dev/sdc1
    
       0     0       8       33        0      active sync   /dev/sdc1
       1     1       8       17        1      active sync   /dev/sdb1
       2     2       8       49        2      active sync   /dev/sdd1
       3     3       8       65        3      active sync   /dev/sde1

    Тут вроде всё нормально, а вот тут уже нет:

    # mdadm -E /dev/sde1
    /dev/sde1:
              Magic : a92b4efc
            Version : 00.90.00
               UUID : 22de433d:78efb608:be909337:4a7ae5f9 (local to host malamut-desktop)
      Creation Time : Tue Jan  5 21:26:49 2010
         Raid Level : raid5
      Used Dev Size : 732571904 (698.64 GiB 750.15 GB)
         Array Size : 2197715712 (2095.91 GiB 2250.46 GB)
       Raid Devices : 4
      Total Devices : 4
    Preferred Minor : 0
    
        Update Time : Mon May 17 23:26:35 2010
              State : clean
     Active Devices : 2
    Working Devices : 2
     Failed Devices : 1
      Spare Devices : 0
           Checksum : 10e9bfab - correct
             Events : 154447
    
             Layout : left-symmetric
         Chunk Size : 64K
    
          Number   Major   Minor   RaidDevice State
    this     3       8       65        3      active sync   /dev/sde1
    
       0     0       0        0        0      removed
       1     1       8       17        1      active sync   /dev/sdb1
       2     2       0        0        2      faulty removed
       3     3       8       65        3      active sync   /dev/sde1

    Собственно тут вас должен интересовать порядок следования компонент. В моём случае его можно «выцепить» из первого вывода и он выглядит так:

    sdc1 sdb1 sdd1 sde1
  2. Во вторую проверьте состояние SMART винчестеров и прогоните тесты поверхности. Важно убедиться, что физически винчестеры живы и нет никаких ошибок чтения. Если это не так, то дело дрянь. Протестировать винчестеры можно с помощью Дисковой утилиты, доступной в Ubuntu.
  3. Теперь попробуйте собрать массив как описано в предыдущем параграфе. У меня не получилось:

    # mdadm --assemble --scan
    mdadm: /dev/md0 assembled from 2 drives - not enough to start the array

    Как видно, у меня mdadm считал, что есть только 2 рабочих компоненты массива, а изначально их было 4. И для работы необходимо иметь 3, поскольку у меня был RAID-5.

Итак, вы убедились, что возникла непоправимая ошибка mdadm, что при этом диски в порядке и в автоматическом режиме массив обратно не собрать. Что дальше?

Дальше - действовать на свой страх и риск! Собственно всё, что остаётся сделать - это заново создать массив поверх старого.

Важно не перепутать никаких опций и не изменять порядок дисков!

Самое главное - указать диски в той же последовательности, что и при первичном создании массива. Я эту последовательность выцепил из вывода команды

mdadm -E /dev/sdc1

Итак, пересоздаём массив:

# mdadm --create --verbose /dev/md0 --assume-clean --level=raid5 --raid-devices=4 --spare-devices=0 /dev/sdc1 /dev/sdb1 /dev/sdd1 /dev/sde1
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 64K
mdadm: /dev/sdc1 appears to contain an ext2fs file system
    size=-2097251584K  mtime=Mon May 17 19:33:06 2010
mdadm: /dev/sdc1 appears to be part of a raid array:
    level=raid5 devices=4 ctime=Tue Jan  5 21:26:49 2010
mdadm: /dev/sdb1 appears to be part of a raid array:
    level=raid5 devices=4 ctime=Tue Jan  5 21:26:49 2010
mdadm: /dev/sdd1 appears to be part of a raid array:
    level=raid5 devices=4 ctime=Tue Jan  5 21:26:49 2010
mdadm: /dev/sde1 appears to contain an ext2fs file system
    size=-1828816128K  mtime=Mon May 17 19:33:03 2010
mdadm: /dev/sde1 appears to be part of a raid array:
    level=raid5 devices=4 ctime=Tue Jan  5 21:26:49 2010
mdadm: size set to 732571904K
Continue creating array? 
Continue creating array? (y/n) y
mdadm: array /dev/md0 started.

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

Смотрите также