AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1487504
Accepted
Mr. T
Mr. T
Asked: 2023-09-30 11:16:37 +0800 CST2023-09-30 11:16:37 +0800 CST 2023-09-30 11:16:37 +0800 CST

Ubuntu 22.04 Autoinstall funciona em UEFI, mas não em MBR no Virtualbox?

  • 772

Eu li a documentação do curtin e da instalação automática e não consigo entender por que esse script de instalação automática está funcionando no meu laptop de desenvolvimento, mas não na instalação do vbox (versão 7.0.8 no host Ubuntu). A princípio pensei que o problema fosse uma referência a /dev/mmcblk0(o virtualbox usa /dev/sda), mas depois de fazer várias configurações diferentes, não acho que esse seja realmente o problema por causa da mensagem de erro que isso gera. O éautoinstall config did not create needed bootloader partition

Minha teoria é que essa instalação automática funciona no laptop porque o laptop é UEFI, mas não no Virtualbox porque não é. Encontrei algumas sugestões em outro lugar sobre como fazer uma instalação automática que funciona para UEFI funcionar no MBR, mas nenhuma que seja capaz de fazer as duas coisas.

Esse é o problema com esse layout de particionamento de instalação automática? Existe alguma solução? Não posso usar os layouts integrados (lvm etc) devido aos requisitos específicos deste projeto. Sei que poderia alterar as configurações do Virtualbox para inicialização EFI, mas este ISO terá que ser instalado em uma ampla variedade de máquinas, algumas das quais podem não suportar EFI.

Aqui está meu layout de particionamento atual, que está funcionando em um laptop com um dispositivo em/dev/mmcblk0

Como esse script precisa ser modificado para funcionar em qualquer sistema? E sim, a partição /boot realmente precisa ser tão grande para esta configuração.

autoinstall:
  version: 1
  storage:
    config:
    - ptable: gpt
      wipe: superblock-recursive
      preserve: false
      name: ''
      grub_device: false
      type: disk
      id: disk-mmcblk0
      match:
        size: largest
    - device: disk-mmcblk0
      size: 1127219200
      wipe: superblock
      flag: boot
      number: 1
      preserve: false
      grub_device: true
      type: partition
      id: partition-0
    - fstype: fat32
      volume: partition-0
      preserve: false
      type: format
      id: format-0
    - device: disk-mmcblk0
      size: 5GB
      wipe: superblock
      number: 2
      preserve: false
      type: partition
      id: partition-1
    - fstype: ext4
      volume: partition-1
      preserve: false
      type: format
      id: format-1
    - device: disk-mmcblk0
      size: -1
      wipe: superblock
      number: 3
      preserve: false
      type: partition
      id: partition-2
    - volume: partition-2
      key: password
      path: /dev/mapper/dm_crypt-0
      preserve: false
      type: dm_crypt
      id: dm_crypt-0
    - name: ubuntu-vg
      devices:
      - dm_crypt-0
      preserve: false
      type: lvm_volgroup
      id: lvm_volgroup-0
    - name: ubuntu-lv
      volgroup: lvm_volgroup-0
      size: -1
      wipe: superblock
      preserve: false
      path: /dev/ubuntu-vg/ubuntu-lv
      type: lvm_partition
      id: lvm_partition-0
    - fstype: btrfs
      volume: lvm_partition-0
      preserve: false
      type: format
      id: format-2
    - path: /
      device: format-2
      type: mount
      id: mount-2
      options: 'noatime,discard,compress=zstd:1'
    - path: /boot
      device: format-1
      type: mount
      id: mount-1
    - path: /boot/efi
      device: format-0
      type: mount
      id: mount-0
autoinstall
  • 1 1 respostas
  • 178 Views

1 respostas

  • Voted
  1. Best Answer
    mpboden
    2023-10-03T11:12:30+08:002023-10-03T11:12:30+08:00

    Como @AndrewLowther apontou na resposta , seu comentário aponta para:

    Oficialmente, você não pode criar uma única configuração de armazenamento que suporte BIOS e UEFI. As configurações do grub_device são incompatíveis.

    Então você tem duas opções:

    1. Modifique o seu user-datacom a solução alternativa sugerida por Andrew
    2. Crie user-dataarquivos separados. Um para BIOS e outro para UEFI

    Descreverei a primeira opção abaixo, que é o que você deseja. Isso significa que funcionará para um computador BIOS ou UEFI.


    Em primeiro lugar, o user-dataarquivo fornecido está faltando #cloud-configna primeira linha e também na identityseção. Ambos são obrigatórios, então os adicionei no exemplo abaixo. A identityseção é definida com um nome de usuário ubuntue senha padrão ubuntu. Além disso, a unidade criptografada é configurada com uma senha ubuntu. Mude de acordo.

    Há várias coisas no user-dataarquivo abaixo que são diferentes das suas.

    1. grub_device: trueestá definido para o disco em vez degrub_device: false

      - type: disk
        id: disk-mmcblk0
        ptable: gpt
        match:
          size: largest
        preserve: false
        name: ''
        grub_device: true
        wipe: superblock-recursive
      
    2. Uma pequena partição não formatada flag: bios_grubé adicionada.

      - type: partition
        id: partition-0
        device: disk-mmcblk0
        size: 4194304
        wipe: superblock
        flag: bios_grub
        number: 1
        preserve: false
        grub_device: false
      

    Da documentação do curtin sobre bios_grub:

    Se o sistema host do curtin tiver sido inicializado usando UEFI, o curtin instalará o grub na partição esp. Se a mídia de instalação do sistema tiver sido inicializada usando um MBR, o grub será instalado no MBR do disco. No entanto, em um disco com uma tabela de partição gpt, não há espaço suficiente após o MBR para o grub armazenar seu segundo estágio core.img, portanto, é necessária uma pequena partição não formatada com o sinalizador bios_grub. Esta partição deve ser colocada no início do disco e deve ter 1 MB de tamanho. Ele não deve conter um sistema de arquivos nem ser montado em qualquer lugar do sistema.

    1. grub_device: falseé definido para todas as partições, exceto a partição ESP usada por uma instalação UEFI. Para esta partição, grub_device: UEFIé definido. No momento, este é apenas um espaço reservado e será editado com early-commands, conforme descrito a seguir.

      - type: partition
        id: partition-1
        device: disk-mmcblk0
        size: 111149056
        wipe: superblock
        flag: boot
        number: 2
        preserve: false
        grub_device: UEFI
      
    2. O uso de early-commandsno user-dataarquivo modificará o autoinstall.yamlarquivo com base no fato de o computador ser UEFI ou BIOS. Isso modificará a grub_device: UEFIconfiguração definida acima.

    Dê uma olhada no seguinte:

      early-commands:
        - |
          if [ -e "/sys/firmware/efi" ]; then
            sed -i -e "s/grub_device: UEFI/grub_device: true/" /autoinstall.yaml
          else
            sed -i -e "s/grub_device: UEFI/grub_device: false/" /autoinstall.yaml
          fi
    

    O que isso faz é editar o autoinstall.yamlarquivo com base em uma condicional. Pelo que entendi, o autoinstall.yamlarquivo é criado durante a instalação e reside no diretório raiz da Instalação Live. Esta é uma combinação do seu user-dataarquivo e das perguntas não respondidas/não configuradas da instalação automática padrão que o instalador preenche.

    Isso verifica se o arquivo /sys/firmware/efiexiste:

    • if [ -e "/sys/firmware/efi" ]; then

    Se for verdade:

    • Indica que o sistema é UEFI

    • Substitui grub_device: UEFIpor grub_device: trueusar sed:

      sed -i -e "s/grub_device: UEFI/grub_device: true/" /autoinstall.yaml

    De outra forma:

    • Indica que o sistema é BIOS

    • Substitui grub_device: UEFIpor grub_device: falseusar sed:

      sed -i -e "s/grub_device: UEFI/grub_device: false/" /autoinstall.yaml


    E é isso. Após a early-commandsexecução, a instalação continuará.

    Aqui está o user-dataarquivo completo:

    #cloud-config
    autoinstall:
      version: 1
      identity:
        hostname: ubuntu-server
        password: $6$5lpwCLsKLEzMkSJc$keOAhA6aO/5RocGThmhVA7LSNuW911Rx5HHXFEa75oGK20cEdAAgn14H5f5nGeq6QgcSyLPrWcg1.JvjXbhrN/
        realname: Ubuntu User
        username: ubuntu
      storage:
        config:
        - type: disk
          id: disk-mmcblk0
          ptable: gpt
          match:
            size: largest
          preserve: false
          name: ''
          grub_device: true
          wipe: superblock-recursive
    
        - type: partition
          id: partition-0
          device: disk-mmcblk0
          size: 4194304
          wipe: superblock
          flag: bios_grub
          number: 1
          preserve: false
          grub_device: false
    
        - type: partition
          id: partition-1
          device: disk-mmcblk0
          size: 111149056
          wipe: superblock
          flag: boot
          number: 2
          preserve: false
          grub_device: UEFI
    
        - type: format
          id: format-0
          volume: partition-1
          fstype: fat32
          preserve: false
    
        - type: partition
          id: partition-2
          device: disk-mmcblk0
          size: 5GB
          wipe: superblock
          number: 3
          preserve: false
          grub_device: false
    
        - type: format
          id: format-1
          volume: partition-2
          fstype: ext4
          preserve: false
    
        - type: partition
          id: partition-3
          device: disk-mmcblk0
          size: -1
          wipe: superblock
          number: 4
          preserve: false
          grub_device: false
    
        - type: dm_crypt
          id: dm_crypt-0
          volume: partition-3
          preserve: false
          key: 'ubuntu'
    
        - type: lvm_volgroup
          id: lvm_volgroup-0
          devices:
          - dm_crypt-0
          preserve: false
          name: ubuntu-vg
    
        - type: lvm_partition
          id: lvm_partition-0
          volgroup: lvm_volgroup-0
          size: -1
          preserve: false
          wipe: superblock
          name: ubuntu-lv
    
        - type: format
          id: format-2
          volume: lvm_partition-0
          fstype: btrfs
          preserve: false
    
        - type: mount
          id: mount-0
          device: format-0
          path: /boot/efi
    
        - type: mount
          id: mount-1
          device: format-1
          path: /boot
    
        - type: mount
          id: mount-2
          device: format-2
          path: /
      early-commands:
        - |
          if [ -e "/sys/firmware/efi" ]; then
            sed -i -e "s/grub_device: UEFI/grub_device: true/" /autoinstall.yaml
          else
            sed -i -e "s/grub_device: UEFI/grub_device: false/" /autoinstall.yaml
          fi
          
    

    Se você instalar em um computador UEFI e BIOS e depois comparar, notará que o esquema de partição será o mesmo. A instalação UEFI terá uma bios_grubpartição não utilizada e a instalação do BIOS terá uma partição ESP não utilizada montada em /boot/efi. O /boot/efiestará vazio em uma instalação de BIOS e conterá arquivos em uma instalação UEFI.

    As seguintes instalações foram feitas com ISO: ubuntu-22.04.3-live-server-amd64.iso . Ele foi descompactado com o user-dataarquivo acima adicionado /nocloude depois reembalado.

    Instalação EFI:

    $ sudo parted /dev/sda
    GNU Parted 3.4
    Using /dev/sda
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) print                                                            
    Model: ATA VBOX HARDDISK (scsi)
    Disk /dev/sda: 26.8GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags: 
    
    Number  Start   End     Size    File system  Name  Flags
     1      1049kB  5243kB  4194kB                     bios_grub
     2      5243kB  116MB   111MB   fat32              boot, esp
     3      116MB   5485MB  5369MB  ext4
     4      5485MB  26.8GB  21.4GB
    
    
    
    $ lsblk -o name,fssize,fsused,fsavail,fstype,mountpoint
    NAME                        FSSIZE FSUSED FSAVAIL FSTYPE      MOUNTPOINT
    loop0                        53.4M  53.4M       0 squashfs    /snap/snapd/19457
    loop1                         112M   112M       0 squashfs    /snap/lxd/24322
    loop2                        63.5M  63.5M       0 squashfs    /snap/core20/1974
    sda                                                           
    ├─sda1                                                        
    ├─sda2                      104.3M     6M   98.3M vfat        /boot/efi
    ├─sda3                        4.8G 129.6M    4.4G ext4        /boot
    └─sda4                                            crypto_LUKS 
      └─dm_crypt-0                                    LVM2_member 
        └─ubuntu--vg-ubuntu--lv  19.9G     3G     16G btrfs       /
    
    
    
    $ df -h
    Filesystem                         Size  Used Avail Use% Mounted on
    tmpfs                              491M  1.1M  490M   1% /run
    /dev/mapper/ubuntu--vg-ubuntu--lv   20G  3.0G   17G  16% /
    tmpfs                              2.4G     0  2.4G   0% /dev/shm
    tmpfs                              5.0M     0  5.0M   0% /run/lock
    /dev/sda3                          4.9G  130M  4.5G   3% /boot
    /dev/sda2                          105M  6.1M   99M   6% /boot/efi
    tmpfs                              491M  4.0K  491M   1% /run/user/1000
    
    
    $ ls /boot/efi
    EFI
    

    Instalação do BIOS:

    $ sudo parted /dev/sda
    GNU Parted 3.4
    Using /dev/sda
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) print                                                            
    Model: ATA VBOX HARDDISK (scsi)
    Disk /dev/sda: 26.8GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags: 
    
    Number  Start   End     Size    File system  Name  Flags
     1      1049kB  5243kB  4194kB                     bios_grub
     2      5243kB  116MB   111MB   fat32              boot, esp
     3      116MB   5485MB  5369MB  ext4
     4      5485MB  26.8GB  21.4GB
    
    
    
    $ lsblk -o name,fssize,fsused,fsavail,fstype,mountpoint
    NAME                        FSSIZE FSUSED FSAVAIL FSTYPE      MOUNTPOINT
    loop0                        63.5M  63.5M       0 squashfs    /snap/core20/1974
    loop1                        53.4M  53.4M       0 squashfs    /snap/snapd/19457
    loop2                         112M   112M       0 squashfs    /snap/lxd/24322
    sda                                                           
    ├─sda1                                                        
    ├─sda2                      104.3M   512B  104.3M vfat        /boot/efi
    ├─sda3                        4.8G 128.6M    4.4G ext4        /boot
    └─sda4                                            crypto_LUKS 
      └─dm_crypt-0                                    LVM2_member 
        └─ubuntu--vg-ubuntu--lv  19.9G     3G     16G btrfs       /
    
    
    
    $ df -h
    Filesystem                         Size  Used Avail Use% Mounted on
    tmpfs                              492M  1.1M  491M   1% /run
    /dev/mapper/ubuntu--vg-ubuntu--lv   20G  3.0G   17G  16% /
    tmpfs                              2.4G     0  2.4G   0% /dev/shm
    tmpfs                              5.0M     0  5.0M   0% /run/lock
    /dev/sda3                          4.9G  129M  4.5G   3% /boot
    /dev/sda2                          105M   512  105M   1% /boot/efi
    tmpfs                              492M  4.0K  492M   1% /run/user/1000
    
    
    
    $ ls /boot/efi
    
    • 2

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve