Preparando a nova partição de inicialização

Preparando a nova partição de inicialização

Das questões existentes,esseparece mais parecido com o que estou fazendo, só que tento aumentar minha partição e não sei por que existem partições diferentes montadas em /boot/ e /boot/efi e como proceder sem atirar nos pés.

Até agora eu criei uma nova partição, montei-a /newBoote fiz isso sudo rsync -a /boot/ /newBoot/, então presumo que tenho todos os arquivos relevantes na nova partição para alternar.

$ lsblk -e 7 -o name,fstype,size,fsused,label,partlabel,mountpoint,uuid,partuuid
NAME                        FSTYPE   SIZE FSUSED LABEL   PARTLABEL          MOUNTPOINT UUID                                   PARTUUID
sda                                  7.3T                                                                                     
└─sda1                      crypto   7.3T                                              4dffc196-9926-43d9-a7c8-38898681f402   85b3a656-4886-4b37-b9c1-2acb0158587a
...
nvme0n1                            931.5G                                                                                     
├─nvme0n1p1                 vfat     512M   5.3M         EFI System Partition
│                                                                           /boot/efi  FD0E-EECA                              587cf214-f068-4879-a833-9dffa5ec6e3d
├─nvme0n1p2                 ext2     488M 313.7M                            /boot      606a1976-d1c2-4246-a256-a8afddb04f84   2e10e277-560f-4f5e-abce-1dce5187a7f0
...
└─nvme0n1p4                 vfat     1.5G        NEWBOOT newboot                       530D-4828                              ea886018-714f-46fb-8f21-785c74543891
$ efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0004
Boot0004* ubuntu    HD(1,GPT,587cf214-f068-4879-a833-9dffa5ec6e3d,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64.EFI)
$ sudo efibootmgr -c -L ubuntuNew -l \\EFI\\UBUNTU\\SHIMX64.EFI
$ efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0000,0004
Boot0000* ubuntuNew HD(1,GPT,85b3a656-4886-4b37-b9c1-2acb0158587a,0xffff,0x3a3535ca9)/File(\EFI\UBUNTU\SHIMX64.EFI)
Boot0004* ubuntu    HD(1,GPT,587cf214-f068-4879-a833-9dffa5ec6e3d,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64.EFI)

então, embora eu não entenda por que há duas partições envolvidas na /bootpasta atual, acho que uma também deveria funcionar. Pelo menos é o que diz a resposta selecionada das perguntas acima, certo?

Agora, o que está faltando? /etc/fstab?

$ cat /etc/fstab 
...
UUID=606a1976-d1c2-4246-a256-a8afddb04f84 /boot           ext2    defaults        0       2
...
UUID=FD0E-EECA  /boot/efi       vfat    umask=0077      0       1
...

Agora, de acordo com lsblke efibootmgr -v(obrigado @oldfred), a nova primeira opção de inicialização gostaria de usar sda1e não nvme0n1p4. sda1é uma unidade externa da qual certamente não quero inicializar. Por que o padrão é isso?

  • Que mudança está faltando para inicializar a partir da nova partição?
  • Preciso alterar o UUIDfstab /bootantes de reiniciar?
  • Preciso de uma partição separada para /boot/efi?

Responder1

Ter ambos /boote /boot/efisistemas de arquivos separados é um exagero, mas:

  • sistemas muito antigos baseados em BIOS podem precisar de uma /bootpartição separada para evitar limitações do BIOS
  • qualquer sistema inicializado no estilo UEFI precisará /boot/efide uma partição ESP equivalente, porque é nela que o firmware espera encontrar o arquivo do bootloader.
  • ter uma criptografia separada /bootpermitirá o uso de qualquer método de criptografia suportado cryptsetupno sistema de arquivos raiz, em vez do conjunto mais limitado de criptografias compreendido pelo GRUB.

