LINUX.ORG.RU
ФорумAdmin

Переезд CentOS asterisk+freepbx LVM на raid1 проблемы

 , ,


0

2

Всем привет! Нужна помощь. Есть сабж на 1 диск. Сейчас прогоняю на VB, точно также на рабочей машине, только с другим по объему диском.

Вот исходные данные:

sda                   8:0    0  20G  0 disk
├─sda1                8:1    0   1G  0 part /boot
└─sda2                8:2    0  19G  0 part
  ├─s7_freepbx-root 253:0    0  17G  0 lvm  /
  └─s7_freepbx-swap 253:1    0   2G  0 lvm
sdb                   8:16   0  20G  0 disk

Переезжать будет на sdb, raid1. Размечаю диск на 2 массива, md0 для boot, md1 для /

mdadm --create /dev/md0 \
--level=1 \
--raid-devices=2 \
/dev/sdb1 missing
mdadm --create /dev/md1 \
--level=1 \
--raid-devices=2 \
/dev/sdb2 missing

Массив будет деградированный, потом добавлю в него старый диск с которого переезд. cat /proc/mdstat показывает 2 массива. Все ок. Переезжаем pvcreate /dev/md1 vgextend s7_freepbx /dev/md1 pvmove /dev/sda2 /dev/md1 vgreduce s7_freepbx /dev/sda2

и получилось так

NAME                  MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda                     8:0    0   20G  0 disk
├─sda1                  8:1    0    1G  0 part  /boot
└─sda2                  8:2    0   19G  0 part
sdb                     8:16   0   20G  0 disk
├─sdb1                  8:17   0    1G  0 part
│ └─md0                 9:0    0 1022M  0 raid1
└─sdb2                  8:18   0   19G  0 part
  └─md1                 9:1    0   19G  0 raid1
    └─s7_freepbx-root 253:0    0   17G  0 lvm   /

Создаю ФС для md0 mkfs.xfs /dev/md0

Копирую старый boot rsync -avH /boot/ /mnt/mdboot/

Записываю UUID boot и / в fstab.

Ставлю GRUB grub2-install /dev/sdb grub2-mkconfig -o /boot/grub2/grub.cfg

Пересобираю initramfs dracut -f -v

Отключаю старый диск. При загрузке GRUB показывается, начинается загрузка. Но потом dracut и все.

ls /dev/sd* показывает только /dev/sda /dev/sda1 …

Где моя ошибка, что делать? Что не учёл ?

Перемещено hobbit из general



Последнее исправление: alvian (всего исправлений: 1)

ls /dev/sd* показывает только /dev/sda /dev/sda1 …

Так ты отключил старый диск, поэтому единственный оставшийся стал sda. А что ты там ожидал увидеть?

cat /proc/mdstat что показывает?

Если что, как устроен dracut я не знаю.

Ставлю GRUB grub2-install /dev/sdb grub2-mkconfig -o /boot/grub2/grub.cfg

Ты записываешь новый конфиг в старый /boot ?

И оформляй цитаты из консоли блоком кода нормально, а то читать сложно.

www.linux.org.ru/help/lorcode.md

www.linux.org.ru/help/markdown.md

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

Так ты отключил старый диск, поэтому единственный оставшийся стал sda. А что ты там ожидал увидеть?

То, что он sda стал это все ок. Я в любом случае по UUID указывал boot и /

alvian
() автор топика
Ответ на: комментарий от firkax

Ты записываешь новый конфиг в старый /boot ? Я копировал содержимое boot с sda1 → md0.

Пересоздавал initramfs командой dracut -f … /boot/initramfs-$(uname -r).img.

Проверял и редактировал /boot/grub2/grub.cfg.

То есть на md0 сейчас лежит обновлённый boot, который включает: ядро, initramfs, grub.cfg. Старый диск sda1 больше не участвует в загрузке. Я его отключил и в загрузке новый sda.

Проблема, похоже, с dracut на старте — не в том, что конфиг старый, а в том, что initramfs ещё не содержит нужные модули для mdraid и LVM, поэтому не может найти root LV.

