Mdadm: различия между версиями

Материал из ALT Linux Wiki
мНет описания правки
 
(не показано 6 промежуточных версий 4 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE:mdadm}}
{{DISPLAYTITLE:mdadm}}
[[Категория:mdadm]]
[[Категория:RAID]]
[[Категория:system]]
[[Категория:raid]]


mdadm — утилита для управления программными RAID-массивами в Linux.
= Примеры использования mdadm =
= Примеры использования mdadm =
Описаны также особенности работы с массивами.


=== Отсканировать устройства и собрать массивы (после взлета с live CD) ===
=== Отсканировать устройства и собрать массивы (после взлета с live CD) ===
Строка 10: Строка 10:


=== Переименовать /dev/md127 в /dev/md0 ===
=== Переименовать /dev/md127 в /dev/md0 ===
Отредактируйте /etc/mdadm.conf, затем остановите массив и соберите его заново.
   mdadm --stop  /dev/md127  
   mdadm --stop  /dev/md127  
   mdadm -A /dev/md0 --update=super-minor /dev/sda1 /dev/adb1
Для версии 0.9
   mdadm -A /dev/md0 --update=super-minor /dev/sda1 /dev/sdb1
Для версии 1.2
  mdadm -A --scan


=== Собрать массив в ручную ===
Учтите, что в образе initrd остался прежний /etc/mdadm.conf, поэтому нужно пересобрать initrd:
  make-initrd
 
=== Собрать массив вручную ===
   mdadm -A /dev/md1 /dev/sd{a,b}1
   mdadm -A /dev/md1 /dev/sd{a,b}1


=== Остановить массив ===
=== Остановить массив ===
   mdadm /dev/md0 --stop
   mdadm /dev/md0 --stop
 
 
=== Заменить диск в массиве ===
=== Заменить диск в массиве ===
   mdadm /dev/md0 --fail /dev/sda1
   mdadm /dev/md0 --fail /dev/sda1
Строка 28: Строка 36:


   mdadm -C --level=1 -e0.9 --raid-devices=2 /dev/sdb1 missing
   mdadm -C --level=1 -e0.9 --raid-devices=2 /dev/sdb1 missing
Можно сделать и массив с числом дисков «1»:
  mdadm -C --raid-devices=1 -e0.9 --level=1 --force /dev/md/space1000 /dev/sdc1


Внимание: Если массив будет содержать /boot (в виде отдельной файловой системы, или в составе /), то версия метаданных должна быть 0.9.
''Внимание.'' Если массив будет содержать /boot (в виде отдельной файловой системы, или в составе /), то версия метаданных должна быть 0.9 (в GRUB второй версии это требование снято, но лучше не рисковать).
   
   
==== Потом добавим второй ====
==== Потом добавим второй диск ====
Если массив был создан с числом дисков 2 и вторым "missing", второй диск добавляем одной командой:
   mdadm /dev/md0 --add /dev/sda1
   mdadm /dev/md0 --add /dev/sda1


=== Массив в режиме auto-read-only ===
Если после перезагрузки какой-то массив оказался в режиме read-only, причём /proc/mdstat содержит строки вида:
<pre>
md126 : active (auto-read-only) raid1 sdb6[0] sda6[1]
      458209216 blocks [2/2] [UU]
</pre>
Это означает, что вы забыли:
# Добавить массив в /etc/mdadm.conf.
# Обновить initrd после создания нового массива.


= Изменение hostname =
= Изменение hostname =


Грузимся с Live CD, режим восстановления (например с Server Light)
Грузимся с Live CD в режиме восстановления (например с Server Light)
Рэйды соберутся с именами md121,md122 и т.д. т.к. hostname = localhost and != старое_имя
Массивы RAID соберутся с именами md127, md126 и т. д., т. к. hostname = localhost and != старое_имя
 
Останавливаем все рэйды


<pre>
Останавливаем все массивы:
mdadm -S /dev/md121
<source lang="bash">
mdadm -S /dev/md122
for m in /dev/md1[12][0-7]; do
...
mdadm -S $m
</pre>
done
</source>


