Bootloader install error

bios
luks
gpt
manjaro-architect
bootloader

#1

Здравствуйте, уровень: вторая установка, не могу продвинуться…

Дано bios, gpt и Manjaro-Architect ISO.
Разделы:
1 luks
-1.1 lvm-root ext4 /
-1.2 lvm-swap swap
2 ext4 /boot
3-4-5. разделы файлопомойки

При установке grub получаю убитую запись gpt, которую приходится восстанавливаться с помощью gdisk w . Ошибка title окна error и текст комманды grub-install --target=i386-pc , всё. Проблема (на сколько я загуглил) в https://gitlab.manjaro.org/applications/manjaro-architect/blob/master/lib/util-base.sh , т.е. gpt без uefi + с разделами, не предусмотрен О_о
dd if=/dev/zero of=$DEVICE seek=1 count=2047

Такой вариант не помог grub-install --target=i386-pc --boot-directory=/mnt/boot /dev/sda , на этом знания закончились… По завершению установки GRUB _ и всё…

p.s. возможно кто-то сделает pull request с исправлением бага с delalloc (фс), там в конфигураторе dealloc.


#2

У меня работало с BIOS + MBR. Даже /boot был в контейнере LUKS.
BIOS + GPT не пробовал.


#3

Вам вoзможно пишет и по английски? Если в программе ошибка есть, я хочу что то сделать, но к сожалению я не говорю по русски так хорошо. Я не понимаю проблему полностью.

Правильно или нет: автоматическая установка Grub не работает с LUKS с LVM без UEFI + отдельный /boot?

Я сам тестировал только UEFI, поэтому ошибки возможные.


#4

(google_traslate: извиняюсь за английский, мне лень переписывать это на русский язык / I apologize for English, I’m too lazy to rewrite this in Russian)

Hi, I’ll try to explain.

I use bios(no uefi), GPT->LUKS->LVM. And when i install bootloader, i get error, window title:"Error" and text:"grub-install --target=i386-pc". After this error, GPT die, because of this “dd if=/dev/zero of=$DEVICE seek=1 count=2047” from https://gitlab.manjaro.org/applications/manjaro-architect/blob/master/lib/util-base.sh (this works only if use MBR). I recowery GPT with help gdisk w. But, after compleate full install, grub don’t normal start. I see “GRUB _”, and no actions.

I google this, and find (rus) https://wiki.archlinux.org/index.php/GRUB_(Русский)#.D0.A2.D1.80.D0.B5.D0.B1.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F_GRUB2-BIOS_.D0.BA_GPT .

1 LUKS
-1.2. LVM
----1.2.1. lvmroot /
----1.2.2. lvmswap swap
2. 4MiB partition, EF02 and bios_grub
4-5-6 other partitions

  1. Before install bootloader i use:
    1.1. “gdisk t” and set mark “EF02” to 4MiB partition
    1.2. “partedset num bios_grub on
  2. Install bootloader, and get error, ctrl+alt+f2
  3. Recowery GPT table, gdisk w
  4. add this nano /etc/default/grub GRUB_ENABLE_CRYPTODISK=y
  5. grub-install --boot-directory=/mnt/boot /dev/sda , if don’t use --boot-directory=/mnt/boot i get error.
  6. Click OK in the error windows, and grub compleate install (I don’t know what exactly is being copied at this moment)
  7. After full install, i open grub config and add GRUB_ENABLE_CRYPTODISK=y (this line was disabled), update-grup after save … p.s. lvm, gpt and other are in modules in grub config.
  8. I reboot system, grub started, write my pass (/boot -> crypted, from lvmroot), i get boot menu, and after boot i get “ERROR: device /dev/mapper/lvmroot not found. Skipping fsck.”

On this I have stopped, my knowledge is not enough to continue…


#5

Понимаю. Это команда только для MBR и не для GPT. Надо исправлять.

В этом ситуации, может быть лучше установить Grub вручную?

