LINUX.ORG.RU
ФорумAdmin

Уронил LVM

 , ,


0

2

Доброй ночи.

При загрузке ошибка 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
()
Ответ на: комментарий от 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
()
25 марта 2021 г.
Ответ на: комментарий от im-0

Подыму старую тему, проблема все еще актуальна.

update-initramfs -u -k all -v

выдает

/boot/initrd.img-4.9.0-7-686 does not exist. Cannot update.

До того пытался по https://www.system-rescue.org/lvm-guide-en/Moving-the-linux-rootfs-to-an-LVM-volume/ посмотреть или изменить root= но так и не понял где искать этот конфиг, /etc/grub/default был пуст, поставил grub на live-cd (установлен не был) но толку от этого было мало.

Нужна готовая последовательность действий что прописать. Экспериментировать возможность есть, эта проблема сейчас в точности воспроизведена на виртуальной машине, откатить могу в любой момент, но много времени уходит на чтение нерабочих мануалов и поиска статей, на котроые они ссылаются с давно дохлых доменов в вебархиве (и не всегда успешно). Такое впечатление что никто никогда не использует /root в LVM.

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

/boot/initrd.img-4.9.0-7-686 does not exist. Cannot update.

Видимо за прошедшее время обновилась версия ядра. Возможно при текущей версии ядра должно генерироваться 5.x.y-z-686.

Нужна готовая последовательность действий что прописать.

Она не нужна. Нужно понимание какая у тебя разбивка разделов и что с initrd.

Такое впечатление что никто никогда не использует /root в LVM.

Много людей ставит root раздел на LVM, в том числе я. При это надо понимать что делаешь, а не искать тупо «готовую последовательность команд» (тем более, из левых сайтов)

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

Начальные условия описаны в моем посте за 13.11.19 16:19:57 вот и вся разбивка. После переноса / в LVM как описано выше система больше не загружается. Разбивка sda1 - boot sda2 - extended sda5 - logical, он же LVM на sda, есть еще LVM тома на sdb и sdc. Система не грузится. Я нахожусь в другой системе с LiveCD. После vgscan / lvscan тома видны и их можно смонтировать чтобы внести необходимые правки, но я понятия не имею какие. Конфига grub, упомянутого по ссылке из предыдущего сообщения, в системе нет.

Мне нужно разобраться с этой херней на виртуальной машине чтобы через неделю-две воспроизвести на реальном сервере. Или не трахаться с root разделом на LVM раз с ним столько гемороя и делать плановое резервное копирование его содержимого из под рабочей системы куда-то. В общем надо будет настраивать машину с нуля и надо понимать как чтобы не было таких же проблем.

При это надо понимать что делаешь

Вот так я уже пробовал. Какого хрена слетает загрузка (не случайно, проблема стабильно воспроизводится) я пока так и не понял, потому лучше по инструкциям с «левых сайтов», но чтобы работало.

Dima_228
() автор топика
Последнее исправление: Dima_228 (всего исправлений: 4)

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

Никакой стандартной конфигурации нет. Нужен вывод lsblk и gdisk (fdisk).

Собственно все работало с первым хардом, настраивалось, до тех пор пока не было подключено зеркалирование lvconvert -m 1 /dev/vg1/root /dev/sda2 /dev/sdb1

Здесь что-то пошло не так. Судя по

device-mapper: reload ioctrl on … failed: invalid argument device-mapper: table … raid: failed to un raid array

один из дисков распознаётся как raid массив. Либо, как написали в комментариях выше, при загрузке не хватает какого-то модуля ядра для lvm.

С другой стороны проблема судя по этой информации должна решаться настройкой initrd, потому что он отвечает за монтирование разделов. Если в initrd shell можно активировать lvm разделы и смонтировать их, то я бы копал в сторону конфига lvm по автоматической активации разделов. Причём нужно не только править конфиг в /etc на системном разделе, нужно штатными средствами этот конфиг перенести в initrd. Например в случае dracut есть опция –include /path/to/file (кажется так называется).

Я нахожусь в другой системе с LiveCD.

Возможность активации и монтирования разделов есть в livecd или в initrd shell системы? Если всё подключается через initrd shell, значит необходимые модули в ядре есть, и проблема заключается в настройке lvm внутри initrd. Если всё работает в каком-то другом live cd, то в основном файле образа ядра могут отсутствовать модули.

лучше по инструкциям с «левых сайтов», но чтобы работало А теперь смотрим со стороны на ситуацию. Почитал левые сайты -> слетела загрузка. Может быть лучше брать инфу не с левых сайтов, а из документации?

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

Ну тут скорее по другому было. Почитал левые сайты как настраивать LVM - сделал. Нигде не видел предупреждений о том что / нельзя переносить в LVM2 (в том числе в webmin где это делалось первый раз) потому не ожидал что после перезагрузки система не оживет.

Родная система вываливается со следующими ошибками:

device-mapper: table: 254:14: raid: ailed to run raid array Failed to connect to lvmetad. Falling back to device scanning