т.е. у меня dracut видит только sda, но не видит массивы, мне их инициализировать нужно - тогда появляются. И тоже самое с LVM. Похоже я где-то это не указываю (

alvian
() автор топика
Последнее исправление: alvian (всего исправлений: 2)
Ответ на: комментарий от alvian

Пересоздавал initramfs командой dracut -f … /boot/initramfs-$(uname -r).img.

Проверял и редактировал /boot/grub2/grub.cfg.

Ты это всё делал на старойсистеме где в /boot был смонтирован старый sda.

firkax ★★★★★
()
Ответ на: комментарий от bigbit

Я делал, забыл написать в теме.

mkdir -p /mnt/newboot
mount /dev/md1 /mnt/newboot
rsync -avH /boot/ /mnt/newboot/

Создал новый initramfs

dracut -f --mdadmconf --add "mdraid lvm" /boot/initramfs-$(uname -r).img
[root@freepbx ~]# ls -lh /boot/initramfs-$(uname -r).img
-rw------- 1 root root 21M Mar  8 18:27 /boot/initramfs-3.10.0-1127.19.1.el7.x86_64.img

Затем GRUB

grub2-mkconfig -o /boot/grub2/grub.cfg
lsblk
NAME                  MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda                     8:0    0   20G  0 disk
├─sda1                  8:1    0    1G  0 part
└─sda2                  8:2    0   19G  0 part
sdb                     8:16   0   20G  0 disk
├─sdb1                  8:17   0    1G  0 part
│ └─md1                 9:1    0 1022M  0 raid1 /boot
└─sdb2                  8:18   0   19G  0 part
  └─md0                 9:0    0   19G  0 raid1
    └─s7_freepbx-root 253:0    0   17G  0 lvm   /

То, что md1 md0 изменились - это новая установка.

alvian
() автор топика
Ответ на: комментарий от router

И ещё

  1. xfs для grub’а не очень хороший выбор, лучше ext

  2. если ты делаешь /boot на mdadm, то метаданные должны быть 0.9 или 1.0, а по дефолту будет собран 1.2

3. но скорее всего дело не в этом. А в том, что у тебя 2 диска с установленным на нем загрузчиком

У тебя в virtual box’е идет загрузка со старого диска. Там из mbr (да пусть даже gpt) стартует СТАРЫЙ grub и грузит СТАРЫЙ initrd(initramfs?). Ну и как бы вот

upd. а, отключил. тогда этот вариант не подходит

router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от mumpster

ЩИТО?

Тито. В 1.1, 1.2 метаданные расположены в начале диска. Т.е. в загрузчик должен явно уметь работать с рейдом. А в 0.9 и 1.0 в конце. При этом загрузчику не нужно знать ни про какой рейд, для него это будет обычная ФС

              1, 1.0, 1.1, 1.2 default
                     Use the new version-1 format superblock.  This has  fewer
                     restrictions.   It can easily be moved between hosts with
                     different endian-ness, and a recovery  operation  can  be
                     checkpointed  and  restarted.  The different sub-versions
                     store the superblock at different locations  on  the  de-
                     vice, either at the end (for 1.0), at the start (for 1.1)
                     or 4K from the start (for 1.2).   "1"  is  equivalent  to
                     "1.2"  (the commonly preferred 1.x format).  "default" is
                     equivalent to "1.2".

Version : 1.2

Ну, хорошо что уже умеет. А я по привычке буду делать на 1.0

router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от router

Ребята, спасибо за ответы. Я еще раз попробовал все по шагам. Поправьте, пожалуйста, что не так я делаю. Сорри, что пишу подробно, но не хочу ничего упустить. Сейчас у меня так и не удалось загрузиться с деградированного масcива, опять dracut (

  1. Исходная система
 NAME                MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda                   8:0    0  20G  0 disk
├─sda1                8:1    0   1G  0 part /boot
└─sda2                8:2    0  19G  0 part
  ├─s7_freepbx-root 253:0    0  17G  0 lvm  /
  └─s7_freepbx-swap 253:1    0   2G  0 lvm  [SWAP]
sdb                   8:16   0  20G  0 disk
  1. Размечаю sdb fdiskом, создаю 2 массива md0 для boot, md1 для корня. Мета 1.2. CentOS понимает, изучал этот вопрос тоже. Получилось так
NAME                MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda                   8:0    0   20G  0 disk
├─sda1                8:1    0    1G  0 part  /boot
└─sda2                8:2    0   19G  0 part
  ├─s7_freepbx-root 253:0    0   17G  0 lvm   /
  └─s7_freepbx-swap 253:1    0    2G  0 lvm
sdb                   8:16   0   20G  0 disk
├─sdb1                8:17   0    1G  0 part
│ └─md0               9:0    0 1022M  0 raid1
└─sdb2                8:18   0   19G  0 part
  └─md1               9:1    0   19G  0 raid1
  1. Дальше операции по переносу
pvcreate /dev/md1
vgextend s7_freepbx /dev/md1
pvmove /dev/sda2 /dev/md1
vgreduce s7_freepbx /dev/sda2

и получилось вот так

NAME                  MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda                     8:0    0   20G  0 disk
├─sda1                  8:1    0    1G  0 part  /boot
└─sda2                  8:2    0   19G  0 part
sdb                     8:16   0   20G  0 disk
├─sdb1                  8:17   0    1G  0 part
│ └─md0                 9:0    0 1022M  0 raid1
└─sdb2                  8:18   0   19G  0 part
  └─md1                 9:1    0   19G  0 raid1
    └─s7_freepbx-root 253:0    0   17G  0 lvm   /
  1. Операции с boot.
mkfs.xfs /dev/md0
mkdir /mnt/newboot
mount /dev/md0 /mnt/newboot
mount /boot /mnt/oldboot
rsync -avHAX /boot/ /mnt/newboot/

Проверяю

ls /mnt/newboot

Есть файлы ядра (vmlinuz-), initramfs (initramfs-) и grub.

Отмонтируем старый, монтируем новый

umount -l /boot
mount /boot

Получилось так

lsblk
NAME                  MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda                     8:0    0   20G  0 disk
├─sda1                  8:1    0    1G  0 part
└─sda2                  8:2    0   19G  0 part
sdb                     8:16   0   20G  0 disk
├─sdb1                  8:17   0    1G  0 part
│ └─md0                 9:0    0 1022M  0 raid1 /boot
└─sdb2                  8:18   0   19G  0 part
  └─md1                 9:1    0   19G  0 raid1
    └─s7_freepbx-root 253:0    0   17G  0 lvm   /
  1. Определяю UUID
/dev/sda1: UUID="44069977-10e7-4440-b0be-78004737aae5" TYPE="xfs"
/dev/sda2: UUID="OdQMfE-zVDh-hTFV-NjeT-rVR8-BCMX-W1K3eA" TYPE="LVM2_member"
/dev/sdb1: UUID="65efa053-b2b2-1028-c5e1-79b00d82535c" UUID_SUB="91f47059-9115-e78c-4423-05067c40fde0" LABEL="freepbx.sangoma.local:0" TYPE="linux_raid_member"
/dev/sdb2: UUID="96b7f747-bf86-9151-fcfe-5bf6f8666376" UUID_SUB="216a12dd-333c-c395-94cd-ed3470c60316" LABEL="freepbx.sangoma.local:1" TYPE="linux_raid_member"
/dev/mapper/s7_freepbx-root: UUID="dd0db612-8430-4f39-afe9-e48c90cc0d66" TYPE="xfs"
/dev/md1: UUID="iK3JcS-gvAh-8xKm-WsZ5-ESff-plUH-mlfyGt" TYPE="LVM2_member"
/dev/md0: UUID="a600604c-5f27-4c9a-b331-f42992ff53e0" TYPE="xfs"

Для / в /etc/fstab надо использую UUID LVM тома, т.е. UUID=«dd0db612-8430-4f39-afe9-e48c90cc0d66» А для boot UUID=«a600604c-5f27-4c9a-b331-f42992ff53e0»

в fstab добавляю

#
UUID=dd0db612-8430-4f39-afe9-e48c90cc0d66    /       xfs     defaults        0 1
UUID=a600604c-5f27-4c9a-b331-f42992ff53e0    /boot   xfs     defaults        0 2
#/dev/mapper/s7_freepbx-swap swap                    swap    defaults        0 0
  1. Пересобираю initramfs с поддержкой md lvm
dracut -f --add "lvm mdraid" /boot/initramfs-$(uname -r).img $(uname -r)
  1. В /etc/lvm/lvm.conf Добавил
filter = [ "a|/dev/md.*|", "r|/dev/sd[a-z]$|" ]

в секцию devices

  1. Ставлю grub и конфиг
grub2-install /dev/sdb
grub2-mkconfig -o /boot/grub2/grub.cfg

Смущают ошибки:

Installing for i386-pc platform.
grub2-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
grub2-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
Installation finished. No error reported.

Завершаю работы, отключаю старый диск. Пытаюсь загрузиться с нового. Вижу заставку GRUB и выбором ядра. Начинается процесс….ооооочень долго идет. И вываливается опять dracut.

Что я делаю не так, где-то что-то упустил, но я не могу понять где?

alvian
() автор топика
Ответ на: комментарий от alvian

И вываливается опять dracut.

Как уже советовал firkax, посмотри /proc/mdadm, когда загрузка вывалится в dracut. Скорее всего система не хочет грузиться с деградировавшего рейда. Если его можно собрать вручную и продолжить загрузку, дело точно в этом. Дальше гуглить, как это лечится в конкретной версии centos

router ★★★★★
()
Ответ на: комментарий от alvian

grub2-install: warning: Couldn’t find physical volume `(null)’

это просто предупреждение. тем более у тебя grub успешно грузит ядро

а связано с тем же деградировавшим рейдом:

https://serverfault.com/questions/617552/grub-some-modules-may-be-missing-from-core-image-warning

/* TRANSLATORS: This message kicks in during the detection of
   which modules needs to be included in core image. This happens
   in the case of degraded RAID and means that autodetection may
   fail to include some of modules. It's an installation time
   message, not runtime message.  */

вообще, раз это все равно тестовый стенд, кто мешает сразу добавить второй диск?

router ★★★★★
()
Ответ на: комментарий от router

вылезай уже из анабиоза!

это было актуально в 2008 году. 1.0 тогда только появилась.
и да - груб давно умеет в raid. а в от с LVM могу быть заморочки. но видимо поэтому /boot у ТСа отдельно, это решает ВСЕ проблемы.

mumpster ★★★★★
()
Ответ на: комментарий от router

он же написал, что хочет потом 1ый диск обратно вернуть в зеркало

и очевидно, что он на стенде отрабатывает действия на боевом сервере, это похвально, думать до, а не после

mumpster ★★★★★
()
Ответ на: комментарий от router

вообще, раз это все равно тестовый стенд, кто мешает сразу добавить второй диск?

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

alvian
() автор топика
Ответ на: комментарий от mumpster

и да - груб давно умеет в raid. а в от с LVM могу быть заморочки. но видимо поэтому /boot у ТСа отдельно, это решает ВСЕ проблемы

Я бы efi мог использовать, у меня UEFI на матери. Но это же freepbx sangoma, она только с boot работает. Только сейчас они на Debian что-то придумали с UEFI. Насчет ошибок - понял, игнорю.

alvian
() автор топика
Ответ на: комментарий от router

я кстати лет 10 назад переводил центос с одних дисков на другие + обновлял до 7ки. там свой секас был, но вот такого не помню, хотя делал именно через отцепление одного диска (как резервной копии старого) и прицепление нового. но там точно не было LVM, а был ли бут отдельно и был ли он на зрекале - я не помню

mumpster ★★★★★
()
Ответ на: комментарий от alvian

umount -l /boot

Для чего здесь опция -l? Он что, без нее не отмонтируется? Кто-то его держит?

filter = [ «a|/dev/md.*|», «r|/dev/sd[a-z]$|» ]

Для чего добавляешь фильтр в lvm.conf? У тебя же разделы, и метаданные в начале. Это не нужно.

Кстати, какой тип имеют разделы fdisk c RAID?

bigbit ★★★★★
()
Последнее исправление: bigbit (всего исправлений: 1)
Ответ на: комментарий от bigbit

Для чего здесь опция -l? Он что, без нее не отмонтируется? Кто-то его держит?

Не, не держит. В заметках оставил( Без -l все размонтируется успешно.

Для чего добавляешь фильтр в lvm.conf? У тебя же разделы, и метаданные в начале. Это не нужно.

Понял, спасибо!

Кстати, какой тип имеют разделы fdisk c RAID?

boot - ext4 / - xfs

alvian
() автор топика
Ответ на: комментарий от mumpster

Вообщем чудеса творятся. Пересобрал снова. Сделал для boot без массива, просто раздел. В fdisk флаг * поставил, фс ext4, а для / все операции те же самые.

Все скопировалось, dracut пересобрал initramfs, grub без ошибок встал, mkconfig сделал.

Отключил старый диск, загружаюсь - grub resque опять.

Я пришел к выводу, что ядро было собрано не чистым CentOS, а Sangoma + Asterisk + FreePBX. Судя по всему во время первой установки UUID разделов куда-то еще записываются. Поэтому отвал полный. Время потрачено, возни море. Backup нормально из существующей системы не сделать (восстанавливается ооооочень криво, можно сказать никак). Уже подготовился к дедовскому методу. Поставлю сначала чистый Debian, потом все это телефонное барахло) сразу на собранный массив. В VB он отлично создает md для boot и md+lvm для /. При отключении одного из дисков - все загружается, проблем нет. Минус только в том, что кучу настроек надо будет делать вручную. Но учитывая сколько тут времени потеряно - будет быстрее. p.s. Месяц назад похожую систему на Ubuntu переносил - заняло от силы мин 5. Тут просто жесть…. Алл, что думаете?

alvian
() автор топика
Ответ на: комментарий от alvian

Какой дистрибутив и версия дистрибутива?

Отключил старый диск, загружаюсь - grub resque опять.

Я пришел к выводу, что ядро было собрано не чистым CentOS, а Sangoma + Asterisk + FreePBX.

Ну ты же понимаешь, что в этом случае до ядра дело вообще не доходит?

router ★★★★★
()
Ответ на: комментарий от alvian

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

Если возможность есть, то конечно же ставь свежий дистр и мигрируй нормально.

bigbit ★★★★★
()
Последнее исправление: bigbit (всего исправлений: 1)
Ответ на: комментарий от alvian

В зависимости от версии Астериск в центос может использоваться chan_sip модуль, а в новых Астериск уже только pjsip.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 2)
Ответ на: комментарий от bigbit

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

Именно про это я тоже думаю. Запускать проект еще на пару лет, чтобы потом снова переносить - смысла нет. Спасибо за мнение!

alvian
() автор топика
Ответ на: комментарий от kostik87

У меня и сейчас chan_dongle модуль отсутствует, я для свистков (3g модем в режиме voice) его отдельно ставил на астериск. В новом дистрибутиве только pjsip, это я знаю, поэтому сначала попробую на VB установить chan_dongle в любом случае :))

alvian
() автор топика
Ответ на: комментарий от futurama

А зачем этот переезд с lvm на mdadm? lvm умеет в mirror, просто добавь диск и lvchange …

Так у меня системный диск без массива. Я хотел на md raid1, а сверху него LVM. Но тут в любом случае все уперлось в пересборку ядра, grub и прочие радости.

alvian
() автор топика
Ответ на: комментарий от alvian

Я хотел на md raid1, а сверху него LVM

Можно, хорошо, но это лишнее

Так у меня системный диск без массива

Но на lvm, так что просто добавь еще один диск и отзеркаль нужные LV

futurama ★★★★★
()
Ответ на: комментарий от mumpster
[root@freepbx ~]# mdadm --create /dev/md0 --level raid1 --raid-devices 2 /dev/sdb1 missing
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array?

Забирай клоуна обратно ;)

Кстати, похоже что grub2 из centos7 смущает именно тип «fd» вместо «83», а новые метаданные его не смущают. Что-то они накрутили с проверками. Т.к. это старая версия, то копать дальше мне лень, просто добавлю в заметки

router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от router

Собрал тестовый стенд (freepbx16 на centos7, SNG7-FPBX-64bit-1904-2.iso)

  1. увидел, что рейд даже не пытался собраться

без каких-либо проблем загрузился вручную (собрал рейд, активировал lvm тома)

  1. Добавил информацию о рейдах в mdadm.conf, пересобрал initramfs. не помогло

  2. пересобрал initramfs с явным добавлением всего рейдового хлама

[root@freepbx ~]# dracut --mdadmconf --fstab --add="dm dmraid mdraid" --add-drivers="raid1" -v -f

не помогло

  1. дополнительно добавил в kernel cmdline «rd.auto rd.auto=1»

помогло, загрузился. Причем с деградировавшего рейда

router ★★★★★
()
Ответ на: комментарий от router

судя по

./sbin/mdraid_start
./usr/lib/dracut/hooks/pre-trigger/30-parse-md.sh

вместо rd.auto=1 можно явно указать конкретный массив для запуска

    [ -n "$_MD_UUID" ] || getargbool 0 rd.auto || return
if ( ! [ -n "$MD_UUID" ] && ! getargbool 0 rd.auto ) || ! getargbool 1 rd.md -d -n rd_NO_MD; then
    info "rd.md=0: removing MD RAID activation"
    udevproperty rd_NO_MD=1
router ★★★★★
()