Cобираем рэйды со старым именем:
Cобираем массивы со старым именем:
<pre>
<pre>
mdadm -A --homehost=старое_имя --scan
mdadm -A --homehost=старое_имя --scan
Строка 59: Строка 78:
Подготавливаемся к переименованию.
Подготавливаемся к переименованию.
Добавляем информацию в /etc/mdadm.conf
Добавляем информацию в /etc/mdadm.conf
<pre>
<source lang="bash">
echo "HOMEHOST новое_имя" >> /etc/mdadm.conf
echo "HOMEHOST новое_имя" >> /etc/mdadm.conf
mdadm -D --scan >> /etc/mdadm.conf
mdadm -D --scan >> /etc/mdadm.conf
<pre>
cat /etc/mdadm.conf
cat /etc/mdadm.conf
MAILADDR root@localhost
MAILADDR root@localhost
Строка 71: Строка 89:
ARRAY /dev/md/0 metadata=0.90 UUID=edd10aa9:b2be5d13:bfe78010:bc810f04
ARRAY /dev/md/0 metadata=0.90 UUID=edd10aa9:b2be5d13:bfe78010:bc810f04
ARRAY /dev/md/1 metadata=1.2 name=<старое_имя>:1 UUID=137c3ff2:9aefae7b:ee71cb74:442e0b4e
ARRAY /dev/md/1 metadata=1.2 name=<старое_имя>:1 UUID=137c3ff2:9aefae7b:ee71cb74:442e0b4e
</pre>
</source>
 
</pre>


В рейдах версии 0.9 информация о homehost хранится в UUID рэйда.
В метаданных версии 0.9 информация о homehost хранится в UUID рэйда. Необходимо из /etc/mdadm.conf удалить параметр UUID и добавить информацию о всех устройствах, которые используются в массивах.
Необходимо из /etc/mdadm.conf удалить параметр UUID и добавить информацию о всех устройствах которые используются в рэйдах
<br>В метаданных версии 1.2 информация о homehost храниться в поле name. Необходимо просто удалить параметр name.
В редах версии 1.2 информация о homehost храниться в name.
Необходимо просто удалить параметра name.
После изменений должно выглядеть примерно так:
После изменений должно выглядеть примерно так:
<pre>
<pre>
Строка 87: Строка 101:
HOMEHOST новое_имя
HOMEHOST новое_имя


ARRAY /dev/md/0 metadata=0.90 devices=/dev/sdb
ARRAY /dev/md0 metadata=0.90 devices=/dev/sdb
ARRAY /dev/md/1 metadata=1.2 UUID=137c3ff2:9aefae7b:ee71cb74:442e0b4e
ARRAY /dev/md1 metadata=1.2 UUID=137c3ff2:9aefae7b:ee71cb74:442e0b4e
</pre>
</pre>


Cобираем рэйды версии 0.9 под новое имя:
Cобираем массивы версии 0.9 под новое имя:
<pre>
<source lang="bash">
mdadm -S /dev/md0
mdadm -S /dev/md0
mdadm --verbose -A /dev/md0 --update=uuid --scan
mdadm --verbose -A /dev/md0 --update=uuid --scan
</pre>
</source>


Cобираем рэйды версии 1.2 под новое имя:
Cобираем рэйды версии 1.2 под новое имя:
<pre>
<source lang="bash">
mdadm -S /dev/md1
mdadm -S /dev/md1
mdadm --verbose -A /dev/md1 --update=name --scan
mdadm --verbose -A /dev/md1 --update=name --scan
</pre>
</source>


Проверяем
Проверяем
Строка 107: Строка 121:
Для версии 0.9
Для версии 0.9
<pre>
<pre>
   mdadm -D /dev/md0
   mdadm -D /dev/md0 | grep UUID
</pre>
</pre>
должно содержать
должно показать
<pre>
<pre>
  ...
UUID : f09038d2:80fbe89e:e76927ce:3fd4fe03 (local to host новое_имя)
UUID : f09038d2:80fbe89e:e76927ce:3fd4fe03 (local to host новое_имя)
  ...
</pre>
</pre>


Для версии 1.2
Для версии 1.2
<pre>
<pre>
   mdadm -D /dev/md1
   mdadm -D /dev/md1 | grep UUID
</pre>
</pre>
должно содержать
<pre>
<pre>
  ...
   Name : новое_имя:1  (local to host новое_имя)
   Name : новое_имя:1  (local to host новое_имя)
  ...
</pre>
</pre>


