Imagem ISO / disco de inicialização GRUB da partição NTFS

Imagem ISO / disco de inicialização GRUB da partição NTFS

Estou tentando inicializar um ISO contendo um sistema Linux ativo a partir de uma partição NTFS existente em um PC. O PC possui UEFI e o disco rígido é particionado com GPT, portanto GRUB4DOS não é uma opção. Isso pode ser feito?

Eu sei que a pergunta já foi feita antes:Grub - inicialize o arquivo iso debian da partição NTFS e instale-o, mas não há respostas aprovadas - é por isso que estou perguntando novamente. Também gostaria de usar meu próprio kernel em vez de algum fixo e pré-compilado.

Pelas outras respostas, parece que eu precisaria incluir algum tipo de arquivo de kernel personalizado (presumo que o coloque na partição EFI), que será capaz de carregar o restante do ISO (?) Do próprio NTFS.

Isso já pode ser feito na partição FAT, simplesmente fazendo uma entrada no GRUB

menuentry "Boot LINUX FROM ISO FILE" {
  set iso_path=/path_to/image_on_FAT_filesystem.iso
  loopback loop (hdX,msdosY)$iso_path
  linux (loop)/path_to/vmlinuz nomagic base_only norootcopy from=$iso_path
}

Responder1

Então, como solução;

Histórico: estou usando Arch Linux. Ele usamkinitcpiopara gerar seu initramfs (e o espaço de usuário inicial (!)). Como estamos inicializando uma imagem do sistema de arquivos a partir do NTFS, precisamos ajustar o initramfs. Podemos usar o GRUB e seu módulo NTFS para ler (o módulo GRUB NTFS é ro afaik.) O kernel e o initramfs da partição NTFS. Depois disso, ainda precisamos montar a partição NTFS do initramfs para acesso total de leitura/gravação.

Teoria de funcionamento da solução: adicionei pacotes ntfs-3g e fusefs ao initramfs, para que a partição NTFS possa ser montada. Eu também criei um novogancho mkinitcpioque precisa ser carregado antes do gancho de montagem real. O gancho é um script de shell simples que obtém os parâmetros (estes são fornecidos como argumentos do kernel do GRUB) como

menuentry "Boot LINUX FROM ISO FILE" {
  insmod ntfs
  set root='(hdX,Y)'
  linux /in_ntfs/vmlinuz-linux root=UUID=*GPT_UUID_OF_ROOTFS_ON_DISK_IMAGE* image_path=*path_to_disk_image_on_NTFS* image_hd=*GPT_UUID_OF_NTFS_DISK*
  initrd /in_ntfs/initrd.img
}
  1. Localização da imagem de disco dentro da partição NTFS (image_path)
  2. GUID GPT da partição NTFS (image_hd)
  3. Se a imagem do disco contiver múltiplas partições, o UUID rootfs (root)

O procedimento de inicialização referente às montagens de disco:

  1. O gancho initcpio monta a partição NTFS
  2. O gancho initcpio monta a imagem do disco da partição NTFS como um dispositivo de loop
  3. Agora que o gancho de montagem normal é executado, é fornecido o ext4 ou qualquer partição que contenha linux rootfs dentro da imagem de disco montada na etapa 2
  4. O sistema sai do espaço de usuário inicial; newroot é definido como a partição rootfs do arquivo de imagem montado em loop NTFS.
  5. Ta-dah, temos um sistema Linux em execução com permissões de leitura e gravação em execução a partir de uma imagem de disco/imagem ISO dentro de uma partição NTFS.

informação relacionada