Como posso saber de qual partição eu inicializei?

13

Eu tenho uma máquina que tem partições com várias inicializações. Eu tenho o Ubuntu 14.04 em uma partição, o Ubuntu 15.04 no segundo e o Ubuntu 16.04 em um terceiro. Existe uma maneira de saber, a partir da linha de comando, de qual partição eu inicializei, para encontrá-lo em qual partição é o /boot/grub/grub.cfg que foi usado para o processo de inicialização? Eu tenho /boot/grub/grub.cfg em cada uma das três partições.

    
por Kevin Wilson 10.05.2017 / 12:11

6 respostas

11

Depois que o GRUB tiver iniciado a inicialização no kernel, o kernel não tem idéia do que o iniciou, e /boot pode não ser aquele que o GRUB usou. Você pode verificar os tempos de acesso de boot/grub/grub.cfg em cada uma das partições para ver qual foi acessado mais recentemente. Isso poderia dizer qual arquivo de configuração da partição o GRUB usou.

stat -c %x /boot/grub/grub.cfg

Se os tempos de acesso não forem atualizados, você terá que procurar por diferenças nos parâmetros do kernel usados pelos vários arquivos de configuração do GRUB. Se você puder alterá-las, por exemplo, adicione foo=1 , foo=2 , etc. a GRUB_CMDLINE_LINUX em cada uma delas, execute sudo update-grub2 e reinicialize e, em seguida, você pode verificar /proc/cmdline para ver quais desses valores foram usado.

    
por muru 10.05.2017 / 13:21
5

Como você sabe, o arquivo que você está procurando está localizado no diretório /boot do seu sistema em execução. ou /boot é uma partição separada ou não é; Se o seu /boot é uma partição separada, você deve procurar por isso:

$ lsblk -r | grep '/boot'
sda2 8:1 0 400M 0 part /boot

Significa que o grub.cfg que foi usado está localizado em sda2 .

De outro modo, você deve procurar root :

$ lsblk -r | grep '/$'
sda1 8:1 0 121.2G 0 part /

desta vez, está localizado em sda1 .

Ou mesmo para diversão , podemos verificar os parâmetros de tempo de inicialização:

$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-686-pae root=UUID=938495-1fe2-3302 ro quiet

use UUID para descobrir qual partição é sua raiz.

$ sudo blkid | grep 938495-1fe2-3302
/dev/sda1: UUID="938495-1fe2-3302"

O que significa sda1 .

Você também pode verificar esses parâmetros de inicialização para ver qual dos seus arquivos grub.cfg os contém, isso só funciona quando os parâmetros de inicialização em grub.cfg são diferentes uns dos outros.

    
por Ravexina 10.05.2017 / 12:15
3

Para exibir o dispositivo que contém o sistema de arquivos raiz atualmente montado:

awk '$2=="/"{print $1}' /proc/mounts

Para exibir a versão de lançamento do Ubuntu em execução no momento:

lsb_release -rs
    
por David Foerster 10.05.2017 / 14:12
2

Poderíamos adicionar uma entrada de menu personalizada simples em cada sistema operacional e veríamos no menu do Grub do qual o OS Grub carregava seu arquivo de configuração.

Exemplo:

Nós inicializamos em 16.04 e editamos o arquivo /etc/grub.d/40_custom para adicionar uma entrada de menu.

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
#

menuentry 'grub.conf loaded from 16.04' {        
            reboot  
    }

Garantimos que o arquivo seja executável e execute sudo update-grub .

Em seguida, fazemos as mesmas alterações nos outros sistemas operacionais, apenas usamos nomes diferentes para o menuentry, i.g. nós mudamos 16.04 para 15.04 e assim por diante.

Se selecionarmos esta entrada de menu no menu do Grub durante a inicialização, a máquina apenas reinicializará, nós os criamos para não inicializar qualquer sistema operacional, mas para ver qual sistema operacional é realmente usado para carregar grub.conf .

Informações adicionais

Esse tipo de confusão aparece, quando instalamos vários sistemas operacionais que usam o Grub e, durante a instalação de um sistema operacional, escolhemos o mesmo local do carregador de inicialização. Precisamos de fato apenas um sistema operacional que instale o Grub, o Grub pode inicializar em qualquer distribuição Linux, portanto, se tivermos uma distribuição instalada (incluindo o Grub), poderemos instalar sistemas operacionais adicionais sem instalar o Grub.

Em instalações legadas, é muito fácil manipular o local da instalação do carregador de inicialização, já que podemos escolher o registro de inicialização da partição como local, mas temos que tomar cuidado para escolher a partição correta. Portanto, um sistema operacional instala o carregador de inicialização no MBR e sistemas operacionais adicionais instalam o carregador de inicialização no PBR da partição do sistema operacional. Essa possibilidade só temos quando usamos a Something else -option durante a instalação.

