LINUX.ORG.RU
ФорумAdmin

Как загрузить linux с uefi?

 ,


0

1

Есть старый сервер, который пока не хотелось бы выводить из эксплуатации. В него добавлены накопители чтобы сделать raid. Подключенные файловые системы перенесены без видимых проблем. Для непосредственно системы, /boot и /boot/efi сделаны копии из деградированных массивов (для последний двух – с метаданными 0.9). Дошло до загрузки.

Текущая загрузка, насколько я могу судить, происходит через uefi. После F12 получаю меню загрузки под названием «GYGABYTE - UEFI DualBIOS», в котором OpenVZ, четыре диска и Enter Setup. При этом загрузиться можно только через первый пункт «OpenVZ», при выборе любого из дисков не находит загрузочного устройства. Из этого я делаю вывод что grub не установлен.

Также, при попытке установить grub получаю ошибку grub2-install: error: /usr/lib/grub/x86_64-efi/modinfo.sh doesn't exist. Please specify --target or --directory. Если поискать modinfo.sh, то находится только /usr/lib/grub/i386-pc/modinfo.sh /boot/grub2/i386-pc/modinfo.sh. Доустановить недостающее не представляется возможным, потому что репозитарии OpenVZ в целом уже закончились.

Есть ли в такой ситуации шанс загрузиться с raid или смириться и оставить как есть?

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

Система работает и даже слегка используется, то есть перевожу на ходу. Но перезагружать возможность есть, поэтому проверял загрузку с отдельных накопителей.

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

Да, деградированное зеркало сделал, перезагружается, монтируется. Теперь вопрос только в загрузке. А старым диском потом дополню массив.

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

Проверь для начала таблицу разделов старого диска и нового …

и фраза:

в котором OpenVZ, четыре диска и Enter Setup.

сколько всего дисков, опять запутался :(

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

А, да, я не уточнил, дисков четыре. Насколько я понимаю, выбор «OpenVZ» это UEFI. Про него я почти не знаю, но больше этому быть просто негде.

Таблицы разделов совпадают за исключением типов разделов (на новом установлены в «Linux RAID»)

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

Да, разметка gpt.

# fdisk -l  /dev/sd[cb]
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sdb: 500.1 GB, 500107862016 bytes, 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: CD47BC4E-4CF3-4FF0-A4CC-638CD105A36F


#         Start          End    Size  Type            Name
 1         2048      2099199      1G  Microsoft basic
 2      2099200      2508799    200M  EFI System      EFI System Partition
 3      2508800     14569471    5.8G  Linux RAID
 4     14569472    924344319  433.8G  Linux RAID
 5    924344320    976773119     25G  Microsoft basic
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sdc: 500.1 GB, 500107862016 bytes, 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: gpt
Disk identifier: C076B77E-523A-41E2-8B2A-0C23DD4C1885


#         Start          End    Size  Type            Name
 1         2048      2099199      1G  Linux RAID
 2      2099200      2508799    200M  Linux RAID
 3      2508800     14569471    5.8G  Linux RAID
 4     14569472    924344319  433.8G  Linux RAID
 5    924344320    976773119     25G  Linux RAID
sin_a ★★★★★
() автор топика
Последнее исправление: sin_a (всего исправлений: 1)
Ответ на: комментарий от sin_a

Стоп. Таблицы разделов должны совпадать. EFI ищет ESP раздел (vfat32) с него и …

Раид то софтверный надеюсь …

и там еще глянь начальный grub.cfg должен валяться в EFI разделе …. старая ось, диск другой и уже должно может там напрямую hd0,1 воткнули.

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

Да, это mdadm. Там действительно vfat и копия исходной файловой системы. Насколько я читал, его можно положить в зеркало при условии метаданных 0.9 (при этом метаданные пишутся в конец раздела). Сегодня попробую вернуть тип EFI и перезагрузиться.

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

В общем:

/dev/sdb5           25G  2.8G   21G  12% /
/dev/sdb1          976M  109M  801M  12% /boot
/dev/sdb2          200M  9.8M  191M   5% /boot/efi

/dev/md3            25G  2.8G   21G  12% /mnt/raid
/dev/md4           992M  111M  815M  12% /mnt/raid/boot
/dev/md5           200M  9.8M  190M   5% /mnt/raid/boot/efi
sin_a ★★★★★
() автор топика
Ответ на: комментарий от sin_a

По идее тебе еще в fstab на рейде надо прописать новые uuid-ы и перегенерить initramfs. А потом сделать grub-install на каждый из дисков в рейде. Uefi ведь не знает ни про какой mdadm. Он видит два отдельных диска и грузится с одного из них, если видит правильный esp раздел.

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

Он лежит в неожиданном месте: /boot/efi/EFI/virtuozzo/grub.cfg

Вот содержимое без комментариев:

set pager=1
if [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi
function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}
function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe  
    insmod vga  
    insmod video_bochs
    insmod video_cirrus
  fi
}
terminal_output console
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=5 
else
  set timeout=5 
fi
set tuned_params=""
set tuned_initrd=""
if [ -f ${prefix}/user.cfg ]; then
  source ${prefix}/user.cfg
  if [ -n "${GRUB2_PASSWORD}" ]; then
    set superusers="root"
    export superusers
    password_pbkdf2 root ${GRUB2_PASSWORD}
  fi
fi
menuentry 'Virtuozzo 7.0.8 (3.10.0-862.11.6.vz7.64.7)' --class openvz --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-862.11.6.vz7.64.7-advanced-2f982a73-3ab2-44b3-81a7-89443e6702df' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='hd1,gpt1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1  6a23dfc7-3791-4c27-9c61-a720c2c1c9df
        else
          search --no-floppy --fs-uuid --set=root 6a23dfc7-3791-4c27-9c61-a720c2c1c9df
        fi
        linuxefi /vmlinuz-3.10.0-862.11.6.vz7.64.7 root=UUID=2f982a73-3ab2-44b3-81a7-89443e6702df ro crashkernel=auto quiet
        initrdefi /initramfs-3.10.0-862.11.6.vz7.64.7.img
}
menuentry 'Virtuozzo 7.0.8 (0-rescue-94db05b042d047609677703b94a3950e)' --class openvz --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-94db05b042d047609677703b94a3950e-advanced-2f982a73-3ab2-44b3-81a7-89443e6702df' {
        load_video
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='hd1,gpt1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1  6a23dfc7-3791-4c27-9c61-a720c2c1c9df
        else
          search --no-floppy --fs-uuid --set=root 6a23dfc7-3791-4c27-9c61-a720c2c1c9df
        fi
        linuxefi /vmlinuz-0-rescue-94db05b042d047609677703b94a3950e root=UUID=2f982a73-3ab2-44b3-81a7-89443e6702df ro crashkernel=auto quiet
        initrdefi /initramfs-0-rescue-94db05b042d047609677703b94a3950e.img
}
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi

Меня смущает то, что в меню выбора загрузочного носителя (F12) есть пункт OpenVZ, но при этом:

# grep -l -R 'OpenVZ' /boot/
/boot/grub2/themes/virtuozzo/theme.txt
/boot/grub2/grub.cfg.new
/boot/config-3.10.0-862.11.6.vz7.64.7

Это записано в nvram? Но, с другой стороны, при загрузке явно есть меню grub.

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

С fstab это проще всего и если упустить то сразу проявится при загрузке. Вызов grub2-install завершается с ошибкой, он не находит modinfo.sh. Второй (новый) раздел для efi вернул, пробовать с ним буду уже завтра, сегодня не дошёл.

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

Это записано в nvram?

Скорее всего, смотрите вывод efibootmgr, можно с опцией '-v'. Так, получается, что ваш uefi, по клавише F12 выводит список из меткок (имён) всех записей в nvram, плюс для каждого диска, но на диске ищет ESP-раздела и загрузчик по умолчанию ( /EFI/BOOT/BOOTX64.EFI ). У вас на части дисков нет ESP, а на других нет загрузчика по умолчанию.

при загрузке явно есть меню grub

