[SOLVED] SSD+LVM+GRUB2 - взболтать, но не перемешивать

Собственно, решил проапгрейдить комп и сразу же "сделать красиво". И застрял.
Не могу загрузиться: при загрузке получаю "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 в ядро, после чего может быть собран монолитно.

echo 'sys-fs/zfs -kernel-builtin' >> /etc/portage/profile/package.use.mask 
echo 'sys-fs/zfs kernel-builtin' >> /etc/portage/package.use 
echo 'sys-kernel/geek-sources zfs' >> /etc/portage/package.use 

спасибо за советы:

1. ZFS же через fuse? как-то не по феншую
2. Т.е. 2граб может прочитать boot раздел на lvm и все? Значит, я размечтался.
3. А можно подробнее про инитрам ручками? А то я пользовался генкернелом поверх ручной сборки ядра, что напрягало.

Может вынести рута из-под ЛВМ и не мучаться?

PS и еще не понятно, после чрута и сборки ядра, оно собирается в arch/x86/boot/, но ведь uname показывает 64-битную систему и платформа была выбрана верно.
Так и должно быть и я просто до этого не замечал, или это ошибка?

А что по этому пункту?

Цитата: ZFS же через fuse?

Цитата:
ZFS же через fuse? как-то не по феншую

А в интернет сходить сложно ?

Есть версия, работающая через fuse, а есть порт, который работает на уровне ядра. Но этот порт официально ни когда не включат в ядро из-за не совместимости лицензий. Я описал вариант по включению zfs монолитно в ядро, смотри выше.

Цитата:
Т.е. 2граб может прочитать boot раздел на lvm и все?

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

Цитата:
Значит, я размечтался.

Значит, что кто-то не понимает что такое BIOS/UEFI, загрузчик, операционная система и мало понимает процесс загрузки.

Цитата:
А можно подробнее про инитрам ручками?

Например это: http://wiki.gentoo.org/wiki/Early_Userspace_Mounting, раньше на en.gentoo-wiki.com была прекрасная статься.

Цитата:
А то я пользовался генкернелом поверх ручной сборки ядра, что напрягало.

И что же вас напрягало ? Не уж-то команда:

genkernel ramdisk --lvm 
Цитата:
Может вынести рута из-под ЛВМ и не мучаться?

Не вижу проблемы в использовании initrd или написании оного самому.

Цитата:
А что по этому пункту?

Так и было. Но даже это не должно вас смущать, если вы конечно собираете ядро в ручную примерно следующими командами:

make menuconfig
make -jN bzImage
make -jN modules
mount /boot
make install
make modules_install

команда 'make install' как раз скопирует образ ядра из нужного места в /boot.

Огромное спасибо.

Вот это понимание ситуации, снимаю шляпу.

По поводу, загрузчика, раз граб видит ядро, а в ядре уже вкомпилен драйвер lvm, то почему же оно не может грузиться с лвм-тома? Я понимаю, когда я делал инитрам для 1го граба, был бут и корень на лвм, но второй же уже должен читать и передавать управление. Или в чем тогда его новшество?

По поводу инитрама ручками - нет, слишком сложно и выгляди "костыльно".

генкернел я делаю по хэндбуку

genkernel --lvm --install initramfs

А вот тут посмотрю внимательнее, про make install узнал только сегодня, до этого делал всегда:

make menuconfig
make install && make modules_install
cp arch/x86_64/boot/bzImage /boot/kernel-3.4.9-gentoo

В общем, опять же по хэндбуку.

Подводя итог, советуете собрать инитрам и это самое простое решение.
Сделаю - отпишусь. Но про граб все же непонятно.

Цитата: По поводу,

Цитата:
По поводу, загрузчика, раз граб видит ядро, а в ядре уже вкомпилен драйвер lvm, то почему же оно не может грузиться с лвм-тома?

Потому, что нужно выполнять команду инициализации LVM тома, что бы создались устройства в /dev/mapper, отсюда следует, что без выполнения 'vgchange -ay' в initrd не обойтись.

Цитата:
Или в чем тогда его новшество?

В том, что он может "читать" файлы с LVM тома, как следствие /boot может быть на lvm, а не на отдельном разделе или если /boot находится в корне, то и корень может быть на LVM.

Цитата:
По поводу инитрама ручками - нет, слишком сложно и выгляди "костыльно".

Ясно, читаю это как "Я ниасилил".

Заработало

Я, конечно, хотел чуть большего, чтобы не использовать инитрамфс. Когда-то делал рут на лвм и постоянно забывал его создать, приходилось грузиться на старое ядро - мелочь, а напрягала.
Думал, что избавлюсь от этой штуки новым градом, но ошибался.