Кажется, что Вы всё правильно сделали. Не знаю что надо ещё, Bios не мой специальность.

Какие параметры у вас для root?


#6

Здравствуйте, получилось найти причину ошибки “ERROR: device /dev/mapper/lvmroot not found. Skipping fsck.” и получить загрузку ОС.

Причина в том, что после дешифровки /dev/sda1 , где располагается /boot, он(/dev/sda1) почему-то не продолжает быть смонтированным, поэтому и загрузиться не может. Такая логика, для меня была не очевидна.
Решение найдено в этом посте Manjaro Architect: Error [install basepkgs][255] when installing Cinnamon DE . Т.е.
в mkinitcpio.conf в раздел HOOKS добавлен encrypt.
А в GRUB изменил строчку GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:volgroup00 resume=/dev/volgroup00/lvolswap" на основе своих имён/названий, до этого там было GRUB_CMDLINE_LINUX="".
После чего, были обновлены grub и mkinitcpio через gui установщика.

У меня возникло несколько вопросов:

  1. Как сделать нормальный запуск, без двойного ввода кодовой фразы при запуске. 1 раза должно быть достаточно или я чего-то не понимаю?
  2. Чем чревато такое ручное добавление в GRUB_CMDLINE_LINUX, по идее, туда автоматически что-то должно было добавиться из /tmp/.luks_dev во время установки, но этого не произошло. Вообще это баг или вытекает из ручного grub-install?
  3. Почему после установки GRUB в конфиге #GRUB_ENABLE_CRYPTODISK=y, т.е. почему не удалился знак # автоматически, но зато добавился в раздел модулей второй lvm, т.е. стало вот так GRUB_PRELOAD_MODULES="lvm lvm part_gpt part_msdos". Это баг или вытекает из ошибки с убиванием GPT и ручным grub-install ?
  4. Если кто-то сейчас исправит эт(от|и) баги, когда можно ожидать новую версию manjaro-architect или все изменения автоматически подтянуться из репозитория?

Пожалуйста, оформите свой PR или донесите до разработчиков:
Проблему с bios gpt-luks-lvm, такой установщик может грохнуть то, что грохать ему не следует. А лучше добавить проверку, если bios и gpt, то требовать наличие раздела с EF02 и bios_grub, это будет user-friendly , сейчас сделано плохо.
Проблему с delalloc , в установщике при монтировании ошибка dealloc(один символ пропущен), что не позволяет смонтировать раздел.

I have little experience, this is my second install linux in my life.

The problem was not in bios…
I use this Manjaro Architect: Error [install basepkgs][255] when installing Cinnamon DE , and it work, i get welcome sreen. But need to enter a passphrase 2 times. It’s bad…
mkinitcpio.conf in HOOKS add this encrypt
GRUB change this GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:volgroup00 resume=/dev/volgroup00/lvolswap" using the names of my lvm, sdXY. Before: GRUB_CMDLINE_LINUX="".

Can you create PR with fix this bugs? Thx.


#7

Здравствуйте, ознакомился с монтированием по файлу и вводом пароля 1 раз. Всё получилось!

В итоге вышел такой гайд, всё под sudo:

0. Разметка (внимание, установщик грохает первые 2MiB диска, т.к. считает его mbr)
/dev/sda
└─/dev/sda1 UUID=f2154a1e-cc0a-4c9f-9113-fe7ecf8f1489
  └─LUKS
    └─LVM VolGroup00
      ├─lvolroot /
      └─lvolswap swap
├─4MiB раздел без ФС, с метками EF02 и bios_grub
└─другие разделы

1. Подготовка диска
-1.1. gdisk t ставим метку EF02 разделу 4MiB
-1.2. gsidk i проверяем, что метка сменилась
-1.3. parted , в нём set номер_раздела_4MiB(узнать через parted print) bios_grub on
-1.4. parted print проверяем

