A partir do 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 lógico lmv2 não criptografado? Como?

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

  • partições de 4 gpt
    • gpt1 - 2m bota do ef02 bios
    • gpt2 - 5G não-lvm não criptografado, para dados diversos, iso's, etc.
    • gpt3 - 5G lvm não encriptado, para / boot, iso's, etc.
    • gpt4 - restante, lvm, criptografado com dm-crypt / luks, para root, swap, home, etc.
  • no gpt2, tenho cópias do atual Arch e do Xubuntu iso
  • no gpt3, eu tenho um lvm2 lv com as mesmas cópias do mesmo iso

Eu tenho o seguinte trabalho:

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

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

A entrada do meu 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 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, recebe 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
}

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

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 já expirou há muito tempo, e após 9 meses, estou assumindo que isso simplesmente não é possível com nenhuma distribuição Linux. Vou deixar a questão em aberto, mas tenho dúvidas de que haverá uma solução de trabalho a qualquer momento no futuro próximo.

    
por snapshoe 24.09.2012 / 19:52

5 respostas

1

Usando o 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 iso-scan irá procurá-los.

    
por 04.06.2015 / 12:13
1

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

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_path define 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 lado e começo o caminho com /erik/Downloads/…
  • A linha que começa com search tem uma estranha variável alfanumérica (o chamado UUID) no final, que começa com 6340 . Eu tenho esse número do comando

    sudo blkid
    

    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 linux e initrd . Obtive-os 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 você 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 você encontrará um arquivo chamado grub.cfg . Aqui você encontrará algumas linhas que começam com menuentry , e 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.

por 29.01.2018 / 01:32
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 ao vivo que você está iniciando está procurando por uma unidade de cd / dvd e não encontrando nenhuma.

Live CDs não estão configurados para procurar por sua fonte 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 distribuição atual faça isso. Você pode tentar entrar em contato com os desenvolvedores da sua distro favorita para integrar isso talvez?

    
por 19.10.2012 / 16:52
0

Você pode tentar isso:

Adicione isto no início do menuentry:

insmod lvm

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

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

Assim, 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
}

Por favor, faça as correções conforme necessário.

Isso deve fazer o GRUB reconhecer o volume lvm2, tornando possível ler o arquivo ISO nele. No entanto, provavelmente o ISO ainda não será encontrado ...

    
por 29.01.2013 / 22:46
0

Apenas um ponto:

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

O 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 inicialização dentro do ISO devem saber como montar o LVM / LUKS / loop; então, se o Linux não estiver preparado para isso, não será possível inicializar a partir dele.

Exemplo sem LVM, LUKS, etc ... se uma ISO normal do LiveCD para Linux não for projetada para procurar 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 em 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 no boot alguns scripts para procurar e montar o LVM / LUKS / etc.

    
por 11.05.2016 / 11:55