Ну, наверное, grub установлен и в nvram записан под имененм OpenVZ. Можете из меню этого grub перейти в командную строку, там набрать ″echo $prefix″, будет понятно, куда установлен grub, где ищет свой config-файл. Потом для проверки можно поискать эту сроку в EFI-файле
strings *.efi | grep grub или grep virtuozzo.

при условии метаданных 0.9 (при этом метаданные пишутся в конец раздела)

Метаданные 1.0 тоже пишутся в конец раздела. Раздел ″Linux RAID″ был нужен только, чтобы RAID собирался ядром (и метаданные 0.9), но это давно умерло и RAID собирается скриптом из initramfs, которому без разницы на тип раздела.

Нужен ли вам RAID на ESP непонятно. Если grub берёт свой конфиг ($prefix) с ESP-раздела, можно ведь просто на каждый ESP раздел скопровать grub под именем загрузчика по умолчанию, а в конфиге прописать, что загружать grub.cfg с raid раздела. И больше на ESP не лазить, и не монтировать.

Иначе вам обязательно нужен рабочий grub-install, чтобы он сформировал *.EFI-файл, в котором $prefix прописан на идентификатор RAID'а (mduuid). И тогда, наверное, тоже лучше ставить grub загрузчиком по умолчанию, чтобы каждый диск не прописывать в nvram.

EFI-разделы в любом случае должны быть ESP, иначе с них загрузки не будет.

репозитарии OpenVZ в целом уже закончились.

Ну, grub достаточно изолированный, можно из исходников собрать, можно попробовать взять пакет от другого дистра, где такие же версии libc и liblzma. Или вобще попробовать от другого дистра с такой же версией grub взять /usr/lib/grub/x86_64-efi/.

mky ★★★★★
()

Ты точно ищешь ответ на вопрос, что в заголовке темы?..

получаю ошибку grub2-install: error: /usr/lib/grub/x86_64-efi/modinfo.sh doesn’t exist… находится только /usr/lib/grub/i386-pc/modinfo.sh /boot/grub2/i386-pc/modinfo.sh.

Система устанавливалась в легаси-режиме. Поэтому, пакет «грубЕФИ» в ней не установлен. Никаким grub-install ты не сможешь установить грубЕФИ.

Как ниже советуют, хорошо-бы посмотреть загрузочные записи в nvram. Но по этой-же причине, вероятно отсутствие efibootmgr.

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

2 2099200 2508799 200M EFI System EFI System Partition

Что это?

На ESP копируешь все файлы грубЕФИ, включая конфиг. И не нужны никакие grub-install, и до фени, в каком режиме была установлена система. А уж имея ЕФИ-загрузчик, сможешь загрузить что угодно. Здесь только вопрос к твоему конкретному УЕФИ, заставить его увидеть ЕФИ-загрузчик.

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

Я же писал выше, думаю он отзеркалил хдд, а старый оставил на месте. И думается что малый grub.cfg у него старый и до сих пор указано hd0.

anonymous
()
Ответ на: комментарий от andytux
# efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0002
Boot0000* OpenVZ        HD(2,GPT,2b4cc65d-3efd-4f00-8053-6c07f3830802,0x200800,0x64000)/File(\EFI\virtuozzo\shimx64.efi)
Boot0002* Hard Drive    BBS(HD,,0x0)AMGOAMNO........o.W.D.C. .W.D.5.0.0.0.A.A.K.X.-.0.0.E.R.M.A.0....................A...........................>..Gd-.;.A..MQ..L. . . . .W. .-.D.M.W.2.C.0.E.5.8.7.3.9.7......AMBOAMNO........o.W.D.C. .W.D.1.0.0.3.F.B.Y.X.-.0.1.Y.7.B.1....................A...........................>..Gd-.;.A..MQ..L. . . . .W. .-.D.C.W.W.A.3.3.5.3.6.8.4.2......AMBOAMNO........o.S.E.A.G.A.T.E. .S.T.1.0.0.0.N.M.0.0.1.1....................A...........................>..Gd-.;.A..MQ..L.1.Z.3.N.M.Y.R.0. . . . . . . . . . . . ......AMBOAMNO........o.S.T.5.0.0.D.M.0.0.2.-.1.B.D.1.4.2....................A...........................>..Gd-.;.A..MQ..L. . . . . . . . . . . . .3.Z.7.T.5.W.E.1......AMBO

