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

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

dr - É possível inicializar a partir de um arquivo .iso localizado em um volume lógico lmv2 não criptografado? Como?

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

  • 4 partições gpt
    • gpt1 - inicialização do BIOS 2M ef02
    • gpt2 - 5G não criptografado não lvm, para dados diversos, iso, etc.
    • gpt3 - lvm 5G 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 das iso atuais do Arch e do Xubuntu
  • no gpt3, eu tenho um lvm2 lv com as mesmas cópias das mesmas iso's

Eu tenho o seguinte funcionando:

  • 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 do Arch em /dev/sda
  • usando o comando configfile do grub2, pode alternar e inicializar a partir do menu grub2 da distribuição
  • pode inicializar iso a partir do menu grub de gpt2 não-lvm

O que eu gostaria de fazer é inicializar a partir do iso no gpt3 lvm (e, no final das contas, nem mesmo ter a partição gpt2 não-lvm).

Minha entrada no 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. Verifiquei na linha de comando do grub que ambas as 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 em 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
}

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


EDITAR: Isso pode ser feito? Paraqualquerarquivo .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 já expirou há muito tempo e, depois de 9 meses, presumo que isso simplesmente não seja possível com nenhuma distribuição Linux. Deixarei a questão em aberto, mas duvido que haja uma solução funcional em um futuro próximo.

Responder1

Usando o Fedora 21 ISO, 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=1dirá ao Linux para carregar todos os LVMs evarredura isoos pesquisa.

Responder2

Inspirado poresta solução simples para Ubuntu, usei o seguinte, que funciona para carregar uma iso do Fedora 27 KDE e uma iso do 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 eu inicio meu sistema, ele está em /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 isso de fora e começo o caminho com/erik/Downloads/…
  • A linha que começa com searchtem uma estranha variável alfanumérica (chamada UUID) no final, que começa com 6340. Peguei esse número no comando

    sudo blkid
    

    o que me deu, junto com outros, a seguinte linha

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • Então, outra coisa importante se você quiser inicializar outros arquivos iso, são as linhas que começam com linuxe initrd. Eu os pegueiabrindo o arquivo isocom 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 label, e 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 simplesmente copiar.

Responder3

Acho que isso 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 são configurados para procurar seu iso de origem 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 distribuição atual faça isso. Você pode tentar entrar em contato com os desenvolvedores da sua distribuição favorita para integrá-la, talvez?

Responder4

Apenas um ponto sobre isso:

O ISO ao inicializar deve montar o iso, então deve saber como encontrá-lo.

Grub2 pode ver o ISO com comandos insmod..., mas isso não faz nada além de deixar o Grub2 ler dentro do ISO, montá-lo em loop, etc, mas assim que o Linux dentro do ISO iniciar o LVM / LUKS / loop / etc é não está lá (não montado), os scripts de boot dentro da ISO devem saber como montar aquele LVM/LUKS/loop; então se o Linux não estiver preparado para isso, não será possível inicializar a partir dele.

Amostra sem LVM, LUKS, etc... se um LiveCD ISO 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 tais casos você precisa de um emulador de CD/DVD de hardware (se for um hardware real), ou apenas montar o .iso na unidade de CD/DVD Virtual de uma máquina virtual.

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

informação relacionada