Em instalações com UEFI é um pouco mais estranho, o carregador de inicialização será instalado em uma pasta na partição de sistema EFI (ESP) e vários carregadores de inicialização podem facilmente coexistir. O problema aqui é que todos os sabores do Ubuntu e também algumas outras distribuições linux instalarão o Grub na mesma pasta no ESP e nós não temos escolha. Então, instalar uma distribuição Linux adicional sobrescreveria nosso gerenciador de inicialização já existente. A única maneira de evitar isso é inicializar em uma sessão ao vivo e iniciar o instalador com sudo ubiquity -b .

Outra solução simples

Vamos supor que temos três distribuições Linux instaladas nas partições sda1 , sda2 e sda3 . Agora vamos dar uma olhada nas entradas do menu de inicialização do Grub. Durante a inicialização, veremos algo assim:

1  Ubuntu
2  Advanced options for Ubuntu
3  Memory test (memtest86+)
4  Memory test (memtest86+, serial console 115200)
5  Ubuntu (on /dev/sda2)
6  Advanced options for Ubuntu (on /dev/sda2)
7  Ubuntu 17.04 (on /dev/sda3)
8  Advanced options for Ubuntu (on /dev/sda3)

As duas primeiras entradas são as entradas para o sistema operacional que geraram o arquivo grub.conf que realmente usamos. As entradas # 3 e # 4 não são interessantes no momento. As entradas # 5, # 6, # 7 e # 8 são as entradas que foram geradas com o prober do SO e vemos em quais partições os SOs dessas entradas residem. Portanto, no caso deste pequeno exemplo, podemos concluir que o arquivo grub.config que realmente usamos não pertence ao sistema operacional em sda2 ou sda3 , mas sim ao SO em sda1 . No caso de um ou mais sistemas operacionais serem instalados com uma partição /boot separada, teríamos que verificar qual /boot -partition pertence a qual sistema operacional, mas isso é feito facilmente executando o findmnt -command em cada SO .

    
por mook765 11.05.2017 / 08:13
1
lsblk

E verifique qual disco está montado em / . Por favor, leia os comentários abaixo ou a resposta da Ravexina se você tiver /boot em seus pontos montados.

Se você não tiver certeza, verifique o UUID

lsblk -o UUID,NAME,SIZE,MOUNTPOINT
    
por Katu 10.05.2017 / 12:20
0

Para saber de qual partição o usuário inicializou, veja o menu do carregador de inicialização antes inicializando qualquer um dos sistemas instalados. É difícil dizer sem ver o menu do gerenciador de inicialização.

Onde procurar

Nas capturas de tela combinadas a seguir, rotulei três dicas que alguém pode saber de qual partição o usuário inicializou.

Label(1):GNUGRUBmenuentriesbelowthefirstentry

Label(2):GNUGRUBversionattopofbootloadermenu

Label(3):GNUGRUBbackgroundimage(manualsetuprequired)

Adicamaisaparenteélabel(3),queéalteraraimagemdefundodoGNUGRUBnosistemaquepossuiocontroledomenudocarregadordeinicialização.Éomaisfácildeserinformado,desdequeousuáriooconfiguredeantemão.

Label(1)explicado

Procurepelapartiçãonãolistadanasentradasdomenuabaixodaprimeiraentrada.Nacapturadetela,háapenasdoissistemasoperacionaissendoinstalados,porexemplo,"Ubuntu" e "Ubuntu 14.04.5 LTS".

Ubuntu
Advanced options for Ubuntu
Memory test (memtest86+)
Memory test (memtest86+, serial console 115200)
Ubuntu 14.04.5 LTS (14.04) (on /dev/sda3)
Advanced options for Ubuntu 14.04.5 LTS (14.04) (on /dev/sda3)

O último mencionou (on /dev/sda3) , o que significa que o primeiro pode estar localizado em /dev/sda2 ou /dev/sda1 . Para ter certeza, depois de inicializar o sistema, por exemplo, "Ubuntu", execute o comando relevante para listar as partições disponíveis ( lsblk parece ser mais direto).

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0    13G  0 disk 
├─sda1   8:1    0   976M  0 part [SWAP]
├─sda2   8:2    0     6G  0 part /
└─sda3   8:3    0     6G  0 part 
sr0     11:0    1  55.7M  0 rom 

Somente depois de compararmos com a saída de lsblk , então sabemos que o sistema "Ubuntu" é encontrado em /dev/sda2 (que não estava listado nas entradas do menu) a partir do qual o gerenciador de inicialização menu é gerenciado.

Label (2) explicado