И, кроме того, при загрузке узнаваемое меню grub.

Но при выборе любого из накопителей нет загрузочного устройства, то есть без uefi точно не обошлось.

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

Вывод efibootmgr см. выше.

Разобрал два массива (/boot, /boot/efi), скопировал файлы с исходных. Так то на них действительно никакой raid не нужен, это всё практически законсервировано, перестраховался но не в ту сторону.

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

Boot0000* OpenVZ HD(2,GPT,2b4cc65d-3efd-4f00-8053-6c07f3830802,0x200800,0x64000)/File(\EFI\virtuozzo\shimx64.efi)

Какой-то ЕФИ-загрузчик есть. И вроде как на sdb. Вопрос только, насколько он работоспособен и что именно загружает. А что сделать, чтобы от него не зависеть, я написал выше.

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

Собираюсь сейчас туда сходить, попробую перезагрузить, заодно посмотрю и сделаю фото.

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

Ну /boot то, наверное, можно было оставить в зеркале. Там нужно смотреть, понимает ли ваш существующий EFI-груб md-raid, т.e. включён в него модуль mdraid1x.

перестраховался но не в ту сторону.

Ну, зеркало на ESP-разделе не особо нужно, прошивка мат. платы (uefi) всё равно видит их как два отдельных раздела, зеркало из них собирать не будет, просто попытается стартануть с одного из них EFI-загрузчик. А уже он, если сможет, соберёт raid1 массивы и считает с них ядро и пр.

практически законсервировано,

Дак, в подобном случае, ИМХО, надо grub консервировать, а то не понятно, что произойдёт при обновлении grub'а системой. Если два отдельных ESP, то grub, скорее всего будет обновлён толкьо на одном, а если ESP на MDraid, то непонятно что grub пропишет в nvram...

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

Удалить пакет grub из системы? А она точно по зависимостям не захочет его или другой загрузчик? Или почему система не будет знать/обновлять?

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

По зависимостям, зависит от системы, а может даже от конкретной версии системы.

Ну что она будет делать со своим загрузчиком, известно только самой системе. А о чужих она попросту не знает. В её базе не существует чужих загрузчиков и что с ними делать не указывается.

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

andytux ★★★★★
()

У меня в рамдиске не было sd_mod, sg. Можно командную строку указать в EFI образе и grub нафиг не нужен.

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

Дак я не про конкретный случай ТС, а в целом. А том везде «рецептов» много, что делать в случае raid, а про то, что надо воткнуть палки в колёса, чтобы обновление системы не поломало сделаное руками, почти не пишут.

репозитории не действуют.

Ну, дак на собачьих упряжках пакеты подвезут :) Тут же в целом не очень понятная ситуация, grub-efi пакета нет, но он установлен, возможно, кто-то другой админил и переносил эту систему с MBR на UEFI...

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

По идее и ESP можно сделать рейдом. Если метаданные в конце то грузиться можно с любого как с обычного а массив будет собираться после загрузки и монтироваться как остальные. Но это нужно на случай изменений на ФС, чтобы не забыть сделать на второй. В данном случае какие то события на /boot и тем более на /boot/efi достаточно маловероятны, поэтому можно спокойно закрыть глаза. Только проверить что загружается с любого.

Модуль вроде есть:

# grep mdraid1x /boot/efi/EFI/virtuozzo/grubx64.efi
Binary file /boot/efi/EFI/virtuozzo/grubx64.efi matches

Насколько я понимаю, мне сейчас надо добавить загрузочную запись при помощи efibootmgr. Конфиг в chroot я уже сделал: grub2-mkconfig >> grub.cfg

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

grub-efi есть:

