No GRUB2, inicialize um ISO em um volume lógico LVM2

8

tl; dr - É possível inicializar a partir de um arquivo .iso localizado em um volume lmv2 não criptografado? Quão?

Estou tentando configurar isso em uma VM do VirtualBox antes de fazer isso de verdade com o meu laptop. Eu tenho a seguinte configuração:

  • Partições de 4 gpt
    • gpt1 - inicialização do bios 2M ef02
    • gpt2 - 5G não criptografado não-lvm, para dados variados, iso's, etc.
    • gpt3 - 5G lvm não criptografado, para / boot, iso's, etc.
    • gpt4 - restante, lvm, criptografado com dm-crypt / luks, para root, swap, home, etc.
  • no gpt2, tenho cópias dos arquivos iso atuais do Arch e do Xubuntu
  • no gpt3, eu tenho um lvm2 lv com as mesmas cópias dos mesmos iso's

Eu tenho o seguinte trabalho:

  • no gpt4, instalações funcionais do Arch e Xubuntu (e gostaria de adicionar outras distros em outros volumes lógicos em algum momento)
  • grub2 instalado a partir do Arch em / dev / sda
  • usando o comando configfile do grub2, pode alternar e inicializar a partir do menu grub2 de ambos os distros
  • pode inicializar iso's no menu grub a partir de não-lvm gpt2

O que eu gostaria de fazer é inicializar a partir do iso no gpt3 lvm (e, finalmente, nem sequer tenho a partição não-lvm gpt2).

Minha entrada do grub é:

menuentry "Xubuntu ISO" {
  set isofile="/xubuntu-12.04.1-desktop-amd64.iso"
  # from non-lvm
  loopback loop (hd0,gpt2)$isofile
  # from lvm
  #loopback loop (vgboot-iso)$isofile
  linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
  initrd (loop)/casper/initrd.lz
}

As 2 linhas de loopback apontam para 2 cópias diferentes da mesma iso. Eu verifiquei na linha de comando do grub que as duas linhas de loopback funcionam.

Ao inicializar a partir do iso na partição não-lvm, tudo funciona bem.

Ao inicializar a partir do iso na partição lvm, a inicialização é iniciada e, eventualmente, obtém este erro:

(initramfs) /scripts/casper-premount/20iso_scan: line 46: can't open /dev/sr0: No medium found

Para a entrada do arco:

menuentry "Arch ISO" {
  set isofile="/archlinux-2012.09.07-dual.iso"
  loopback loop (hd0,gpt2)$isofile
  #loopback loop (vgboot-iso)$isofile
  linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201209 img_dev=/dev/sda2 img_loop=$isofile earlymodules=loop
  initrd (loop)/arch/boot/x86_64/archiso.img
}

A inicialização a partir do gpt2 iso funciona, mas não sei o que alterar "/ dev / sda2" para a inicialização do lvm.


EDIT: Isso pode ser feito? Para qualquer arquivo .iso oficial da distribuição Linux atual? Fedora? Debian? openSUSE? CentOS?

Isso é impossível? Ou é algo que ninguém pensou em tentar antes?


EDIT2: Minha recompensa expirou há muito tempo e, após 9 meses, estou assumindo que isso simplesmente não é possível em qualquer distribuição Linux. Deixarei a pergunta em aberto, mas duvido que haja uma solução funcional a qualquer momento no futuro próximo.

snapshoe
fonte

Respostas:

1

Usando a ISO do Fedora 21, tentei com sucesso o seguinte:

menuentry "Fedora 21 Live M6600" --class fedora {
    insmod part_gpt
    insmod lvm
    insmod ext2
    set vg='m6600'
    set lv='F21Live'
    set root="lvm/${vg}-${lv}"
    search --no-floppy --fs-uuid --set=root --hint=${root} 95e4eec8-c1de-4802-b821-5753de990cbe
    set isofile="/Fedora-Live-Workstation-x86_64-21-5.iso"
    echo "Using ${isofile}..."
    loopback loop $isofile
    linux (loop)/isolinux/vmlinuz0 iso-scan/filename=${isofile} root=live:CDLABEL=Fedora-Live-WS-x86_64-21-5 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 rd.auto=1
    initrd (loop)/isolinux/initrd0.img
}

rd.auto = 1 dirá ao Linux para carregar todos os LVMs e as pesquisas iso-scan nelas.

nxxy
fonte
O UUID na linha que começa com searché o volume lógico que contém o arquivo iso, certo? Para obtê-lo, você precisa fazer sudo blkid.
28618 erik
Isso poderia ser feito muito mais fácil, veja minha resposta para inicializar o Fedora e Ubuntu a partir do LVM.
quer
1

Inspirado nesta solução simples para o Ubuntu , usei o seguinte, que funciona para carregar um iso Fedora 27 KDE e um iso Ubuntu 17.10.

Acabei de anexar as seguintes linhas no arquivo /etc/grub.d/40_custom

menuentry "Live Fedora KDE 27" --class fedora {
  insmod part_msdos
  insmod lvm
  set iso_path="/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso"
  search --no-floppy --fs-uuid --set=root 6340d364-fc09-44d1-914f-b902a6394a55
  loopback loop ($root)$iso_path
  linux (loop)/isolinux/vmlinuz iso-scan/filename=${iso_path} root=live:CDLABEL=Fedora-KDE-Live-27-1-6 rootfstype=auto rd.live.image quiet
  initrd (loop)/isolinux/initrd.img
}

