[SOLVED] SSD+LVM+GRUB2 - взболтать, но не перемешивать
kostik_g 16 декабря, 2013 - 11:53
Собственно, решил проапгрейдить комп и сразу же "сделать красиво". И застрял.
Не могу загрузиться: при загрузке получаю "Not syncing VFS" (или как-то так, пишу по памяти).
Устр-во Загр Начало Конец Блоки Id Система /dev/sdb1 * 2048 411647 204800 83 Linux /dev/sdb2 411648 351651887 175620120 8e Linux LVM
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert home vg -wi-ao---- 40.00g root vg -wi-ao---- 30.00g
menuentry 'Gentoo GNU/Linux' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ebe1994d-447b-4c97-9643-c918faf001f3' { load_video insmod gzio insmod part_msdos insmod ext2 insmod lvm set root='hd1,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1d77b00a-82c7-4212-ab57-64f5c68d0ea9 else search --no-floppy --fs-uuid --set=root 1d77b00a-82c7-4212-ab57-64f5c68d0ea9 fi echo 'Загружается Linux 3.10.17-gentoo …' linux /kernel-3.10.17-gentoo root=/dev/mapper/vg-root ro }
Ну, вроде же все верно, в ядре есть lvm и он в уровне запуска boot. В конфиге граба есть GRUB_PRELOAD_MODULES=lvm и еще добавил явно insmod lvm.
Но, не хочет работать. Пробовал из граб-консоли, но он упорно не видит корень.
Нужен совет, где я не замечаю бревно?
PS и еще не понятно, после чрута и сборки ядра, оно собирается в arch/x86/boot/, но ведь uname показывает 64-битную систему и платформа была выбрана верно.
Так и должно быть и я просто до этого не замечал, или это ошибка?
»
- Для комментирования войдите или зарегистрируйтесь
Если загрузчик может
Если загрузчик может прочитать ядро с диска и передать ему управление, то с настройкой загрузчика и lvm проблем нет.
Остаётся только разобраться с конфигом ядра и initrd, коего я вообще не вижу, но он нужен для активации группы томов LVM.
так очень же хотелось
Очень хотелось уйти от initrd, т.е. я раньше использовал рут на лвм с 1м грабом. И там, да, нужно было делать инитрам генкернелом.
Но, 2й граб же умеет запускаться из логического диска без инитрама?
Задача граба, загрузить ядро
Задача граба, загрузить ядро в память, и передать ему управление. Все. Граб никоим образом не заменяет initrd
Загрузчик умеет читать данные
Загрузчик умеет читать данные с lvm тому, но ядро системы должно так же иметь доступ к устройству с корневой файловой системой. А для этого должна быть активирована группа томов, что можно сделать только в initrd, соберите свой простой initrd, который только и будет, что активировать группу томов и монтировать указанный логический том, если не хотите использовать initrd, полученный средствами genkernel.
Без Initrd не получится.
может быть, задача позволяет
может быть, задача позволяет заменить lvm btrfs'ом? в такой конфигурации не понадобится initrd, достаточно будет root=PARTUUID=X
Я люблю капчу! С ней так удобно…
Либо zfs, ибо btrfs, как-то
Либо zfs, ибо btrfs, как-то не особо стабильна. Правда в случае zfs ТС придётся интегрировать её в ядро.
a без инитрд тоже никак - ибо
a без инитрд тоже никак - ибо только модулями zfs
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Есть флаг "kernel-builtin",
Есть флаг "kernel-builtin", который правда нужно в начале размаскировать в профиле, он позволяет добавить поддержку zfs в ядро, после чего может быть собран монолитно.
спасибо за советы:
1. ZFS же через fuse? как-то не по феншую
2. Т.е. 2граб может прочитать boot раздел на lvm и все? Значит, я размечтался.
3. А можно подробнее про инитрам ручками? А то я пользовался генкернелом поверх ручной сборки ядра, что напрягало.
Может вынести рута из-под ЛВМ и не мучаться?
А что по этому пункту?
Цитата: ZFS же через fuse?
А в интернет сходить сложно ?
Есть версия, работающая через fuse, а есть порт, который работает на уровне ядра. Но этот порт официально ни когда не включат в ядро из-за не совместимости лицензий. Я описал вариант по включению zfs монолитно в ядро, смотри выше.
Загрузчики для того и придуманы, что бы уметь считывать ядро операционной системы и передавать ему управление. И с момента запуска ядра оно само опрашивает оборудование и инициализирует его.
Значит, что кто-то не понимает что такое BIOS/UEFI, загрузчик, операционная система и мало понимает процесс загрузки.
Например это: http://wiki.gentoo.org/wiki/Early_Userspace_Mounting, раньше на en.gentoo-wiki.com была прекрасная статься.
И что же вас напрягало ? Не уж-то команда:
Не вижу проблемы в использовании initrd или написании оного самому.
Так и было. Но даже это не должно вас смущать, если вы конечно собираете ядро в ручную примерно следующими командами:
команда 'make install' как раз скопирует образ ядра из нужного места в /boot.
Огромное спасибо.
Вот это понимание ситуации, снимаю шляпу.
По поводу, загрузчика, раз граб видит ядро, а в ядре уже вкомпилен драйвер lvm, то почему же оно не может грузиться с лвм-тома? Я понимаю, когда я делал инитрам для 1го граба, был бут и корень на лвм, но второй же уже должен читать и передавать управление. Или в чем тогда его новшество?
По поводу инитрама ручками - нет, слишком сложно и выгляди "костыльно".
генкернел я делаю по хэндбуку
А вот тут посмотрю внимательнее, про make install узнал только сегодня, до этого делал всегда:
В общем, опять же по хэндбуку.
Подводя итог, советуете собрать инитрам и это самое простое решение.
Сделаю - отпишусь. Но про граб все же непонятно.
Цитата: По поводу,
Потому, что нужно выполнять команду инициализации LVM тома, что бы создались устройства в /dev/mapper, отсюда следует, что без выполнения 'vgchange -ay' в initrd не обойтись.
В том, что он может "читать" файлы с LVM тома, как следствие /boot может быть на lvm, а не на отдельном разделе или если /boot находится в корне, то и корень может быть на LVM.
Ясно, читаю это как "Я ниасилил".
Заработало
Я, конечно, хотел чуть большего, чтобы не использовать инитрамфс. Когда-то делал рут на лвм и постоянно забывал его создать, приходилось грузиться на старое ядро - мелочь, а напрягала.
Думал, что избавлюсь от этой штуки новым градом, но ошибался.
Нет, просто отложил "на потом" - еще хватит с чем повозиться: сеть не поднялась, микрофон не работает, грабу надо фоновую картинку и русский язык...
Пока почитаю про генкернел, как разберусь с ним, попробую уже и ручками собрать, если это будет удобнее.
Но вот все равно не понятно:
1. грабу в конфиге говорю подгружать модуль ЛВМ
2. ядро гружу вместе с инитрамом, в котором настроен запуск ЛВМ-демона
Так зачем же еще в параметрах загрузки ядра указывать dolvm?
Проверил, без него не работает.
Попробую разобраться.
Цитата:Когда-то делал рут
Если включить монолитно в ядре весь необходимый функционал для доступа к диску и доступа к корневой файловой системе, а именно: драйвер контроллера жёстких дисков, код поддержки LVM и файловой системы корневого раздела, то в таком случае в initramfs можно не включать модули и его можно будет использовать с новым ядром без изменений. Достаточно будет просто указать подгружать его при использовании нового ядра.
Правильно, этим указывается, что нужно загрузить код для доступа к данным на LVM томах. Иначе загрузчик не сможет ничего "прочитать" с LVM тома. Ну и зачем писать в ручную, если есть 'grub2-mkconfig', он сам вам прекрасно "напишет" конфиг заргузчика где будут указаны все необходимые модули.
Если initramfs собран посредством genkernel примерно такой командой:
то, если кто-то прочитал документацию по genkernel, то увидел, что этот параметр "говорит", что в собираемый initramfs нужно поместить статически собранный бинарный файл /sbin/lvm.
Для того, что бы init сценарий в initramfs "увидел" этот параметр и "понял", что нужно выполнить команду
или
для активации групп том LVM, без этого параметра сценарий init не будет вызывать LVM для активации групп томов, даже если в initramfs присутствует бинарник LVM.
Да, в таком случае добавлять на уровень запуска стартовый сценарий LVM не нужно.
И не будет, т.к. не будет вызываться код активации LVM.
Да уж удосужьте себя это сделать. Не только вам станет проще.
:)
Я, скорее про то, что я задал GRUB_PRELOAD_MODULES=lvm в конфиге граба, а не при запуске grub2-mkconfig
Намек понял. Спасибо за подробное объяснение
Тему закрываю
87-й, а ты сам то зфс как
87-й, а ты сам то зфс как нибудь юзал ? :)
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Не могу ответить "Your
Не могу ответить "Your submission has triggered the spam filter and will not be accepted. If you feel this is in error, please report that you are blocked."
Вот только часть сообщения, что хотел написать:
Здесь моё сообщение.
Здесь моё сообщение.
Червон00кий.
Если ты прочитаешь первое
Если ты прочитаешь первое сообщение в теме, да и последующие за моим авторством, то увидишь, что я как раз и советую ТС использовать initrd. Но он не понимает зачем ему он нужен, если у него загрузчик и так умеет считывать данные с LVM тома.
ZFS я лишь упомянул в следствие того, что здесь кто-то уже посоветовал BTRFS, которая, по моему мнению недостаточно стабильна. Я в курсе, что разработчики её усиленно "пилят" и она уже избавилась от ряда проблем. Но насколько я знаю до сих пор так и не написана полноценная утилита для исправления ошибок на файловой системе. Ну и пока всё же стандарт BTRFS остаётся довольно пластичным, поэтому я не вижу целесообразности использования такой ФС, хотя она имеет ряд интересных особенностей. Поэтому я и указал на ZFS, про необходимость большого объёма памяти для её работы я в курсе.
Но всё же мой совет для ТС - это использовать initramfs.
/
Хватит называть
initramfs
старым именем!И без того путаницы хватает.
:wq
--
Live free or die
Для тебя initrd (Initial Ram
Для тебя initrd (Initial Ram Disk) и initramfs (Initial RAM File System) имеет различие ? Некоторые логические отличия, конечно есть, но суть одна и та же.
Маленькое уточнение.
initrd - это loopback (dd создаём файлик нужного размера, losetup подключаем его, форматируем в ext2 например, монтируем, забрасываем содержимое, отмонтируем, отключаем с помощью losetup, запаковываем в gz) устройство. Наверное уже выпилили из ядра.
initramfs - это по сути cpio.gz архив.
Так, что справедливости ради, разница таки есть.
Червон00кий.
Цитата: initrd - это
Я в курсе, не "выпилили".
Я это же и сказал:
А теперь об оставшейся части фразы:
Суть одна, что в Initrd, что в initramfs находится минимальная система для выполнения некоторых действий перед монтированием корневой файловой системы, с другой стороны может находиться и постоянная корневая файловая система.
>cтандарт BTRFS остаётся
>cтандарт BTRFS остаётся довольно пластичным
ну эту лирику можно понимать как угодно (а что Вы имели в виду?). бинарный формат зафиксирован уже давно вроде как.
>недостаточно стабильна
extN, учитывая прошлогодний косяк (лень искать ссылку, но косяк был великим), тоже не так уж стабильна. И не так уж предсказуема в части многих опций, как например bigalloc.
Не место для спора, однако на декстопе использование btrfs имеет плюсы в виде избавления от таких вещей как те же lvm и mdadm, а в данном случае – и от init{rd|ramfs}.
Можно конечно и дракут посоветовать, но он становится такой же монструозный как и генкернел. Кроме того, он сильно требует не забывать случайно UUIDы разделов при замене носителя.
.
Не буду говорить про плюсы btrfs. Их действительно много и они превышают опасения и минусы.
Из досадных минусов
1) можно напороться на отказ системы завершить сборку при восстановлении рейда при отсутствии свободного места в аж 20%, что может выразится в 200G с 1Т диска.
2) временами начинает "тупить". От 2-3 секунд при монтировании, до 10-15 секунд на первом доступе к файловой системе. Частично лечится -o relatime,space_cache
----------------
Для меня незаменима на корне системы. (portage в squash, а исходники ядра в +aufs). Бэкапы никто не отменял.
GRUB2
+ GPT => linux vmlinuz root=PARTUUID=...
+ subvolume => linux vmlinuz rootfstype=btrfs rootflags=subvol=...
Но сливать в единое на btrfs корень системы с пользовательскими данными, я предпочитаю отсоветовать.
-----------------
И никакими initramfs не пользуюсь
>Частично лечится -o
>Частично лечится -o relatime,space_cache
хм, relatime ЕМНИП по умолчанию, а лечить как раз должно noatime, не? Сам проблему не встречал, но в вики ихней как-то натыкался на что-то подобное. А вот про space_cache – есть и space_cache и nospace_cache опции. одна включает, другая выключает. А по умолчанию непонятно что именно.
Kevol написал(а): 2)
Если монтировать с space_cache, то после аварийного завершения работы при первом монтировании система будет перестраивать кеш, что и выливается в тормоза при старте. Длительность перестроения напрямую зависит от размера диска, и в моем случае, на 500ГБ томе занимало до 10 минут.
/0
У меня иногда создаётся впечатление, что народ тут мыслит, что поменять таблицу разделов, формат всего и вся - это как два пальца об асфальт. Далеко не у всех есть возможность забекапить полностью весь хард.
Червон00кий.
а почему не как два пальца?
а почему не как два пальца? если, конечно, есть неудаленный доступ? Да и не «забэкапливать», а «бэкапить».