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_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 fora e começo o caminho com/erik/Downloads/…
A linha que começa com
search
tem uma estranha variável alfanumérica (chamada UUID) no final, que começa com6340
. Peguei esse número no comandosudo 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
linux
einitrd
. Eu os pegueiabrindo o arquivo isocomfile-roller
(gui para extrair arquivos compactados) oumc
(gerenciador de arquivos do console).Fedora e similares:Lá você vai para o diretório
/isolinux
, onde encontrará um arquivo chamadoisolinux.cfg
. Lá encontrei algumas linhas começando comlabel
, e abaixo delas as seguintes linhas importanteskernel 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 chamadogrub.cfg
. Aqui você encontrará algumas linhas começando commenuentry
e abaixo delas as seguintes linhas importanteslinux /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.