O particionamento padrão de um Debian/Ubuntu moderno possui partições separadas, portanto a configuração padrão pode cobrir a maior variedade possível de sistemas.

Conforme mencionado nos comentários de oldfred, UEFI identifica a partição ESP a ser usada por um GUID exclusivo da partição na tabela de partição GPT. Esse GUID é conhecido como PARTUUID no Linux. lsblk -o +partuuidirá exibi-lo.

Seu efibootmgrcomando estava quase correto. Para criar a opção de inicialização ubuntuNew usando o disco correto, você deveria ter usado:

sudo efibootmgr -c -d /dev/nvme0n1 -L ubuntuNew -l \\EFI\\UBUNTU\\SHIMX64.EFI

efibootmgrirá procurar o PARTUUID por conta própria e usá-lo automaticamente para criar a nova entrada de inicialização. Você só precisará especificar o disco (a menos que o disco tenha várias partições de sistema EFI).

Depois de shimx64.eficarregado grubx64.efi, em sistemas configurados no estilo Debian/Ubuntu, ele será lido grub.cfgno mesmo diretório que o grubx64.efi. Esse arquivo contém apenas algumas linhas que identificam o UUID do sistema de arquivos que contém o /bootdiretório (seja uma partição separada ou apenas um diretório regular no sistema de arquivos raiz). Como resultado, os sistemas Debian/Ubuntu podemsempretenha o arquivo de configuração GRUB "principal" em /boot/grub/grub.cfg, não importa se o sistema usa BIOS ou UEFI. Se você tiver um grande número de sistemas de diferentes idades, é conveniente.

Para referência, RedHat 7 e 8 têm a configuração real do GRUB em /boot/grub2/grub.cfgsistemas estilo BIOS e em /boot/efi/EFI/redhat/grub.cfgsistemas UEFI.

No entanto, se você deseja mesclar /boote /boot/efi, há algumas coisas a serem observadas:

  • O caminho do bootloader fornecido efibootmgré baseado na raiz do sistema de arquivos ESP. Originalmente, esse caminho começa em /boot/efi, por isso \\EFI\\UBUNTU\\SHIMX64.EFIé chamado de /boot/efi/EFI/UBUNTU/SHIMX64.EFIvisualizado no Linux. Se você usar apenas /boot, precisará mover o diretório UBUNTU um nível acima ou especificar o caminho do bootloader como \\EFI\\EFI\\UBUNTU\\SHIMX64.EFI.
  • /bootprecisa ser algo que o GRUB entenda, para que ele possa carregar o kernel e os arquivos initramfs a partir daí. A versão UEFI do GRUB do Ubuntu definitivamente entenderá ext2 e vfat; portanto, se você mesclar /boote /boot/efiem uma única partição vfat, o GRUB não terá problemas. Você não pode usar o ext2 porque o firmware precisará ler SHIMX64.EFI e GRUBX64.EFI dessa partição, e o firmware UEFI típico não será capaz de entender o ext2.
  • No momento da inicialização, /booté necessário apenas pelo GRUB, não pelo kernel do Linux: você poderia deixá- /bootlo desmontado e o sistema ainda inicializaria perfeitamente. Mas você vai querer continuar /bootmontado para que as atualizações do kernel possam acontecer normalmente. (Ou se você realmente quiser ocultá-lo, deixando-o desmontado, poderá adicionar scripts para /etc/kernel/pre*.d/montá-lo automaticamente antes que as atualizações do kernel sejam instaladas e para /etc/kernel/post*.ddesmontá-lo novamente após a instalação/remoção de um pacote de kernel específico.)

O Bootloader é frequentemente considerado “assustador e perigoso” se você não tiver uma compreensão clara de quais são os requisitos. Por outro lado, geralmente é bastante independente, então problemas relacionados apenas ao gerenciador de inicialização geralmente não são tão difíceis de corrigir... depois de passar o primeiro obstáculo de inicializar o sistema a partir de uma mídia externa, você pode começar a consertar isto. Eu não diria que um sistema com bootloader não funcional é “brinde”: ele só precisa de uma ajudinha externa.