Procure a versão do GRUB impressa na parte superior do menu do carregador de inicialização. Observe essa versão e compare com a versão do GRUB encontrada no sistema inicializado, por exemplo, "Ubuntu".

Na captura de tela (metade inferior): GNU GRUB version 2.02~beta2-9

Após inicializar o sistema, por exemplo, "Ubuntu", execute o comando relevante para verificar a versão do pacote GRUB ( grub-install --version é relevante e mais direto).

$ grub-install --version
grub-install (GRUB) 2.02~beta2-9

Como isso é relevante? Porque os comandos grub-install e update-grub são fornecidos pelo mesmo pacote grub2-common . Como o menu do gerenciador de inicialização é criado e atualizado usando ferramentas do mesmo pacote, a versão impressa no topo do menu do gerenciador de inicialização será a mesma.

Label (3) explicado

Esta dica precisa ser configurada manualmente, uma vez que a imagem de fundo padrão do menu do carregador de inicialização é nenhuma (simplesmente preta). A imagem de fundo deve ter uma profundidade de 8 bits.

Se o pacote desktop-base estiver instalado em seu sistema, essas imagens de plano de fundo criadas especialmente para o GRUB serão prontamente encontradas com o sufixo de nome de arquivo *grub.png no diretório de destino.

$ ls /usr/share/images/desktop-base/*grub.png
/usr/share/images/desktop-base/desktop-grub.png
/usr/share/images/desktop-base/joy-grub.png
/usr/share/images/desktop-base/moreblue-orbit-grub.png
/usr/share/images/desktop-base/spacefun-grub.png

Para configurar a imagem de plano de fundo:

  1. Abra o arquivo /etc/default/grub como o superusuário e adicione a linha GRUB_BACKGROUND= com o caminho completo para a imagem escolhida e citada.

    $ sudo nano /etc/default/grub 
    ...
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    GRUB_CMDLINE_LINUX=""
    
    # Show background in GRUB boot menu
    GRUB_BACKGROUND="/usr/share/images/desktop-base/spacefun-grub.png"
    ...
    
  2. Em seguida, execute sudo update-grub para atualizar /boot/grub/grub.cfg que inclui o menu do carregador de inicialização. O usuário verá uma saída semelhante à seguinte.

    $ sudo update-grub
    Generating grub configuration file ...
    Found background: /usr/share/images/desktop-base/spacefun-grub.png
    Found background image: /usr/share/images/desktop-base/spacefun-grub.png
    Found linux image: /boot/vmlinuz-3.13.0-24-generic
    Found initrd image: /boot/initrd.img-3.13.0-24-generic
    Found memtest86+ image: /boot/memtest86+.elf
    Found memtest86+ image: /boot/memtest86+.bin
    Found Ubuntu 14.04.5 LTS (14.04) on /dev/sda3
    done
    
  3. Reinicialize a máquina e veja se o menu do carregador de inicialização possui alterações visíveis feitas pelo comando update do sistema.

Senão, repita os passos para outros sistemas, um de cada vez. As etapas repetidas seriam desnecessárias, se o usuário tivesse conhecimento de qual sistema tinha controle sobre o menu do carregador de boot (novamente, isso depende de como a instalação foi feita).

Aviso de isenção

Esta resposta explica os critérios comprovados e bem testados para o sistema BIOS com configuração multi boot usando a versão GNU GRUB PC / BIOS. As seguintes exceções serão aplicadas.

  • Para a contraparte do sistema UEFI usando a versão GNU GRUB EFI, ela não é garantida ou não é conhecida se os critérios parecerem ser os mesmos descritos acima.

  • A ênfase é dada ao aspecto do menu do carregador de boot (como pode parecer diferente, ou seja, a metade superior da captura de tela), em vez de demonstrar como funciona o carregamento em cadeia. Assim, em relação a "como o multi boot foi configurado como visto na captura de tela", não será explicado nesta resposta.

  • Se a instalação multi boot for feita de exatamente as mesmas cópias do sistema operacional similar, como o Ubuntu 14.04, o Kubuntu 14.04, o Xubuntu 14.04, etc., então a única forma confiável de saber qual partição o usuário iniciou é label (3).

  • Label (3) pode funcionar melhor usando uma imagem de plano de fundo personalizada que grava explicitamente a partir da qual é inicializada, ou seja, "Este menu de inicialização é gerenciado a partir de / dev / sda1". Da mesma forma, em relação a "como criar uma imagem de plano de fundo personalizada para o GRUB", não será explicado nesta resposta.

TL; DR Procure no menu do carregador de inicialização antes inicializar qualquer um dos sistemas instalados. A maneira mais fácil e confiável de saber é label (3), que é configurar a imagem de fundo do GRUB manualmente.

    
por clearkimura 13.05.2017 / 17:34

Tags