(raid тут никогда не было и я его не настраивал)

/dev/mapper/debian–vg-root does not exists. Dropping ti a shell

То есть в initramfs путь к разделу прописался правильный (вместо /dev/sdчто-тотам пусть к lvm разделу) но смонтировать его он не смог.

Внутри initramfs команда ls /dev/sd* видит все физические разделы 3 дисков, в ls /dev/mapper/* видны разделы LVM. Раздел /dev/mapper/debian–vg-root не существует. Есть только

/dev/mapper/debian--vg-root_rimage_0
/dev/mapper/debian--vg-root_rimage_1
/dev/mapper/debian--vg-root_rmeta_0
/dev/mapper/debian--vg-root_rmeta_1

Команды vgscan / lvscan и подобные в initramfs отсутствуют.

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

Команды vgscan / lvscan и подобные в initramfs отсутствуют.

Тогда нужно добавить бинарик lvm в образ initrd (штатные средства зависят от типа inird). После добавления и перезагрузки нужно попробовать выполнить команду vgchange -a y для активации всех разделов lvm (а заодно выполнить lvscan, lvdisplay чтобы посмотреть что происходит) и попытаться смонтировать разделы lvm.

У меня в системе в качестве initrd используется dracut, нужно указать опцию –include для добавления (кажется так, точно не помню - я создал скрипт обновления initrd и запускаю его).

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

У меня на livecd изначально в /dev/mapper было пусто, пока я не прописал vgscan / lvscan. Тут же не пусто, значит lvm отработал? просто какого-то черта 2 зеркала не склеились в один том, не?

В любом случае, нужна информация как добавить бинарик lvm в образ initrd из под livecd (с учетом grub, а не lilo), а то опять вылезет какая-то хрень типа /boot/initrd.img-* does not exist. Cannot update. только потому что в LiveCD отсутствует раздел /boot

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

Тут же не пусто, значит lvm отработал?

Частично отработал. Как я понял из текста (потому что выхлопа консольных программ так и нет, или хотя бы фото) в /dev/mapper появляются какие-то части разделов, но не сами разделы, которые можно монтировать.

В любом случае, нужна информация как добавить бинарик lvm в образ initrd из под livecd (с учетом grub, а не lilo)

Нужно загрузиться с «livecd», примонтировать системный раздел. Далее нужно chroot в системный раздел, там выполнить команды (как будто это загружена основная ось) для создания initrd с нужными настройками - чтобы он включал в свой образ lvm утилиту как минимум (как максимум - ещё нужен конфиг с автоактивированием томов).

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

Скрин вот. К сожалению, виртуализация такая что скопировать нельзя, скролл тоже, на livecd подымать SSH сервер не интересно.

https://prnt.sc/10vails

Слева разница между тем что видит initramfs и livecd выделена красным. Справа команды, оживляющие LVM. после lvconvert вместо root получилось 2 зеркальных копии на 2 физически разных sd* носителях. Если я вызываю lvscan на livecd - они собираются обратно в виртуальные разделы с именами root, home и кто там еще, а в initramfs они видны раздельно, виртуальные разделы не существуют.

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

На левом скриншоте не виден результат выполнения команды lvscan или vgchange -ay.

скролл тоже

tmux или screen стоит добавить в initrd

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

Не, я из под винды работаю, линукс - гость, virtualbox не умеет ни копипаст ни скролл.

Накопал вот это https://unix.stackexchange.com/questions/187236/grub2-lvm2-raid1-boot наиболее близкое к моей проблеме (mirrored LVM root). Я не уверен что мне нужны все 15 упомянутых модулей в /etc/initramfs-tools/modules, но добавил все как написано.

update-initramfs -k all -u -v

падает все с той же ошибкой

/boot/initrd.img-4.9.0-7-686 does not exist. Cannot update.

Пришлось до chroot скопировать содержимое смонтированного отдельно раздела /boot в пустой каталог /boot смонтированного отдельно /root, после чего запустить update-initramfs. Вроде отработало. Теперь переместил новый /boot/initrd.img-* в смонтированный отдельно sda1 а каталог /boot привел в исходное (пустое) состояние. Размонтировал оба тома и перезагрузился. После перебора пароля (блин, забыл какой root ставил 2 года назад) зашел.

Теперь бы еще понять какие из 15 модулей реально нужны, а какими можно не нагружать систему. Или модули initrd не нагружают работающую систему?

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

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

Еще такой вопрос. Вот это при загрузке https://prnt.sc/10vdcyw норма или нет? Система после этой ошибки чуток подумает и переходит к запросу login:

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

Это сообщение указывает на то, что процесс lvmmetad не был запущен при загрузке (кстати, возможно это причина проблемы). У lvm есть два способа работать с разделами - через этот демон, который сам периодически сканирует диски и разделы, и «вручную» через самостоятельное сканирование. Когда демон не запущен, lvm сам сканирует, что замедляет загрузку.

mxfm ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.