Como eu determino em qual HDD o sistema foi inicializado ao usar UEFI?

2

Em um sistema com x HDDs com partição idêntica, cada unidade tem uma partição de inicialização UEFI com o sinalizador de inicialização definido. Durante a inicialização, posso selecionar qualquer um dos HDDs para inicializar usando UEFI.

Depois que o Ubuntu for iniciado. Como eu determino de que disco rígido o sistema foi inicializado?

Uma resposta incorreta é: A que contém a partição montada em /boot/efi . É incorreto como isso é escrito para /etc/fstab ao instalar o Ubuntu. Não é dinâmico e não aponta para a partição UEFI que eu realmente usei para inicializar.

    
por Deleted 19.10.2012 / 03:42

2 respostas

2

Eu não testei isso experimentalmente, então pode não funcionar na prática, mas o utilitário efibootmgr retorna uma variável chamada BootCurrent que deve identificar o carregador de inicialização que a EFI lançou. Por exemplo:

$ 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)

Esta saída indica que o sistema foi inicializado através da entrada 0001 ( Boot0001 ). A opção -v para efibootmgr usada aqui inclui informações detalhadas, que incluem o GUID da partição na qual este carregador de boot foi armazenado - 2c47c282-ee6e-45de-a5ad-e8658ca67de6 nesse caso. Note que este é um GUID de partição , não um sistema de arquivos UUID . AFAIK, a única maneira de extrair dados de GUID da partição no Linux é via gdisk , cgdisk ou sgdisk . Por exemplo:

$ 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'

Observe a linha Partition unique GUID , que corresponde ao valor incluído na saída efibootmgr (além do caso, que varia). Dada a entrada para sgdisk neste exemplo, isso significa que a partição 1 em /dev/sda (ou seja, /dev/sda1 ) manteve o primeiro programa de inicialização do sistema. Pode ser necessário verificar todas as suas partições, ou pelo menos todas as quais os carregadores de inicialização EFI podem estar presentes, para ter certeza de encontrar uma correspondência. Mesmo assim, você pode não encontrar uma correspondência - por exemplo, se o gerenciador de partida estiver em uma unidade flash USB que foi removida do computador ou se você alterou o GUID da partição.

Com base na minha verificação no sistema em que estou sentado, parece que a saída efibootmgr -v informa o programa de carregador de inicialização que a EFI lançou. Isso pode não ser o mesmo que o Linux, já que o programa que a EFI lançou pode ter sido um gerenciador de inicialização que, por sua vez, lançou outro gerenciador de inicialização. Se o processo de inicialização do seu sistema for simples, isso pode não importar; mas se o processo de inicialização incluir a possibilidade de redirecionamento entre discos, essa técnica não será confiável.

    
por Rod Smith 21.10.2012 / 01:31
0

Uma vez que o Ubuntu começou, e se o grub-efi foi instalado em vários discos, eu acho que você não pode. (é o mesmo problema que com Legacy / mbr boot, AFAIK não foi possível determinar de qual mbr o pc tinha iniciado se o grub foi instalado em vários MBRs)

    
por LovinBuntu 19.10.2012 / 09:04