Mdadm: различия между версиями
Vaksim (обсуждение | вклад) |
мНет описания правки |
||
(не показано 6 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:mdadm}} | {{DISPLAYTITLE:mdadm}} | ||
[[Категория: | [[Категория: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/ | Для версии 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 (в 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 | Грузимся с Live CD в режиме восстановления (например с Server Light) | ||
Массивы RAID соберутся с именами md127, md126 и т. д., т. к. hostname = localhost and != старое_имя | |||
< | Останавливаем все массивы: | ||
<source lang="bash"> | |||
mdadm -S | for m in /dev/md1[12][0-7]; do | ||
mdadm -S $m | |||
</ | done | ||
</source> | |||
Cобираем | Cобираем массивы со старым именем: | ||
<pre> | <pre> | ||
mdadm -A --homehost=старое_имя --scan | mdadm -A --homehost=старое_имя --scan | ||
Строка 59: | Строка 78: | ||
Подготавливаемся к переименованию. | Подготавливаемся к переименованию. | ||
Добавляем информацию в /etc/mdadm.conf | Добавляем информацию в /etc/mdadm.conf | ||
< | <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 | ||
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 | ||
</ | </source> | ||
В | В метаданных версии 0.9 информация о homehost хранится в UUID рэйда. Необходимо из /etc/mdadm.conf удалить параметр UUID и добавить информацию о всех устройствах, которые используются в массивах. | ||
Необходимо из /etc/mdadm.conf удалить параметр UUID и добавить информацию о всех устройствах которые используются в | <br>В метаданных версии 1.2 информация о homehost храниться в поле name. Необходимо просто удалить параметр name. | ||
В | |||
Необходимо просто удалить | |||
После изменений должно выглядеть примерно так: | После изменений должно выглядеть примерно так: | ||
<pre> | <pre> | ||
Строка 87: | Строка 101: | ||
HOMEHOST новое_имя | HOMEHOST новое_имя | ||
ARRAY /dev/ | ARRAY /dev/md0 metadata=0.90 devices=/dev/sdb | ||
ARRAY /dev/ | ARRAY /dev/md1 metadata=1.2 UUID=137c3ff2:9aefae7b:ee71cb74:442e0b4e | ||
</pre> | </pre> | ||
Cобираем | Cобираем массивы версии 0.9 под новое имя: | ||
< | <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 | ||
</ | </source> | ||
Cобираем рэйды версии 1.2 под новое имя: | Cобираем рэйды версии 1.2 под новое имя: | ||
< | <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 | ||
</ | </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 уже по суперблокам сможет определить, какое устройство в каком массиве. | ||
< | <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_] | ||
</ | </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 | |||
<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 | ||
echo " | |||
FEATURES += mdadm" >> /etc/initrd.mk | |||
make-initrd | |||
</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]
Это означает, что вы забыли:
- Добавить массив в /etc/mdadm.conf.
- Обновить 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