Архив мая, 2010

mdadm. Шпаргалка. Часть 1.

mdadm – управляет MD устройствами программного RAID в ОС Linux. На текущий момент поддерживаются следующие типы MD устройств:

  • LINEAR — расширение размера логического диска за счет нескольких физических дисков;
  • RAID0 (striping) — чередование, дисковый массив из 2 или более жёстких дисков с отсутствием избыточности и, как следствие, без обеспечения отказоустойчивости. Информация разбивается на блоки данных и записывается на диски одновременно, количество дисков прямопропорционально росту скорости. При выходе из строя одного из участников теряется информация всего массива. Надежность равна произведению вероятностей нормальной работы всех входящих участников.
  • RAID1 (mirroring) — зеркалирование, запись одних и тех же данных одновременно на разделы участники, что обеспечивает отказоустойчивость при отказе одного из дисков. Содержимое на каждом участнике массива идентично. Для организации RAID1 массива необходимо 2 или более разделов участников.
  • RAID4 — массив из n дисков, данные в котором разбиваются на блоки и распределяются по n − 1 дискам, используется выделенный диск для хранения блоков четности, при вычислении используется код Хемминга. Обеспечивает отказоустойчивость при отказе одного из дисков. Для организации RAID4 необходимо 3 или более разделов участников.
  • RAID5 — массив с обеспечением отказоустойчивости за счет минимальной избыточности. Блоки данных и контрольные суммы циклически записываются на все диски массива, нет асимметричности конфигурации дисков. Обеспечивает отказоустойчивость при отказе одного из дисков. Объем дискового массива RAID5 равен (n-1) разделов. Для организации RAID5 массива необходимо 3 или более разделов участников.;
  • RAID6 — похож на RAID5, но имеет более высокую степень надежности — под контрольные суммы выделяется емкость 2-х дисков, рассчитываются контрольные суммы по 2 различным алгоритмам; Обеспечивает работоспособность после выхода из строя двух дисков. Для организации массива требуется минимум 5 дисков. Использование RAID6 вызывает как правило 10-15 % падение производительности, по сравнению с аналогичными показателями RAID5, что связано с увеличением количества операций необходимых для обеспечиения расчета и записи 2 контрольных сумм в отличие от одной.
  • MULTIPATH — не использует технологию программного RAID, предоставляет несколько логических устройств, каждое из которых представляет собой путь к одному физическому устройству хранения;
  • FAULTY — псевдо RAID-массив, состоит только из одного физического раздела.

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

Для создания программного RAID-массива необходимо, использовать существующие разделы на физическом носителе. Тип разделов, которые будут входить в RAID-массив предпочтительно использовать FD (Linux RAID autodetect). Все операции по созданию, удалению и изменению разделов можно выполнить с помощью fdisk. Просмотреть таблицу разделов

# fdisk -l /dev/sda

Disk /dev/sda: 73.4 GB, 73407868928 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1912    15358108+  fd  Linux raid autodetect
/dev/sda2            1913        4462    20482875   fd  Linux raid autodetect
/dev/sda3            4463        4717     2048287+  fd  Linux raid autodetect
/dev/sda4            4718        8924    33792727+  fd  Linux raid autodetect

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

# sfdisk -d /dev/sda | sfdisk /dev/sdb

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

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

# mdadm --create /dev/md3 --level=0 --raid-devices=2 /dev/sda3 /dev/sdb3
# mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2
# mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sd[cde]1

Добавление в RAID

# mdadm /dev/md1 --add /dev/sdb1

Конфигурационный файл mdadm.conf

Информация о участниках RAID массивов используемая при запуске системы должна находится в конфигурационном файле mdadm.conf. Строки, которые следует добавить в этот файл, можно получить при помощи команды:

# mdadm --detail --scan

В случае если необходимо провести операции с существующим RAID0, при его статусе inactive, как например, удаление, в mdadm.conf необходимо закомменитровать(удалить) записи соответствующие данному разделу и перезапустить систему. Данные на разделе при этом теряются.

Наблюдение за состоянием програмного RAID

#  cat /proc/mdstat

Дает нечто похожее на нижеследующий вывод.

Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md1 : active raid1 sdb1[1] sda1[0]
      15358016 blocks [2/2] [UU]

md2 : active raid1 sdb2[1] sda2[0]
      20482752 blocks [2/2] [UU]

md3 : active raid0 sdb3[1] sda3[0]
      4096384 blocks 64k chunks

md4 : active raid0 sdb4[1] sda4[0]
      67585280 blocks 64k chunks

md5 : active raid5 sde1[1] sdd1[0] sdc1[2]
      1953519872 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

md6 : active raid1 sdg1[1] sdf1[0]
      488383936 blocks [2/2] [UU]

unused devices: <none>

Указывается имя логического устройства, состояние active/inactive, тип RAID массива, разделы участники, объем в блоках, и последнее поле [UUU] или подобное, отражает что все разделы участники в норме, если же вместо «U», присутствует «_» подчеркивание, то это означает, что массив рассыпался, и необходимо проводить безотлагательные мероприятия по его восстановлению.

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

# mkfs.ext3 /dev/md3

Ошибка при сборке ядра Linux

Перестало собираться ядро и модули. Возникла необходимость перекомпилировать ядро на работающем сервере. Даю комманду:

# make menuconfig

Получаю такой набор ошибок:


  HOSTCC  scripts/basic/fixdep
In file included from /usr/include/bits/posix1_lim.h:153,
                 from /usr/include/limits.h:145,
                 from /usr/lib/gcc/i386-redhat-linux/4.1.2/include/limits.h:122,
                 from /usr/lib/gcc/i386-redhat-linux/4.1.2/include/syslimits.h:7,
                 from /usr/lib/gcc/i386-redhat-linux/4.1.2/include/limits.h:11,
                 from scripts/basic/fixdep.c:114:
/usr/include/bits/local_lim.h:36:26: error: linux/limits.h: No such file or directory
In file included from /usr/include/sys/socket.h:35,
                 from /usr/include/netinet/in.h:24,
                 from /usr/include/arpa/inet.h:23,
                 from scripts/basic/fixdep.c:116:
/usr/include/bits/socket.h:310:24: error: asm/socket.h: No such file or directory
scripts/basic/fixdep.c: In function ‘use_config’:
scripts/basic/fixdep.c:204: error: ‘PATH_MAX’ undeclared (first use in this function)
scripts/basic/fixdep.c:204: error: (Each undeclared identifier is reported only once
scripts/basic/fixdep.c:204: error: for each function it appears in.)
scripts/basic/fixdep.c:204: warning: unused variable ‘s’
scripts/basic/fixdep.c: In function ‘parse_dep_file’:
scripts/basic/fixdep.c:304: error: ‘PATH_MAX’ undeclared (first use in this function)
scripts/basic/fixdep.c:304: warning: unused variable ‘s’
make[1]: *** [scripts/basic/fixdep] Error 1
make: *** [scripts_basic] Error 2

При чем:

  • make distclean;make menuconfig – результата не дают;
  • Исходники ядра не повреждены (перекачал, распаковал заново);
  • kernel-headers установлены;

Помогла только принудительная переустановка kernel-headers из дистрибутива:

# rpm -Uhv --force kernel-headers-2.6.18-92.el5.i386.rpm