2. Устанавливаем до ошибки в bootloader
-2.1. Восстанавливаем GPT
--2.1.1. ctrl+alt+f2
--2.1.2. gdisk w, соглашаемся и проверяем, gdisk print
--2.1.3. добавляем строчку nano /etc/default/grub GRUB_ENABLE_CRYPTODISK=y
--2.1.4. устанавливаем GRUB, grub-install --boot-directory=/mnt/boot /dev/sda
--2.1.5. ctrl+alt+f1
-2.2. жмём ОК в окне ошибки
-2.3. устанавливаем до конца

3. Редактируем конфиги для нормального запуска, через GUI установщика (точного названия не помню, но он автоматически обновляет/пересобирает grub и mkinitcpio)
-3.1. grub
--3.1.1. меняем строчку GRUB_ENABLE_CRYPTODISK=y (у меня она была с #, надо удалить #)
--3.1.2. меняем строку GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cryptdevice=UUID=f2154a1e-cc0a-4c9f-9113-fe7ecf8f1489:VolGroup00 resume=/dev/VolGroup00/lvolswap" (UUID можно узнать с помощью ctrl+alt+f2 cryptsetup luksDump /dev/sda1 или blkid)
--3.1.3. меняем строку GRUB_PRELOAD_MODULES="lvm part_gpt part_msdos"
--3.1.4. сохраняем, соглашаемся с обновлением grub, если делали через gui
-3.2. Создаём ключ-файл, для монтирования luks раздела, для ввода пароля 1 раз
--3.2.1. ctrl+alt+f2
--3.2.2. dd bs=512 count=8 if=/dev/urandom of=/mnt/crypto_keyfile.bin (название ключа и его расположение может быть любым)
--3.2.3. cryptsetup luksAddKey UUID=f2154a1e-cc0a-4c9f-9113-fe7ecf8f1489 /mnt/crypto_keyfile.bin #вместо UUID можно указать /dev/sdXY
--3.2.4. cryptsetup luksDump UUID=f2154a1e-cc0a-4c9f-9113-fe7ecf8f1489 #проверяем, что ключ добавился, раздел 0 и 1 будут с ключами
--3.2.5. chmod 000 /crypto_keyfile.bin  # actually, even root doesn't need to access this (устанавливаем права на файл ключей)
--3.2.6. ctrl+alt+f1
-3.3. mkinitcpio (/etc/mkinitcpio.conf) настраиваем/пересобираем, чтоб ключ автоматически монтировался
--3.3.1. меняем строку MODULES="dm-snapshot" #dm-snapshot должен быть в переменной MODULES в /etc/mkinitcpio.conf, иначе система не загрузится если используются снапшоты
--3.3.2. меняем строку FILES=(/crypto_keyfile.bin) #смонтирует файл с ключём в /
--3.3.3. меняем строку HOOKS=(base udev autodetect modconf block encrypt lvm2 filesystems resume shutdown keyboard fsck) #надо удостовериться, что других активных разделов HOOKS нету, иначе эта настройка перезапишется, т.е. все остальные HOOKS должны быть #HOOKS...
--3.3.4. сохраняем, соглашаемся с пересборкой

4. Всё, ребут, проверяем..

п.с. По идее, надо указать cryptroot UUID=f2154a1e-cc0a-4c9f-9113-fe7ecf8f1489 /crypto_keyfile.bin luks в /etc/crypttab и пересобрать mkinitcpio , но у меня в этом случае требовало пароль второй раз(но его можно не вводить, а просто жать enter и всё запустится), если оставить /etc/crypttab пустым, то требует только один раз. К сожалению, так и не понял, как определяется, что ключ находится в /crypto_keyfile.bin и надо с помощью него смонтировать?
Уточнил и этот момент: GRUB_CMDLINE_LINUX_DEFAULT="... cryptdevice=UUID=<device-UUID>:VolGroup00 cryptkey=rootfs:/etc/cryptkeys/keyfile.bin ..." .
п.с.с. плохо, что снапшоты на lvm не будут работать “из коробки” из-за автоматической разбивки на весь раздел, надо править вручную перед установкой…


#8

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.