Как определить, с какого жесткого диска была загружена система при использовании UEFI?

В системе с x жестким диском с одинаковым разделением каждый диск имеет загрузочный раздел UEFI с установленным флагом загрузки. Во время включения я могу выбрать любой из жестких дисков для загрузки с использованием UEFI.

Как только Ubuntu началась. Как определить, с какого жесткого диска была загружена система?

Неправильный ответ: тот, который содержит раздел, смонтированный на /boot/efi. Это неверно, так как это написано в /etc/fstab при установке Ubuntu. Он не динамический и не указывает на раздел UEFI, который я использовал для загрузки.

2
задан 19 October 2012 в 05:42

2 ответа

Я не проверял это экспериментально, поэтому он может не работать на практике, но утилита efibootmgr возвращает переменную с именем BootCurrent, которая должна идентифицировать загрузчик, запущенный EFI. Например:

$ sudo efibootmgr -v
BootCurrent: 0001
Timeout: 3 seconds
BootOrder: 0000,0001
Boot0000* EFI DVD/CDROM ACPI(a0841d0,0)PCI(14,1)ATAPI(0,1,0)
Boot0001* OsLoader0000  ACPI(a0841d0,0)PCI(11,0)03120a00000000000000HD(1,800,5ede2,2c47c282-ee6e-45de-a5ad-e8658ca67de6)File(\EFI\BOOT\BOOTX64.EFI)

Этот вывод указывает, что система была загружена через запись 0001 (Boot0001). Используемая здесь опция -v в efibootmgr добавляет подробную информацию, которая включает GUID раздела, на котором хранился этот загрузчик - в этом случае 2c47c282-ee6e-45de-a5ad-e8658ca67de6. Обратите внимание, что это GUID раздела , а не UUID файловой системы . AFAIK, единственный способ извлечь данные GUID раздела в Linux - через gdisk, cgdisk или sgdisk. Например:

$ sudo sgdisk -i 1 /dev/sda
Partition GUID code: C12A7328-F81F-11D2-BA4B-00A0C93EC93B (EFI System)
Partition unique GUID: 2C47C282-EE6E-45DE-A5AD-E8658CA67DE6
First sector: 2048 (at 1024.0 KiB)
Last sector: 390625 (at 190.7 MiB)
Partition size: 388578 sectors (189.7 MiB)
Attribute flags: 0000000000000000
Partition name: 'EFI System'

Обратите внимание на строку Partition unique GUID, которая соответствует значению, включенному в вывод efibootmgr (кроме регистра, который варьируется). Учитывая входные данные для sgdisk в этом примере, это означает, что раздел 1 на /dev/sda (то есть /dev/sda1) содержал первую загрузочную программу системы. Вам может понадобиться отсканировать все свои разделы или, по крайней мере, все те, на которых могут присутствовать загрузчики EFI, чтобы быть уверенным в поиске совпадения. Даже в этом случае вы можете не найти соответствия - например, если загрузчик находился на флэш-накопителе USB, который с тех пор был удален с компьютера, или если вы изменили GUID раздела.

Судя по моей проверке системы, в которой я сижу, вывод efibootmgr -v сообщает о программе начальной загрузки, запущенной EFI. Возможно, это не то же самое, что тот, который запустил Linux, поскольку программа, которую запустил EFI, могла быть диспетчером загрузки, который, в свою очередь, запустил другой загрузчик. Если процесс загрузки вашей системы прост, это может не иметь значения; но если ваш процесс загрузки включает возможность перенаправления между дисками, этот метод не будет надежным.

0
ответ дан 19 October 2012 в 05:42

После запуска Ubuntu, и если grub-efi был установлен на нескольких дисках, я думаю, вы не сможете. (это та же проблема, что и при загрузке Legacy / mbr, AFAIK было невозможно определить, с какого mbr был запущен компьютер, если grub был установлен в нескольких MBR)

0
ответ дан 19 October 2012 в 05:42

Другие вопросы по тегам:

Похожие вопросы: