LINUX.ORG.RU
ФорумAdmin

Уронил LVM

 , ,


0

3

Доброй ночи.

При загрузке ошибка device-mapper: reload ioctrl on … failed: invalid argument device-mapper: table … raid: failed to un raid array.

Сервак со следующей конфигурацией:

  1. HDD /dev/sda содержал 2 раздела: sda1 (boot), sda2 (/root) и sda5 (/home) (LVM) по стандарту созданы установщиком Debian 10

  2. HDD2 /dev/sdb на котором зеркало /root, /home с 1го диска, зеркало раздела /sdc1, хвост отформатирован в NTFS

  3. HDD3 /dev/sdc = 1 раздел 512 GB для данных

Собственно все работало с первым хардом, настраивалось, до тех пор пока не было подключено зеркалирование lvconvert -m 1 /dev/vg1/root /dev/sda2 /dev/sdb1 и других описанных выше ново созданных пустых разделов. Первая перезагрузка - комп вылетает в (initramfs) shell в котором ограничено количество доступных команд.

lvm vgscan видит единственную существовавшую группу. lvm pvs видит /dev/sda5, /dev/sdb1, /dev/sdb2, /dev/sdc1 lvm lvs видит home, root, swap_1, test (создан на 100% оставшегося свободного в LVM места), vol500gb (3й хард + его зеркало на большем харде). ls /dev/sd* видит все разделы.

Что делать?

Ответ на: комментарий от anonymous

Чертить не умею.

Диск 1. 3 раздела по дефолту как ставит Debian 10 если выбрать в меню guided LVM или как-то так.

Диск 3 - 1 раздел на не полных 500 Гб

Диск 2 - зеркало /root, /home (эти с 1го диска) + зеркало sdc1 с 3го диска, но поскольку первый 250 (из которых что-то обрезано под системные нужды) то LVM часть там порядка 200, с третьего около 450 итого еще 300 с лишним гигов было задействовано под NTFS который был последним физическим разделом sdb. В конце после разметки и зеркалирования оказалось что на LVM еще есть свободное место, и был создан еще один раздел на 100% free space который оказался порядка 3 Гб. Подробнее сейчас не опишу, я в поезде еду.

Проблема возникла, видимо, в тот момент когда было вызвано lvconvert на раздел LVM vg/root с целью создать его копию на sdb. Всплыла после перезагрузки. Я попытаюсь это сегодня воспроизвести на виртуалке с несколькими эмулируемыми физическими дисками, уверен что будет та же история.

Dima_228 ()

При загрузке ошибка device-mapper: reload ioctrl on … failed: invalid argument device-mapper: table … raid: failed to un raid array.

А можешь показать всю ошибку? Хотя бы фоткой экрана.

  • попробуй загрузиться с livecd/liveusb и попробовать примонтировать все свои LV там. Возможно проблема банально в том, что в initramfs не хватает каких-нибудь модулей ядра.

Либо в том, что командная строка ядра не содержит каких-то параметров, нужных для полной инициализации VG. Кстати покажи её (командную строку ядра).

im-0 ()
Ответ на: комментарий от im-0

Вся ошибка - эта вот фраза где вместо … какие-то непонятные мне цифры, строчки этих ошибок тикают раз в секунду штук 30 после чего идет выход в initramfs

Попробую с live-cd на днях.

Как посмотреть командную строку ядра не знаю, надо искать.

После установки системы и LVM прошло уже 20 перезагрузок и все работало, с тех пор загрузчик никто не трогал.

Еще помню что в initramfs не было /mnt, я его создал и пытался примонтировать /dev/sda5 и еше кого-то но получил invalid file or directory, но это было последнее что я делал перед тем как выдернуть шнур (и выдавить стекло)

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

какие-то непонятные мне цифры

Покажи их, вдруг там что-то важное.

Как посмотреть командную строку ядра не знаю, надо искать.

Либо в конфиге загрузчика (grub2), либо cat /proc/cmdline из шелла initramfs.

После установки системы и LVM прошло уже 20 перезагрузок и все работало, с тех пор загрузчик никто не трогал.

Дело в том, что при некоторых изменениях в дисковой подсистеме нужно пересобирать initramfs, например если для загрузки понадобятся новые модули ядра или какие-нибудь обновлённые конфиги. Это дело в современных дистрибутивах более-менее автоматизировано и делается одной командой. Аналогично с командной строкой ядра: иногда там надо добавить дополнительные опции, например для добавления нового PV, который нужен сразу при загрузке.

im-0 ()
Ответ на: комментарий от im-0

Ошибка отлично воспроизводится. Повторил на виртуальной машине которая с собой есть. Я по памяти в 1 посте допустил пару неточностей, тут исправляюсь.

Последовательность действий:

  1. Установка Debian 10 по стандарту на 1 винт (sda1 = boot, sda2 - extended partition, sda5 - logical volume (LVM: root, home, swap_1)
  2. Добавить 2й харда, на sdc создать 1 раздел sdc1, на sdb раздел sdb1
  3. Добавить в vg диск sdc1
  4. Создать LVM «V5GB» раздел на 99% места sdc1 (хвост нужен для журнала, который лепится на тот же физический диск), убить swap чтобы на 1 харде было место для журнала
  5. Через lvconvert отзеркалировать раздел V5GB с sdc1 на sdb1
  6. Вернуть swap на 100% оставшегося на sda5 места и перезагрузиться.

На этом этапе перезагрузка еще успешна, но в консоли есть ошибки: https://a.radikal.ru/a17/1911/cf/d9edc84a154c.jpg

  1. Снова убрать swap. Отзеркалировать разделы home и root с sda5 на sdb1 (в фоне происходит копирование хотя это видно только по росту размера файла - динамического тома хост машины. Вернуть swap_1 на sda5 на 100% оставшегося места.

После этого перезагрузка уже летит: https://b.radikal.ru/b16/1911/cf/816d63ef36ca.jpg

Вероятно на физическом сервере я мог допустить ошибку и вместо sda5 как источник указал ошибочно sda2 (extended partition), но тут на виртуалке этой ошибки точно не было.

Командная строка ядра: BOOT_IMAGE=/vmzlinuz-4.9.0.7-686 root=/dev/mapper/debian–vg-root ro quiet (она же обязана была быть до зеркалирования - LVM был настроен еще установщиком Debian и название раздела не менялось) Менялось только то что раньше было просто lv_root а теперь lv_root смотрит на lv_root_mimage_0(0),lv_root_mimage_1(0) каждый из которых на отдельном харде.

Вот dmesg: https://c.radikal.ru/c05/1911/7b/ed2a673f74b5.jpg

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

Вот dmesg: https://c.radikal.ru/c05/1911/7b/ed2a673f74b5.jpg

md: personality for level 1 is not loaded!

В общем у тебя в initramfs не хватает модуля ядра для поддержки зеркала/raid1. Соответственно, надо пересобрать initramfs с нужным модулем. Я не использую Debian, но если там всё ещё update-initramfs, то делается это примерно так:

  • Загрузиться с livecd/liveusb.
  • Смонтировать мёртвую систему куда-нибудь (в /mnt/rescue, например).
  • Сделать резервную копию /boot.
  • Зайти в примонтированную систему (chroot).
  • Добавить в /etc/initramfs-tools/modules строку raid1 (подробности в man initramfs.conf).
  • update-initramfs -u -k all -v (подробности в man update-initramfs).

Возможно нужный модуль вообще не надо добавлять вручную в конфиг, и всё само автоопределится, но это не точно. Лишние модули в initramfs никак не помешают.

im-0 ()