Если всё так, то mdadm уже по супрблокам сможет определить какое устаройство в каком масиве.
Если всё так, то mdadm уже по суперблокам сможет определить, какое устройство в каком массиве.
<pre>
<source lang="bash">
mdadm -S /dev/md0
mdadm -S /dev/md0
mdadm -S /dev/md1
mdadm -S /dev/md1
Строка 139: Строка 148:
md1 : active raid1 sdb3[0]
md1 : active raid1 sdb3[0]
       34147200 blocks super 1.2 [2/1] [U_]
       34147200 blocks super 1.2 [2/1] [U_]
</pre>    
</source>


Если hostname будет новое_имя, т.е. уже на реальной машине, определение будет проходить полностью автоматически:
Если hostname будет новое_имя, т.е. уже на реальной машине, определение будет проходить полностью автоматически
<pre>
<pre>
mdadm -A --scan
mdadm -A --scan
</pre>
</pre>
Но при загрузке будет смотреть на HOMEHOST в /etc/mdadm.conf т.к. homehost ему ещё не известен.


Если в реальном рабочем mdadm.conf были данные об этих массивах, но со старым_именем, то его необходимо изменить. Внести в него данные из выхлопа:
Если в реальном рабочем mdadm.conf были данные об этих массивах, но со старым именем, то его необходимо изменить. Внести в него данные из вывода:
<pre>
<pre>
mdadm -D --scan
mdadm -D --scan
Строка 152: Строка 162:
который уже будет содержать новые данные.
который уже будет содержать новые данные.


Монтиируем систему и вносим изменения в initrd
Монтируем систему и вносим изменения в initrd
 
<pre>
<pre>
mount-system
mount-system
Строка 159: Строка 168:
</pre>
</pre>


Изменяем в /etc/sysconfig/network HOSTNAME=<новое имя сервера>
Изменяем в /etc/sysconfig/network переменную HOSTNAME=<новое имя сервера>
 
<pre>
<pre>
echo "homehost <system>" >> /etc/mdadm.conf
echo "homehost <system>" >> /etc/mdadm.conf
Строка 170: Строка 178:
<pre>
<pre>
apt-get install make-initrd-mdadm
apt-get install make-initrd-mdadm
cat /etc/initrd.mk
echo "
# trying to detect modules and features to access to root volume
FEATURES += mdadm" >> /etc/initrd.mk
AUTODETECT = all
make-initrd
FEATURES += mdadm
</pre>
</pre>
{{Category navigation|title=RAID|category=RAID|sortkey={{SUBPAGENAME}}}}

Текущая версия от 17:07, 2 июня 2023


mdadm — утилита для управления программными RAID-массивами в Linux.

Примеры использования mdadm

Описаны также особенности работы с массивами.

Отсканировать устройства и собрать массивы (после взлета с live CD)

 mdadm -A --scan

Переименовать /dev/md127 в /dev/md0

Отредактируйте /etc/mdadm.conf, затем остановите массив и соберите его заново.

 mdadm --stop  /dev/md127 

Для версии 0.9

 mdadm -A /dev/md0 --update=super-minor /dev/sda1 /dev/sdb1

Для версии 1.2

 mdadm -A --scan

Учтите, что в образе initrd остался прежний /etc/mdadm.conf, поэтому нужно пересобрать initrd:

 make-initrd

Собрать массив вручную

 mdadm -A /dev/md1 /dev/sd{a,b}1

Остановить массив

 mdadm /dev/md0 --stop

Заменить диск в массиве

 mdadm /dev/md0 --fail /dev/sda1
 mdadm /dev/md0 --remove /dev/sda1
 mdadm /dev/md0 --add /dev/sda1

Собрать raid1 с одним диском

Иногда при миграции на raid1 бывает нужно.

 mdadm -C --level=1 -e0.9 --raid-devices=2 /dev/sdb1 missing

Можно сделать и массив с числом дисков «1»:

 mdadm -C --raid-devices=1 -e0.9 --level=1 --force /dev/md/space1000 /dev/sdc1

Внимание. Если массив будет содержать /boot (в виде отдельной файловой системы, или в составе /), то версия метаданных должна быть 0.9 (в GRUB второй версии это требование снято, но лучше не рисковать).

Потом добавим второй диск

Если массив был создан с числом дисков 2 и вторым "missing", второй диск добавляем одной командой:

 mdadm /dev/md0 --add /dev/sda1

Массив в режиме auto-read-only

Если после перезагрузки какой-то массив оказался в режиме read-only, причём /proc/mdstat содержит строки вида:

md126 : active (auto-read-only) raid1 sdb6[0] sda6[1]
      458209216 blocks [2/2] [UU]

Это означает, что вы забыли:

  1. Добавить массив в /etc/mdadm.conf.
  2. Обновить initrd после создания нового массива.

Изменение hostname

Грузимся с Live CD в режиме восстановления (например с Server Light) Массивы RAID соберутся с именами md127, md126 и т. д., т. к. hostname = localhost and != старое_имя

Останавливаем все массивы:

for m in /dev/md1[12][0-7]; do
mdadm -S $m
done

Cобираем массивы со старым именем:

mdadm -A --homehost=старое_имя --scan

Cмотрим, что все собралось:

cat /proc/mdadm

Подготавливаемся к переименованию. Добавляем информацию в /etc/mdadm.conf

echo "HOMEHOST новое_имя" >> /etc/mdadm.conf
mdadm -D --scan >> /etc/mdadm.conf
cat /etc/mdadm.conf
MAILADDR root@localhost
PROGRAM /sbin/mdadm-syslog-events
DEVICE partitions
HOMEHOST новое_имя

ARRAY /dev/md/0 metadata=0.90 UUID=edd10aa9:b2be5d13:bfe78010:bc810f04
ARRAY /dev/md/1 metadata=1.2 name=<старое_имя>:1 UUID=137c3ff2:9aefae7b:ee71cb74:442e0b4e

В метаданных версии 0.9 информация о homehost хранится в UUID рэйда. Необходимо из /etc/mdadm.conf удалить параметр UUID и добавить информацию о всех устройствах, которые используются в массивах.
В метаданных версии 1.2 информация о homehost храниться в поле name. Необходимо просто удалить параметр name. После изменений должно выглядеть примерно так:

cat /etc/mdadm.conf
MAILADDR root@localhost
PROGRAM /sbin/mdadm-syslog-events
DEVICE partitions
HOMEHOST новое_имя

ARRAY /dev/md0 metadata=0.90 devices=/dev/sdb
ARRAY /dev/md1 metadata=1.2 UUID=137c3ff2:9aefae7b:ee71cb74:442e0b4e

Cобираем массивы версии 0.9 под новое имя:

mdadm -S /dev/md0
mdadm --verbose -A /dev/md0 --update=uuid --scan

Cобираем рэйды версии 1.2 под новое имя:

mdadm -S /dev/md1
mdadm --verbose -A /dev/md1 --update=name --scan

Проверяем

Для версии 0.9

   mdadm -D /dev/md0 | grep UUID

должно показать

UUID : f09038d2:80fbe89e:e76927ce:3fd4fe03 (local to host новое_имя)

Для версии 1.2

   mdadm -D /dev/md1 | grep UUID
  Name : новое_имя:1  (local to host новое_имя)

Если всё так, то mdadm уже по суперблокам сможет определить, какое устройство в каком массиве.

mdadm -S /dev/md0
mdadm -S /dev/md1
mdadm -A --homehost=новое_имя --scan
cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdb2[0]
      194496 blocks [2/1] [U_]
      
md1 : active raid1 sdb3[0]
      34147200 blocks super 1.2 [2/1] [U_]

Если hostname будет новое_имя, т.е. уже на реальной машине, определение будет проходить полностью автоматически

mdadm -A --scan

Но при загрузке будет смотреть на HOMEHOST в /etc/mdadm.conf т.к. homehost ему ещё не известен.

Если в реальном рабочем mdadm.conf были данные об этих массивах, но со старым именем, то его необходимо изменить. Внести в него данные из вывода:

mdadm -D --scan

который уже будет содержать новые данные.

Монтируем систему и вносим изменения в initrd

mount-system
chroot /mnt/system1

Изменяем в /etc/sysconfig/network переменную HOSTNAME=<новое имя сервера>

echo "homehost <system>" >> /etc/mdadm.conf
mdadm -D --scan >> /etc/mdadm.conf  (и в нем удаляем старые ARRAY)
make-initrd -k <версия ядра> (смотрим в ls -1 /lib/modules)

P.S. если корень на raid v1.2 то

apt-get install make-initrd-mdadm
echo "
FEATURES += mdadm" >> /etc/initrd.mk
make-initrd