Ясно, читаю это как "Я ниасилил".

Нет, просто отложил "на потом" - еще хватит с чем повозиться: сеть не поднялась, микрофон не работает, грабу надо фоновую картинку и русский язык...

Пока почитаю про генкернел, как разберусь с ним, попробую уже и ручками собрать, если это будет удобнее.
Но вот все равно не понятно:
1. грабу в конфиге говорю подгружать модуль ЛВМ
2. ядро гружу вместе с инитрамом, в котором настроен запуск ЛВМ-демона

Так зачем же еще в параметрах загрузки ядра указывать dolvm?

linux   /kernel-3.10.17-gentoo root=/dev/mapper/vg-root dolvm ro 

Проверил, без него не работает.

Попробую разобраться.

Цитата:Когда-то делал рут

Цитата:
Когда-то делал рут на лвм и постоянно забывал его создать, приходилось грузиться на старое ядро - мелочь, а напрягала.

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

genkernel ramdisk --lvm --no-ramdisk-modules
Цитата:
грабу в конфиге говорю подгружать модуль ЛВМ

Правильно, этим указывается, что нужно загрузить код для доступа к данным на LVM томах. Иначе загрузчик не сможет ничего "прочитать" с LVM тома. Ну и зачем писать в ручную, если есть 'grub2-mkconfig', он сам вам прекрасно "напишет" конфиг заргузчика где будут указаны все необходимые модули.

Цитата:
ядро гружу вместе с инитрамом, в котором настроен запуск ЛВМ-демона

Если initramfs собран посредством genkernel примерно такой командой:

genkernel ramdis --lvm

то, если кто-то прочитал документацию по genkernel, то увидел, что этот параметр "говорит", что в собираемый initramfs нужно поместить статически собранный бинарный файл /sbin/lvm.

Цитата:
Так зачем же еще в параметрах загрузки ядра указывать dolvm?

Для того, что бы init сценарий в initramfs "увидел" этот параметр и "понял", что нужно выполнить команду

vgchange -ay

или

lvm vgchange -ay

для активации групп том LVM, без этого параметра сценарий init не будет вызывать LVM для активации групп томов, даже если в initramfs присутствует бинарник LVM.

Да, в таком случае добавлять на уровень запуска стартовый сценарий LVM не нужно.

Цитата:
Проверил, без него не работает.

И не будет, т.к. не будет вызываться код активации LVM.

Цитата:
Попробую разобраться.

Да уж удосужьте себя это сделать. Не только вам станет проще.

:)

Правильно, этим указывается, что нужно загрузить код для доступа к данным на LVM томах. Иначе загрузчик не сможет ничего "прочитать" с LVM тома. Ну и зачем писать в ручную, если есть 'grub2-mkconfig', он сам вам прекрасно "напишет" конфиг заргузчика где будут указаны все необходимые модули.

Я, скорее про то, что я задал GRUB_PRELOAD_MODULES=lvm в конфиге граба, а не при запуске grub2-mkconfig

kostik87 написал(а):
Да уж удосужьте себя это сделать. Не только вам станет проще.

Намек понял. Спасибо за подробное объяснение
Тему закрываю

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.

/

kostik87 написал(а):
я как раз и советую ТС использовать initrd

Но всё же мой совет для ТС - это использовать 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 - это loopback (dd создаём файлик нужного размера, losetup подключаем его, форматируем в ext2 например, монтируем, забрасываем содержимое, отмонтируем, отключаем с помощью losetup, запаковываем в gz) устройство. Наверное уже выпилили из ядра.

Я в курсе, не "выпилили".

Цитата:
Так, что справедливости ради, разница таки есть.

Я это же и сказал:

kostik87 написал(а):
Некоторые логические отличия, конечно есть

А теперь об оставшейся части фразы:

kostik87 написал(а):
но суть одна и та же.

Суть одна, что в 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)

Kevol написал(а):
2) временами начинает "тупить". От 2-3 секунд при монтировании, до 10-15 секунд на первом доступе к файловой системе. Частично лечится -o relatime,space_cache

Если монтировать с space_cache, то после аварийного завершения работы при первом монтировании система будет перестраивать кеш, что и выливается в тормоза при старте. Длительность перестроения напрямую зависит от размера диска, и в моем случае, на 500ГБ томе занимало до 10 минут.

/0

У меня иногда создаётся впечатление, что народ тут мыслит, что поменять таблицу разделов, формат всего и вся - это как два пальца об асфальт. Далеко не у всех есть возможность забекапить полностью весь хард.

Червон00кий.

а почему не как два пальца?

а почему не как два пальца? если, конечно, есть неудаленный доступ? Да и не «забэкапливать», а «бэкапить».

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".