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

12

Eu tenho uma máquina que possui partições de inicialização múltipla. Eu tenho o Ubuntu 14.04 em uma partição, o Ubuntu 15.04 na segunda e o Ubuntu 16.04 na terceira. Existe uma maneira de saber, a partir da linha de comando, em qual partição eu inicializei, para encontrar em qual partição é a /boot/grub/grub.cfgqual foi usada para o processo de inicialização? Eu tenho /boot/grub/grub.cfg em cada uma das três partições.

Kevin Wilson
fonte
3
Você não pode fazer isso com absoluta generalidade e confiabilidade. Pelo que você sabe, o /boot/grub/grub.cfgarquivo usado para a inicialização pode ter sido excluído, a partição pode ter sido excluída da tabela de partições e o disco removido fisicamente do sistema.
Federico Poloni

Respostas:

10

Depois que o GRUB transferiu a inicialização para o kernel, o kernel não tem idéia do que o iniciou e /bootpode não ser o que o GRUB usou. Você pode verificar os tempos de acesso boot/grub/grub.cfgem cada uma das partições para ver qual delas foi acessada mais recentemente. Isso pode indicar 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ê deverá procurar diferenças nos parâmetros do kernel usados ​​pelos vários arquivos de configuração do GRUB. Se você puder alterá-los, por exemplo, adicionar foo=1, foo=2etc. para GRUB_CMDLINE_LINUXem cada um deles, executar sudo update-grub2e reiniciar, poderá verificar /proc/cmdlinepara ver quais desses valores foram usados.

muru
fonte
interessante! isso significa que minha solução também tem uma taxa de precisão melhor que a de Ravexina e Katu?
Tatsu # 10/17
@tatsu IMO todas as outras respostas estão incorretas - Ravexina está localizando a partição onde /bootestá localizada, mas pode não ser o que o grub usou, e você e Katu estão descobrindo que a partição montada /está montada, mas, como Ravexina observou, isso provavelmente tem ainda menos de uma conexão
Muru
1
sim, mas como a desmontagem pode fazer algo diferente de falhar na partição em que você está montado: os discos fornecem informações como o dispositivo no endereço montado, qualquer informação de identificação que você possa precisar sobre qual você acabou de desmontar. Sou o primeiro a admitir que minha solução é feia, mas teve 100% de sucesso, certo?
Tatsu # 10/17
1
@tatsu taxa de sucesso para quê? Encontrando a partição montada /, com certeza. Encontrando a configuração GRUB de qual partição foi usada durante a inicialização? Não vejo como isso se relaciona.
Muru
4
O grub realmente define esse registro de data e hora de acesso, dado que é seu próprio DOS e não está vinculado às convenções do driver do sistema de arquivos linux?
Rackandboneman
4

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

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

Significa grub.cfgque o que foi usado está localizado sda2.

Caso contrário, você deve procurar root:

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

desta vez está localizado em sda1.

Ou mesmo por 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

então use UUIDpara descobrir qual partição é sua raiz.

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

O que significa de sda1.

Você também pode verificar esses parâmetros de inicialização para ver qual dos seus grub.cfgarquivos os contém; isso só funciona quando os parâmetros de inicialização grub.cfgsão diferentes.

Ravexina
fonte
2
Uma maneira mais fácil (que não requer privilégios de superusuário) para encontrar o nó do dispositivo atrás de um UUID do sistema de arquivos seria readlink -f /dev/disk/by-uuid/<UUID>.
David Foerster
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 do Ubuntu atualmente em execução:

lsb_release -rs
David Foerster
fonte
isso realmente faz muito sentido em relação à pergunta e parece ser a resposta mais adequada ainda. Aposto que, dado que não há duas distros em sua configuração, o mesmo número de versão que ele lsb_release -rssempre usa . KISS
tatsu
Infelizmente, isso não funciona. Testei seu comando na minha máquina com vários sistemas operacionais, apenas meu sistema operacional "master` possui o grub instalado no MBR, outros sistemas operacionais têm o Grub instalado no PBR, o comando parece mostrar o local em que o sistema operacional possui o Grub, mas não mostrar a partir do qual oS Grub carrega o config-arquivo.
mook765
@ mook765: Minha resposta não tem absolutamente nada a ver com Grub ou MBR (ou qualquer tipo de carregador de inicialização ou tabela de partição). Não sei ao certo o que exatamente você tentou e o que esperava ver.
David Foerster
Em seguida, esta resposta não tem nada a ver com a questão ...
mook765
@ mook765: Se você entende literalmente, sim. No entanto, para mim, parece que o OP quer saber qual de suas várias instalações do Ubuntu atualmente está inicializada e, para isso, minha resposta deve estar bem.
David Foerster
2

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

Exemplo:

Inicializamos no 16.04 e editamos o arquivo /etc/grub.d/40_custompara adicionar uma entrada de menu.

#! / bin / sh
exec tail -n +3 $ 0
# Este arquivo fornece uma maneira fácil de adicionar entradas de menu personalizadas. Basta digitar o
# entradas de menu que você deseja adicionar após este comentário. Cuidado para não mudar
# a linha 'exec tail' acima.
#

menuentry 'grub.conf carregado a partir de 16.04' {        
            reiniciar  
    }

Garantimos que o arquivo é executável e executado sudo update-grub.

Em seguida, fazemos as mesmas alterações nos outros sistemas operacionais, apenas usamos nomes diferentes para a entrada do menu, mas mudamos 16.04para 15.04e assim por diante.

Se selecionarmos essa entrada de menu no menu Grub durante a inicialização, a máquina será reiniciada, criamos para não inicializar nenhum sistema operacional, mas para ver qual sistema operacional é realmente usado para carregar grub.conf .

Informação adicional

Esse tipo de confusão aparece quando instalamos vários sistemas operacionais que usam Grub e durante a instalação de um sistema operacional escolhemos o mesmo local do carregador de inicialização. Na verdade, precisamos apenas de 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.

Nas instalações herdadas, é muito fácil manipular o local da instalação do carregador de inicialização, pois podemos escolher o registro de inicialização da partição como local, mas precisamos ter o cuidado de escolher a partição correta. Portanto, um sistema operacional instala o carregador de inicialização no MBR e outros sistemas operacionais instalam o carregador de inicialização no PBR da partição do sistema operacional. Essa possibilidade só temos quando usamos a Something elseopção-durante a instalação.

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

Outra solução simples

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

1 Ubuntu
2 Opções avançadas para o Ubuntu
3 Teste de memória (memtest86 +)
4 Teste de memória (memtest86 +, console serial 115200)
5 Ubuntu (em / dev / sda2)
6 Opções avançadas para o Ubuntu (on / dev / sda2)
7 Ubuntu 17.04 (on / dev / sda3)
8 Opções avançadas para Ubuntu (on / dev / sda3)

As duas primeiras entradas são as entradas para o sistema operacional que gerou o grub.confarquivo -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 grub.configarquivo -que realmente usamos não pertence ao sistema operacional sda2ou sda3ao sistema operacional sda1. No caso de um ou mais sistemas operacionais serem instalados com uma /bootpartição separada, teremos que verificar qual /bootpartição pertence a qual sistema operacional, mas isso é facilmente feito executando o findmntcomando-em cada sistema operacional.

mook765
fonte
+1 Apesar de longa, esta resposta realmente inclui pontos relevantes. Para sistemas BIOS, os usuários que executam multi-inicialização devem preferir "Algo mais" no instalador para ter mais controle; Não há necessidade de forçar "a não instalar o carregador de inicialização GRUB" (veja minha resposta anterior ). Para sistemas UEFI, a configuração de inicialização múltipla parece ser muito inexplicável ou não testada.
Clearkimura
1
lsblk

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

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

lsblk -o UUID,NAME,SIZE,MOUNTPOINT
Katu
fonte
2
Não é verdade, e se a minha /bootfor uma partição separada? então /boot/grub/grub.cfgnão está localizado na /partição.
Ravexina
@Ravexina Seja técnico, isso pode ser verdade. No entanto, para os propósitos deste usuário, a /partição não conta?
@ MarkYisri Acho que devo dizer que nem sempre é verdade, no entanto, o OP está nos dizendo que ele conseguiu o arquivo em três partições diferentes, então acho que é melhor procurar um /bootprimeiro separadamente .
Ravexina
1
Obrigado por apontar isso @Ravexina Eu atualizei a resposta.
Katu
0

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

Para onde olhar

Nas capturas de tela combinadas a seguir, identifiquei três dicas que podemos saber em qual partição o usuário inicializou.

Menu de inicialização múltipla usando a versão GNU GRUB PC / BIOS com anotação

Rótulo (1): entradas do menu GNU GRUB abaixo da primeira entrada

Etiqueta (2): versão GNU GRUB na parte superior do menu do gerenciador de inicialização

Rótulo (3): imagem de fundo do GNU GRUB (configuração manual necessária)

A dica mais aparente é a etiqueta (3), que é alterar a imagem de plano de fundo do GNU GRUB no sistema que tem controle do menu do gerenciador de inicialização. É o mais fácil de dizer, desde que o usuário o configure com antecedência.

Etiqueta (1) explicada

Procure a partição que não está listada nas entradas de menu abaixo da primeira entrada. Na captura de tela, existem apenas dois sistemas operacionais sendo instalados, por exemplo, "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/sda2ou /dev/sda1. Para ter certeza, depois de inicializar o sistema, por exemplo, "Ubuntu", execute o comando relevante para listar as partições disponíveis ( lsblkparece ser o 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 após a comparação com a saída de lsblk, sabemos que o sistema, por exemplo, "Ubuntu", é encontrado em /dev/sda2(que não estava listado nas entradas do menu) a partir do qual o menu do gerenciador de inicialização é gerenciado.

Etiqueta (2) explicada

Procure a versão GRUB impressa na parte superior do menu do gerenciador de inicialização. Observe essa versão e compare com a versão GRUB encontrada no sistema inicializado, ou seja, "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 grub-installe update-grubcomandos são fornecidos pelo mesmo pacote grub2-common. Como o menu do carregador de inicialização é criado e atualizado usando ferramentas do mesmo pacote, a versão impressa na parte superior do menu do carregador de inicialização será a mesma.

Etiqueta (3) explicada

Essa dica precisa ser configurada manualmente, pois a imagem de plano de fundo padrão do menu do carregador de inicialização não é nenhuma (apenas preto). A imagem de fundo deve ter profundidade de 8 bits.

Se o desktop-basepacote estiver instalado no seu sistema, essas imagens de plano de fundo criadas especialmente para o GRUB serão prontamente encontradas com o sufixo do nome do arquivo *grub.pngno 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 fundo:

  1. Abra o /etc/default/grubarquivo como superusuário e adicione a linha GRUB_BACKGROUND=com o caminho completo à 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-gruba atualização /boot/grub/grub.cfgque 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. Reinicie a máquina e veja se o menu do carregador de inicialização teve alguma alteração visível feita pelo comando update do sistema.

Senão, repita as etapas para outros sistemas, um de cada vez. As etapas repetidas seriam desnecessárias, caso o usuário estivesse ciente de qual sistema tinha controle sobre o menu do carregador de inicialização (novamente, isso depende de como a instalação foi feita).

aviso Legal

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

  • Para homólogo sistema UEFI usando a versão GNU GRUB EFI, é não garantido ou não sabe se os critérios que parece ser o mesmo como descrito acima.

  • Ênfase é dada à aparência do menu do gerenciador de inicialização (como pode parecer diferente, por exemplo, a metade superior da captura de tela), em vez de demonstrar como o carregamento em cadeia funciona. Como tal, o "como a inicialização múltipla foi configurada como visto na captura de tela" não seria explicado nesta resposta.

  • Se a configuração de inicialização múltipla for feita exatamente das mesmas cópias de um sistema operacional semelhante, por exemplo, Ubuntu 14.04, Kubuntu 14.04, Xubuntu 14.04, etc., a única maneira confiável de saber em qual partição o usuário inicializou é o label (3).

  • O rótulo (3) pode funcionar melhor usando a 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, sobre "como criar uma imagem de plano de fundo personalizada para o GRUB" não seria explicado nesta resposta.

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

clearkimura
fonte