Eu vi algumas instruções, mas estou realmente tentando entender todo o processo de inicialização. Eu instalei o debian em uma unidade com uma partição para o sistema operacional e outra partição para o usuário. Ele criou automaticamente partições de boot e swap também. Então, usando o gparted, criei uma nova partição clonando a partição original do debian. Eu dei um novo UUID. Atualizei as opções do grup.
Quando inicializo, chego às opções do grub e vejo duas versões do arquivo os. Eu seleciono especificamente o sistema operacional na nova partição. Mas quando ele inicializa e eu faço check-in no terminal, vejo / é montado em /dev/nvme0n1p2
vez de/dev/nvme0n1p5
Isso é o que estou confuso:
/dev/nvme0n1p1
monta /boot/efi
e /boot/efi/EFI/debian/grub.cfg
há um arquivo de configuração:
search.fs_uuid FIRST-DRIVE-UUID root
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
O que isso basicamente significa para mim é que ele vai montar a primeira instalação e, em seguida, carregar o grub.cfg dessa primeira instalação. Agora ele já tem a primeira instalação montada como root, mas para executar a segunda instalação, obviamente precisa montar a segunda unidade como root. Então parece que está carregando o grub de dentro da primeira instalação em vez de carregar o grub ANTES de montar a primeira instalação?
Existe um arquivo de configuração do grub que faz referência a ambas as instalações em /boot/grub/grub.cfg
, mas isso faz parte da partição da primeira instalação. Parece que uma vez que este arquivo é lido, a primeira instalação já foi carregada e é tarde demais para selecionar de qual partição inicializar. Este arquivo começa com
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
Essa configuração de alguma forma precisa ser movida para a partição de inicialização?
Quando executo update-grub ou grub-mkconfig (v2.04-20), recebo esta saída:
$ sudo grub-mkconfig -o grub.cfg
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-5.10.0-9-amd64
Found initrd image: /boot/initrd.img-5.10.0-9-amd64
Found linux image: /boot/vmlinuz-5.10.0-8-amd64
Found initrd image: /boot/initrd.img-5.10.0-8-amd64
Found Debian GNU/Linux 11 (bullseye) on /dev/nvme0n1p5
Adding boot menu entry for EFI firmware configuration
done
Isso parece fazer referência ao initrd e vmlinuz na primeira instalação. a segunda instalação apenas recebe found
.
"Montar um sistema de arquivos" é um conceito Linux/Unix: ele não existe realmente no GRUB.
Especificar um
$prefix
ou$root
para GRUB não é como montar um sistema de arquivos no Linux/Unix. Eles são literalmente apenas prefixos para nomes de caminhos relativos ou absolutos, respectivamente.$prefix
é usado quando o GRUB está carregando qualquer módulo do GRUB, e também pode ser usado como uma variável conveniente para se referir a qualquer arquivo no diretório (o que será quando o sistema operacional for inicializado)/boot/grub
pelo nome de caminho absoluto do GRUB. Quando o comando GRUBinsmod
é usado, ele assume o valor de$prefix
e adiciona um nome de diretório específico da arquitetura e o nome do módulo a ser carregado (com o.mod
sufixo adicionado).O GRUB tem seus próprios drivers de sistema de arquivos (somente leitura) que aceitam nomes de caminho absolutos no formato
(
partição)
/diretório.../
nome do arquivo, onde o componente de partição pode ser algo comohd0,gpt1
.$root
pode ser atribuído e reatribuído várias vezes em um único arquivo de configuração do GRUB; em configurações modernas, osearch
comando geralmente é usado para ele em vez de uma atribuição explícita, para permitir a especificação de um sistema de arquivos por seu UUID.Em um sistema Debian 9 (usando inicialização no estilo BIOS), uma vez vi uma configuração do GRUB que inicialmente definia
$root
e$prefix
carregava alguns módulos GRUB, depois apontava$root
para uma partição separada/usr
para carregar uma imagem de fundo e um arquivo de fonte de um diretório de tema GRUB em algum lugar/usr/share/...
. Para as opções de inicialização reais, ele apontava$root
de volta para o/boot
sistema de arquivos para carregar um kernel real ou para uma partição do Windows para carregar em cadeia seu registro de inicialização da partição.O GRUB
$root
não tem nada a ver com o sistema de arquivos raiz do Linux. Uma vez que o GRUB tenha carregado o kernel Linux e o arquivo initramfs na RAM, ele passará o controle para o kernel. Nesse ponto, apenas três coisas do GRUB serão preservadas:Todas as variáveis do GRUB, incluindo
$root
e$prefix
, são totalmente esquecidas nesse ponto e deixam de ter qualquer significado. À medida que o kernel é inicializado, ele ativará seus próprios drivers de dispositivo de armazenamento e o sistema de arquivos que será montado como o sistema de arquivos raiz do Linux é determinado por:root=
opção de inicialização do kernel, se uma for especificada, ou/etc/fstab
que especifica o sistema de arquivos raiz ou scripts que determinam o sistema de arquivos a ser usado de alguma outra forma), ouA versão UEFI do GRUB normalmente procurará
grub.cfg
no mesmo diretório em quegrubx64.efi
está localizado em . As três linhasgrub.cfg´ you found in
/boot/efi/EFI/debian/grub.cfgeffectively tells GRUB where the actual GRUB configuration file (and the
/boot/grubdirectory) is, by filesystem UUID. If you wanted, you could replace the UUID with the UUID of the
/dev/nvme0n1p5filesystem, to make GRUB use the
/boot` dessa instância do Debian em vez da primeira instalação.Se você tiver o
os-prober
pacote instalado no Debian, ele será executado automaticamente sempre que você executarupdate-grub
, e tentará detectar automaticamente outros sistemas operacionais, incluindo instalações paralelas do Debian, e adicionará suas principais opções de inicialização ao arquivo de configuração do GRUB.Você também pode adicionar um item de menu como este ao seu
/etc/grub.d/40_custom
onnvme0n1p2
:e da mesma forma
/etc/grub.d/40_custom
paranvme0n1p5
voltar para a configuração do GRUB donvme0n1p2
. Lembre-se de correrupdate-grub
para permitir que as alterações entrem em vigor.Então você pode definir a
search.fs_uuid
linha em/boot/efi/EFI/debian/grub.cfg
(ou seja, emnvme0n1p1
) de acordo com a configuração que você deseja que o GRUB use por padrão. Contanto que ambas as instâncias do Debian continuem usando uma versão semelhante do GRUB o suficiente para aceitar os mesmos arquivos de configuração, você poderá alternar facilmente entre as duas instâncias do SO, e ambas poderão manter seus próprios arquivos de configuração do GRUB independentemente de uns aos outros.