menuentry "Ubuntu 17.10.1" --class ubuntu {
  insmod part_msdos
  insmod lvm
  set iso_path="/erik/Downloads/transmission/ubuntu-17.10.1-desktop-amd64.iso"
  search --no-floppy --fs-uuid --set=root 6340d364-fc09-44d1-914f-b902a6394a55
  loopback loop ($root)$iso_path
  linux (loop)/casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=${iso_path} quiet splash ---
  initrd (loop)/casper/initrd.lz
}

Explicação

  • A linha que começa com set iso_pathdefine o caminho, onde o arquivo iso pode ser encontrado no volume lógico. Quando inicio meu sistema, ele fica /home/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso", mas /homeé o volume lógico montado, então deixo de fora e começo o caminho com/erik/Downloads/…
  • A linha que começa com searchtem uma variável alfanumérica estranha (o chamado UUID) no final, que começa com 6340. Eu recebi esse número do comando

    sudo blkid
    

    que me deu, entre outras, a seguinte linha

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • Então, outra coisa importante, se você deseja inicializar outros arquivos iso, são as linhas que começam com linuxe initrd. Eu os peguei abrindo o arquivo iso com file-roller(GUI para extrair arquivos compactados) ou mc(gerenciador de arquivos do console).

    • Fedora e similares: Lá você vai para o diretório /isolinux, onde encontrará um arquivo chamado isolinux.cfg. Lá encontrei algumas linhas começando com labele abaixo delas as seguintes linhas importantes

      kernel vmlinuz
      append initrd=initrd.img root=live:CDLABEL=Fedora-KDE-Live-27-1-6 rd.live.image quiet
      

      que você usará para preencher as duas últimas linhas do meu grub2 menuentry.

    • Ubuntu e similares: Lá você vai para o diretório /boot/grub, onde encontrará um arquivo chamado grub.cfg. Aqui você encontrará algumas linhas começando com menuentrye abaixo delas as seguintes linhas importantes

      linux   /casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash ---
      initrd  /casper/initrd.lz
      

      que você pode copiar.

erik
fonte
0

Eu acho que não é possível para o arquivo iso oficial da maioria das distribuições.

O erro que você está recebendo:

 (initramfs) /scripts/casper-premount/20iso_scan: line 46: can't open /dev/sr0: No medium found

significa que, na inicialização, o sistema ativo que você está iniciando está procurando uma unidade de CD / DVD e não encontra nenhuma.

Os Live CDs não estão configurados para procurar sua origem iso em um LVM; talvez você possa modificar os scripts de inicialização da imagem para fazer isso, mas não acho que nenhum arquivo .iso oficial da distro atual faça isso. Você pode tentar entrar em contato com os desenvolvedores da sua distro favorita para integrá-la, talvez?

alphatiger
fonte
Ele é possível, ver a minha resposta simples, onde eu inicializar a partir Fedora 27 e Ubuntu 17.10.
quer
0

Você pode tentar o seguinte:

Adicione isso no início da entrada do menu:

insmod lvm

Em seguida, especifique sua partição LVM com:

set lvmpart=lvm/<lvm_group_name>-<lvm_logical_partition_name>

Portanto, sua entrada ISO do Xubuntu seria assim:

menuentry "Xubuntu ISO" {
  insmod lvm
  set lvmpart=lvm/<lvm_group_name>-<lvm_logical_partition_name>
  set isofile="/xubuntu-12.04.1-desktop-amd64.iso"
  loopback loop $lvmpart$isofile
  linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
  initrd (loop)/casper/initrd.lz
}

Faça as correções conforme necessário.

Isso deve fazer o GRUB reconhecer o volume lvm2, possibilitando a leitura do arquivo ISO nele. No entanto, provavelmente o ISO ainda não será encontrado ...

Leonardo Dagnino
fonte
Tentei suas sugestões, mas como você disse, o iso ainda não foi encontrado.
Snapshoe
0

Apenas um ponto:

O ISO durante a inicialização deve montar o iso, por isso deve saber como encontrá-lo.

O Grub2 pode ver o ISO com comandos insmod ..., mas isso não faz nada além de permitir que o Grub2 leia dentro do ISO, monte-o em loop, etc., mas assim que o Linux dentro do ISO inicia, o LVM / LUKS / loop / etc é não lá (não montado), os scripts de inicialização dentro da ISO devem saber como montar esse loop LVM / LUKS /; portanto, se o Linux não estiver preparado para isso, não será possível inicializá-lo.

Exemplo sem LVM, LUKS, etc ... se um ISO LiveCD normal do Linux não for projetado para pesquisar e montar um loop em um arquivo .iso durante a inicialização, nunca será possível inicializá-lo a partir do Grub2 (com .iso como um Arquivo).

Para esses casos, você precisa de um emulador de CD / DVD de hardware (se estiver em hardware real) ou basta montar o .iso na unidade de CD / DVD virtual de uma máquina virtual.

A outra opção, é claro, é 'editar' esse ISO para incorporar na inicialização alguns scripts para procurar e montar o LVM / LUKS / etc.

Anonimo
fonte