
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
}
- Localização da imagem de disco dentro da partição NTFS (image_path)
- GUID GPT da partição NTFS (image_hd)
- Se a imagem do disco contiver múltiplas partições, o UUID rootfs (root)
O procedimento de inicialização referente às montagens de disco:
- O gancho initcpio monta a partição NTFS
- O gancho initcpio monta a imagem do disco da partição NTFS como um dispositivo de loop
- 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
- 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.
- 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.