# rpm -qa | grep grub | sort
grub2-2.02-0.65.vl7.4.x86_64
grub2-common-2.02-0.65.vl7.4.noarch
grub2-efi-x64-2.02-0.65.vl7.4.x86_64
grub2-pc-2.02-0.65.vl7.4.x86_64
grub2-pc-modules-2.02-0.65.vl7.4.noarch
grub2-theme-openvz-1.4-1.vl7.noarch
grub2-tools-2.02-0.65.vl7.4.x86_64
grub2-tools-extra-2.02-0.65.vl7.4.x86_64
grub2-tools-minimal-2.02-0.65.vl7.4.x86_64
grubby-8.28-23.vl7.x86_64

В переменной PATH его нет, да:

# rpm -ql grub2-efi-x64
/boot/efi/EFI/virtuozzo
/boot/efi/EFI/virtuozzo/fonts
/boot/efi/EFI/virtuozzo/fonts/unicode.pf2
/boot/efi/EFI/virtuozzo/grub.cfg
/boot/efi/EFI/virtuozzo/grubenv
/boot/efi/EFI/virtuozzo/grubx64.efi
/boot/grub2/grubenv
/etc/grub2-efi.cfg
sin_a ★★★★★
() автор топика
Ответ на: комментарий от andytux

Ну это стандартная процедура, все вопросы загрузчика делать в новой системе в chroot.

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

Если метаданные в конце

Как бы да, но только здесь Вопрос по организации RAID-массива для десктопа на Debian (комментарий) пугали, что прошивка (uefi) имеет право писать на ESP-раздел. Тогда по правильному будет после загрузки собирать с чеком/синхом это райд.

добавить загрузочную запись при помощи efibootmgr.

Да, и, возможно, делать это при переключении НЖМД на другой порт.

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

Ну, может не grub2-efi, а grub2-efi-modules, я в тонкости разбиения груб на rpm-пакеты не вникал. Просто, в каталоге /usr/lib/grub/x86_64-efi/ должны быть файлы-модули, из них собирается core.img, который grubx64.efi. То есть у вас как-то непонятно установлен grub, что он не может grub-install для efi выполнить. Может, конечно, просто косяки пакетного менеджера.

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

Пример.

Дано: система А, с загрузчиком А; система Б, с загрузчиком Б.

Система А обновляет только загрузчик А. Загрузчик Б она никак не затрагивает. Система А даже не знает о Б. Но, загрузчиком Б можно загрузить систему А. А может быть система без загрузчика и может быть загрузчик без системы. И любым загрузчиком можно загрузить любую систему.

А если загрузчик «вне системы», не нужно монтирование /boot/efi. Система при всей своей вредности не сможет навредить загрузчику «вне системы».

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

Ну, это видимо потому что Virtuozzo, им можно. OpenVZ это, конечно, уже история (хотя я разбираясь с этим случаем узнал что у них даже 9 версия вышла: https://download.openvz.org/virtuozzo/releases/), но это действительно целая эпоха. Вообще, современные контейнеры в значительной степени на их наработках стоят.

Наверно собрали всё статически.

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

не сможет навредить загрузчику

Удалить его запись из nvram или переключить default на себя? Я не знаю, что делает по умолчанию grub-install (--no-nvram отдельная опция), и что ещё могут в скрипатх обновления понаписать. То есть загрузчику Б не навредили, но при перезагрузке системы будет загрузчик A, не то, что хотелось.

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

Вы grub.cfg проверьте, что там правильные uuid прописались. Если вы делаете boot не raid'ом, то у вас там другая ФС, другой uuid должен быть в строке «search --no-floppy --fs-uuid --set=root».

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

Мне надо ещё дойти до факта загрузки. Разобраться с конфигами уже проще.

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

Как обычно, второстепенный, архивный сервер отъехал куда-то вбок, подождать. И надо будет ещё почитать про efibootmgr. Как правильно туда писать чтобы перестать беспокои^W^W получить ожидаемый результат и не окирпичить.

А про переключение на другой порт – странно, неужели от этого может не загружаться? Как во времена lilo, и за что страдали…

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

этого может не загружаться

Точно не помню, я с записью в nvram давно не связываюсь, ставлю grub загрузчиком по умолчанию и нормально.

mky ★★★★★
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария