LINUX.ORG.RU

Загрузиться со старого диска через UEFI

 grub2,


0

2

Диск размечен в GPT, но использовался на машине без UEFI. 2 раздела: ext4 и загрузочный GRUB2. Материнская плата в новой машине не имеет legacy-режима. UEFI shell видит на этом диске 3 раздела BLK0:, BLK1: и BLK2:. Есть ли простой способ загрузитсься с этого диска?

★★★★★

Последнее исправление: question4 (всего исправлений: 3)

Натравить UEFI Shell на загрузочный раздел, указать где лежит ядро и загрузить.

Если нет UEFI Shell, то нужно добавить на диск ESP-раздел, положить туда efistub-ядро или grub2-efi и загрузиться.


Вот поэтому я в последнее время устанавливаю ОС в гибридном режиме, что позволяет грузить её на любой машине, хоть с BIOS, хоть с UEFI, лишь бы оно было amd64.

mord0d ★★★★★
()
Последнее исправление: mord0d (всего исправлений: 1)

Загружается не диск. Загружается система.

Материнская плата в новой машине не имеет legacy-режима

ЕФИ-загрузчик есть? Им загружай систему с любого диска. Что хоть за система? Судя по ext3, совсем не новая. Она может совсем не знать нового железа, на котором ты пытаешься её запустить.

Зачастую, если только ЕФИ-режим, то компьютер может вообще не загружать 32-битные системы.

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

ЕФИ-загрузчик есть? Им загружай систему с любого диска.

Вроде, был в /boot/grub. Что grub2 скопировал в свой раздел – не знаю.

Что хоть за система? Судя по ext3, совсем не новая. Она может совсем не знать нового железа, на котором ты пытаешься её запустить.

Опечатка, ext4.

Ядро довольно старое – 5.15, но grub2 обновлял в прошлом году.

Зачастую, если только ЕФИ-режим, то компьютер может вообще не загружать 32-битные системы.

Система 64-разрядная.

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

grub2 на старом диске? Но ведь это грубПС. А тебе нужен грубЕФИ.

Наличие каких файлов проверить?

И можно ли сделать это из шелла UEFI?

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

Лучше покажи разметку дисков: «sudo fdisk -l»

Для этого надо переставить в старую машину этот диск и блок питания. Поэтому пока ищу, как без этого обойтись.

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

Если есть ЕФИ-загрузчик, то твой УЕФИ должен его увидеть и создать у себя загрузочную запись. Либо, в УЕФИ искать команду создания загрузочной записи. Либо, создавать загрузочную запись с помощью ЕФИ-шелл.

andytux ★★★★★
()

На этом диске нет ни одного FAT32 раздела. UEFI прошивка ничего не сможет с него загрузить.

Возьми флешку, поставь на неё grub-efi, загрузись с флешки, загрузи свой Линукс с диска из grub shell.

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

Разметку покажи.

Ни железа, ни системы, ни фотографии, ни кофейной гущи. Пока что, даже гадать не по чему.

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

А загрузочный раздел GRUB – не FAT?

Нет, не FAT. Там вообще фс нет. В boot.img в эмуляторе MBR (LBA 0) при установке хардкодится LBA-адрес первого сектора diskboot.img расположенного в этом разделе, который, используя так же захардкоженные при установке LBA, загружает уже core.img располагающийся там же. Если не планируете загружаться с этого диска в legacy-системах, то можно просто форматнуть этот раздел в FAT, переквалифицировав в ESP. Если ESP уже есть на другом накопителе, то можно просто поставить GRUB туда, прописав любой устраивающий bootloader-id и вообще не трогать тот раздел.

Для установки достаточно загрузиться с любого live-образа, выполнить chroot в корень установленной на диске системы, предварительно примонтировав ESP, и обратиться к grub-install задав необходимые аргументы.

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

Разметку покажи.

Для этого потребовалось разобрать почти собранный системный блок :(

# LC_ALL='C' fdisk -l
Disk /dev/sda: 18.19 TiB, 20000588955648 bytes, 39063650304 sectors
Disk model: ST20000NM007D-3D
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: B169FFD2-C1F3-4811-BCD3-4D83F07A9BB9

Device           Start         End     Sectors  Size Type
/dev/sda1         2048 39063445503 39063443456 18.2T Linux filesystem
/dev/sda2  39063445504 39063646207      200704   98M BIOS boot

Про своп ошибся — он был на предыдущем диске. Но тогда непонятно, почему видело 3 блочных устройства. 0-й — sda, 1-й и 2-й — sda1 и sda2?

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

Нет, не FAT. Там вообще фс нет. В boot.img в эмуляторе MBR (LBA 0) при установке хардкодится LBA-адрес первого сектора diskboot.img расположенного в этом разделе, который, используя так же захардкоженные при установке LBA, загружает уже core.img располагающийся там же. Если не планируете загружаться с этого диска в legacy-системах, то можно просто форматнуть этот раздел в FAT, переквалифицировав в ESP. Если ESP уже есть на другом накопителе, то можно просто поставить GRUB туда, прописав любой устраивающий bootloader-id и вообще не трогать тот раздел.

Для установки достаточно загрузиться с любого live-образа, выполнить chroot в корень установленной на диске системы, предварительно примонтировав ESP, и обратиться к grub-install задав необходимые аргументы.

А что сделать, чтобы на всякий случай сохранить возможность загрузки через BIOS? Отформатировать раздел GRUB в FAT32 и установить туда и GRUB, и EFI?

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

Пропиши в любой EFI загрузчик запуск ядра системы со старого диска или руками вводя команды в загрузчике загрузи ядро, передай ему параметры, загрузи initramfs.

Это можно сделать, если ядро на ext4?

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

А что сделать, чтобы на всякий случай сохранить возможность загрузки через BIOS?

Самое простое - установить grub в ESP на другом накопителе, можно даже на сменном, например на флешке, а этот раздел вообще не трогать. Если же организовывать ESP на том же диске, то тогда придётся удалить /dev/sda2 который у Вас 98MiB, что сильно излишне, а на его месте создать два раздела: один на 97MiB и типом C12A7328-F81F-11D2-BA4B-00A0C93EC93B (EFI System), а второй размером 1MiB с типом 21686148-6449-6E6F-744E-656564454649 (BIOS boot). Первый из них отформатировать в FAT, получив ESP, второй не форматировать вообще - он будет хранить образы GRUB для legacy-режима. Затем, уже в chroot-окружении, ESP необходимо будет примонтировать на точку /boot/efi и установить grub для EFI:

grub-install --bootloader-id="<желаемый_id>" --efi-directory=/boot/efi --recheck --target=x86_64-efi

, после чего переустановить grub для legacy-режима:

grub-install --recheck --target=i386-pc /dev/sda

Во время выполнения последней команды, инсталятор GRUB найдёт нужный раздел по его типу, записав туда образы для загрузки, потому этот раздел не нуждается в форматировании - необходимо только правильно задать тип раздела.

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

Нет таких путей. GRUB в EFI-режиме ставится как /boot/EFI/${DISTRO}/grubx64.efi, а по умолчанию EFI-загрузчик может быть установлен как /boot/EFI/BOOTX64.EFI. В любом случае, раздел с каталогом /boot должен иметь файловую систему, читаемую прошивкой EFI, сейчас это FAT32, но при наличии нужного драйвера файловая система может быть любой. Главное, чтобы тип раздела был «EFI System Partition».

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

На legacy-системах – нет, да и на домашних машинах, я думаю, немногие выносили /boot на отдельный раздел. По крайней мере, я не выносил, ибо незачем. Потом, с переходом с lilo на GRUB, я стал делать раздел под последний, с типом «BIOS-boot», но потом в этом отпала необходимость.

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

В любом случае, раздел с каталогом /boot должен иметь файловую систему, читаемую прошивкой EFI, сейчас это FAT32

Вот весь /boot на ESP размещать не требуется, даже более того - это не слишком удобно, так как FAT не сохраняет права POSIX. Достаточно ESP монтировать на точку /boot/efi. В этом случае /boot может быть в корневой фс, либо, если корень не может быть прочитан драйвером встроенным в core.img GRUB-а, например в случае шифрованного корня, или нестандартных опций фс, то /boot можно оформить в виде отдельного раздела, но совсем не обязательно размещать его содержимое на ESP. Для отдельного boot-раздела в GPT даже отдельный стандартный тип есть - BC13C2FF-59E6-4262-A352-B275FD6F7172 (Linux extended boot).

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

Шелл видит диски только как блочные устройства.

Подсунь ему grub2-efi хоть с флэшки, а уже оттуда подгрузи модуль ext4, подмонтируй, укажи ядро и загрузись с ним.

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

Заглянул в ISO Arch’а, а там –

$ ls -l /mnt/
итого 2046
dr-xr-xr-x 1 root root    2048 апр  1 17:29 arch
dr-xr-xr-x 1 root root    2048 апр  1 17:29 boot
dr-xr-xr-x 1 root root    2048 апр  1 17:29 EFI
dr-xr-xr-x 1 root root    2048 апр  1 17:29 loader
-r--r--r-- 1 root root  983808 апр  1 17:29 shellia32.efi
-r--r--r-- 1 root root 1102784 апр  1 17:29 shellx64.efi
$ ls -l /mnt/boot/
итого 14
dr-xr-xr-x 1 root root  2048 апр  1 17:29 grub
dr-xr-xr-x 1 root root  2048 апр  1 17:29 memtest86+
dr-xr-xr-x 1 root root 10240 апр  1 17:29 syslinux
-r--r--r-- 1 root root     0 апр  1 17:29 2025-04-01-14-28-13-00.uuid
ls -l /mnt/boot/grub/
итого 4
-r--r--r-- 1 root root 1024 апр  1 17:29 grubenv
-r--r--r-- 1 root root 2788 апр  1 17:29 loopback.cfg
ls -l /mnt/arch/
итого 13
dr-xr-xr-x 1 root root 2048 апр  1 17:29 boot
dr-xr-xr-x 1 root root 2048 апр  1 17:30 x86_64
-r--r--r-- 1 root root 1024 апр  1 17:29 grubenv
-r--r--r-- 1 root root 7463 апр  1 17:29 pkglist.x86_64.txt
-r--r--r-- 1 root root   11 апр  1 17:29 version
$ ls -l /mnt/arch/boot/
итого 2
dr-xr-xr-x 1 root root 2048 апр  1 17:29 x86_64
$ ls -l /mnt/arch/boot/x86_64/
итого 164675
-r--r--r-- 1 root root 153306680 апр  1 17:29 initramfs-linux.img
-r--r--r-- 1 root root  15319552 апр  1 17:29 vmlinuz-linux

$ ls -l /mnt/EFI/
итого 2
dr-xr-xr-x 1 root root 2048 апр  1 17:29 BOOT
$ls -l /mnt/EFI/BOOT/
итого 252
-r--r--r-- 1 root root 134144 апр  1 17:29 BOOTIA32.EFI
-r--r--r-- 1 root root 123904 апр  1 17:29 BOOTx64.EFI

Говорю же, нет таких путей. EFI читает BOOTx64.EFI в качестве загрузчика. И потом, причём тут ISO, если речь идёт о ESP-разделе на HDD/SSD?

yars068 ★★★★
()
Ответ на: комментарий от yars068
$ ls -l /mnt/ubuntu-24.04.2-desktop-amd64.iso/boot/grub
total 78
dr-xr-xr-x 1 root root  2048 Jan 27 20:56 fonts
-r--r--r-- 1 root root   583 Feb 15 16:13 grub.cfg
dr-xr-xr-x 1 root root 38912 Jan 27 20:56 i386-pc
-r--r--r-- 1 root root   318 Feb 15 16:13 loopback.cfg
dr-xr-xr-x 1 root root 36864 Jan 27 20:56 x86_64-efi
$ ls -l /boot/grub
total 2424
drwxr-xr-x 2 root root    4096 Oct 28  2024 fonts
-rw------- 1 root root   44087 Feb 28 22:25 grub.cfg
-rw-r--r-- 1 root root    1024 May 25 07:40 grubenv
drwxr-xr-x 2 root root    4096 Oct 28  2024 locale
-rw-r--r-- 1 root root 2411806 Oct 28  2024 unicode.pf2
drwxr-xr-x 2 root root   12288 Oct 28  2024 x86_64-efi

Первое - исо-образ, здесь оба загрузчика. Второе - системный раздел, здесь только грубЕФИ.

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

здесь только грубЕФИ.

Да, в x86_64-efi лежат модули и сопутствующие файлы GRUB-a, но его EFI-бинарник лежит на ESP. Так как у меня ESP монтируется в /boot, то у меня это будет файл /boot/EFI/arch/grubx64.efi. А тут что на убунтовском ISO, что на системном разделе нет файлов, непосредственно загружаемых прошивкой EFI либо BIOS матплаты.

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

Достаточно ESP монтировать на точку /boot/efi. В этом случае /boot может быть в корневой фс

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

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

Непринципиально, но похоже…

…может зависеть от конкретной операционной системы. О чём намекнул в самом первом сообщении, повторил через пару десятков постов. Уже почти сорок постов, но система неизвестна. Поэтому, страдает точность ответов, даже гадать не по чему.

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

Если тебе дан совет - значит можно. Тебе нужен efi загрузчик, который умеет читать с файловой системы ext4, grub2 - умеет.

Какой у тебя - я не знаю. Пробуй, читай документацию.

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

Если тебе дан совет - значит можно.

Выше кое-кто советовал поставить coreboot. Не выясняя, какая мать :)

Тебе нужен efi загрузчик, который умеет читать с файловой системы ext4, grub2 - умеет.

Спасибо, это я уже понял.

Какой у тебя - я не знаю.

Grub2, установленный в неформатированный раздел. То есть надо этот раздел отформатировать в FAT и снова записать туда grub2.

Пробуй,

При ошибке я останусь без компьютера, при том, что работаю из дома. И до очередного релиза 2 недели. И процессор куплен в кредит :) Мне нужно, чтобы с первой попытки заработало.

К вопросу о пробах. Есть загрузочная флешка GParted-1.7.0-1 (последнего). В её меню есть команда chainloader, для загрузки с жёсткого диска, но она не работает, и я не разобрался, как её поправить для новой машины. Команда генерируется этим скриптом: https://pastebin.com/FSR45ccc

читай документацию.

Этим пока и занимаюсь.

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

Я тебе выше уже давал одну ссылку.

есть команда chainloader…

Тебе нужно две строки. Если конечно на том диске действительно есть конфиг груба.

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