Responder2

O carregador de boot procurará o que você montou atualmente /boot/efi, então se você não quiser aumentar essa partição, você pode mantê-la como está e apenas fazer uma pequena alteração em um arquivo, conforme descrito abaixo.

Preparando a nova partição de inicialização

  1. Crie uma nova ext2partição com o tamanho desejado. Esta partição não precisa de um sinalizador de inicialização - sua partição efi é o ponto de entrada e será delegada a esta nova partição.
  2. Monte a nova partição em algum lugar. /newBootpor exemplo
  3. Copie seus arquivos da partição de inicialização antiga, por exemplo, usandorsync --recursive --delete --archive /boot/ /newBoot/
  4. Exclua o conteúdo de /newBoot/efi/, aqui era apenas uma pasta: rm -rf /newBoot/efi/EFI/. Não apague newBoot/efi/. Queremos montar a efipasta antiga lá.

Diga efipara usar a nova partição

Descubra /newBooto UUID:

$ lsblk -e 7 -o name,fstype,size,fsused,label,partlabel,mountpoint,uuid,partuuid
NAME                                          FSTYPE        SIZE FSUSED LABEL     PARTLABEL            MOUNTPOINT           UUID                                   PARTUUID
nvme0n1                                                   931.5G                                                                                                   
├─nvme0n1p1                                   vfat          512M   5.3M           EFI System Partition /boot/efi            FD0E-EECA                              587cf214-f068-4879-a833-9dffa5ec6e3d
├─nvme0n1p2                                   ext2          488M 313.7M                                /boot                606a1976-d1c2-4246-a256-a8afddb04f84   2e10e277-560f-4f5e-abce-1dce5187a7f0
├─nvme0n1p3                                   crypto_LUKS 927.7G                                                            e7f674b8-4bec-4502-a1e5-0e93aa34786f   2fed2ecb-b548-479b-aa3f-7f1bbfb9981f
│ └─sda3_crypt                                LVM2_member 927.7G                                                            9tx8Yv-XDCR-RmGf-fmXo-WiX2-SDpG-xH1si4 
│   ├─ubuntu--gnome--vg-root                  ext4        911.6G 734.2G                                /                    1cccfb0a-69da-4246-a071-52f882681418   
│   └─ubuntu--gnome--vg-swap_1                swap         15.8G                                       [SWAP]               e3facfb8-db2e-426d-aef4-b6c81004fd6f   
└─nvme0n1p4                                   ext2          1.5G        newBoot   newBoot                                   5aca79e7-b740-46d3-bc76-aa7e8b8b93da   9e8baf2f-2118-4042-9c47-7ffb824ada52

Edite /boot/efi/EFI/ubuntu/grub.cfgde acordo, substituindo o antigo UUID atual pelo novo:

# cat /boot/efi/EFI/ubuntu/grub.cfg
# search.fs_uuid 606a1976-d1c2-4246-a256-a8afddb04f84 root 
search.fs_uuid 5aca79e7-b740-46d3-bc76-aa7e8b8b93da root 
set prefix=($root)'/grub'
configfile $prefix/grub.cfg

Terminando

Agora o sistema já deveria inicializar a partir da nova partição, mas /boot/seria o antigo após inicializar a partir da nova. Edite /etc/fstabpara que as atualizações do sistema encontrem todos os arquivos em seus lugares:

# UUID=606a1976-d1c2-4246-a256-a8afddb04f84 /boot           ext2    defaults        0       2
UUID=5aca79e7-b740-46d3-bc76-aa7e8b8b93da /boot           ext2    defaults        0       2

A /boot/efilinha /etc/fstabpermanece como estava:

UUID=FD0E-EECA  /boot/efi       vfat    umask=0077      0       1

informação relacionada