Z GRUB2, uruchom ISO w woluminie logicznym LVM2

8

tl; dr - Czy można uruchomić z pliku .iso, który znajduje się w niezaszyfrowanym woluminie logicznym lmv2? W jaki sposób?

Próbuję skonfigurować to w maszynie wirtualnej VirtualBox, zanim zrobię to naprawdę na moim laptopie. Mam następujące ustawienia:

  • 4 partycje gpt
    • gpt1 - bootowanie bios 202 ef02
    • gpt2 - 5G nieszyfrowane non-lvm, dla różnych danych, plików ISO itp.
    • gpt3 - niezaszyfrowany lvm 5G, dla / boot, ISO itp.
    • gpt4 - pozostały, lvm, zaszyfrowany przy pomocy dm-crypt / luks, dla root, swap, home itp.
  • w gpt2 mam kopie aktualnych iso Arch i Xubuntu
  • w gpt3 mam lvm2 lv z tymi samymi kopiami tych samych ISO

Mam następujące działania:

  • w gpt4, działające instalacje Arch i Xubuntu (i chciałbym dodać inne dystrybucje w innych woluminach logicznych w pewnym momencie)
  • grub2 zainstalowany z Arch na / dev / sda
  • za pomocą polecenia configfile grub2, można przełączać i uruchamiać z menu grub2 obu dystrybucji
  • można uruchomić ISO z menu GRUB z gpt2 innego niż lvm

To, co chciałbym zrobić, to bootowanie z ISO w gpt3 lvm (i ostatecznie nawet nie mam partycji gpt2 innej niż lvm).

Mój wpis dotyczący gruba to:

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
}

2 linie sprzężenia zwrotnego wskazują na 2 różne kopie tego samego ISO. Sprawdziłem w wierszu poleceń grub, że działają obie linie sprzężenia zwrotnego.

Podczas uruchamiania z ISO na partycji innej niż lvm wszystko działa poprawnie.

Podczas uruchamiania z ISO na partycji lvm, rozruch rozpoczyna się i ostatecznie pojawia się ten błąd:

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

Dla wpisu łuku:

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
}

bootowanie z gpt2 iso działa, ale nie wiem, co zmienić „/ dev / sda2” na boot lvm.


EDYCJA: Czy można to zrobić? W przypadku dowolnego oficjalnego pliku .iso dystrybucji Linux-a? Fedora? Debian? openSUSE? CentOS?

Czy to jest niemożliwe? Czy jest to coś, czego nikt wcześniej nie próbował wypróbować?


EDIT2: Moja nagroda już dawno wygasła i po 9 miesiącach zakładam, że nie jest to możliwe w przypadku żadnej dystrybucji Linuksa. Pozostawię pytanie otwarte, ale wątpię, czy w najbliższej przyszłości będzie działające rozwiązanie.

snapshoe
źródło

Odpowiedzi:

1

Korzystając z Fedory 21 ISO, właśnie pomyślnie wypróbowałem następujące opcje:

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 każe Linuxowi załadować wszystkie LVM i przeszukuje je przez iso-scan .

nxxy
źródło
UUID w linii zaczynającej się searchjest jednym z woluminu logicznego, który zawiera plik ISO, prawda? Aby go zdobyć, musisz zrobić sudo blkid.
erik
Można to zrobić o wiele łatwiej, zobacz moją odpowiedź na temat uruchamiania Fedory i Ubuntu z LVM.
erik
1

Zainspirowany tym prostym rozwiązaniem dla Ubuntu , użyłem następującego, który działa do ładowania ISO KDE Fedory 27 i ISO Ubuntu 17.10.

Właśnie dodałem następujące wiersze w pliku /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
}

Wyjaśnienie

  • Linia rozpoczynająca się od set iso_pathokreśla ścieżkę, w której plik ISO można znaleźć na woluminie logicznym. Kiedy uruchamiam mój system, leży w nim /home/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso", ale /homejest zamontowanym woluminem logicznym, więc zostawiam to i zaczynam ścieżkę/erik/Downloads/…
  • Linia rozpoczynająca się od searchma na końcu dziwną zmienną alfanumeryczną (tak zwany UUID) 6340. Mam ten numer z komendy

    sudo blkid
    

    co dało mi, wraz z innymi, następującą linię

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • Kolejną ważną rzeczą, jeśli chcesz uruchomić inne pliki ISO, są linie zaczynające się od linuxi initrd. Mam je, otwierając plik ISO za pomocą file-roller(GUI do wypakowywania skompresowanych archiwów) lub mc(menedżer plików konsoli).

    • Fedora i podobne: tam idziesz do katalogu /isolinux, w którym znajdziesz plik o nazwie isolinux.cfg. Tam znalazłem kilka linii zaczynających się od label, a pod nimi kolejne ważne linie

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

      którego użyjesz do wypełnienia dwóch ostatnich wierszy mojego grub2 menuentry.

    • Ubuntu i podobne: tam idziesz do katalogu /boot/grub, w którym znajdziesz plik o nazwie grub.cfg. Tutaj znajdziesz kilka linii zaczynających się od menuentry, a pod nimi kolejne ważne linie

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

      które możesz po prostu skopiować.

erik
źródło
0

Myślę, że nie jest to możliwe w przypadku oficjalnego pliku ISO większości dystrybucji.

Występujący błąd:

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

oznacza, że ​​podczas uruchamiania system na żywo, który uruchamiasz, szuka dysku CD / DVD i nie znajduje żadnego.

Live CD nie są skonfigurowane do wyszukiwania źródła ISO na LVM; możesz zmodyfikować skrypty rozruchowe obrazu, aby to zrobić, ale nie sądzę, aby jakikolwiek obecny oficjalny plik .iso distro to zrobił. Możesz spróbować skontaktować się z twórcami swojej ulubionej dystrybucji, aby mieć to zintegrowane?

alphatiger
źródło
Jest to możliwe, zobacz moją prostą odpowiedź, gdzie uruchamiam z Fedory 27 i Ubuntu 17.10.
erik
0

Możesz spróbować:

Dodaj to na początku menu:

insmod lvm

Następnie określ swoją partycję LVM za pomocą:

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

Twój wpis ISO Xubuntu wyglądałby tak:

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
}

W razie potrzeby wprowadź poprawki.

To powinno sprawić, że GRUB rozpozna wolumin lvm2, umożliwiając odczytanie w nim pliku ISO. Prawdopodobnie ISO nadal nie zostanie znalezione ...

Leonardo Dagnino
źródło
Próbowałem twoich sugestii, ale jak powiedziałeś, nadal nie znaleziono ISO.
snapshoe
0

Tylko jeden punkt:

ISO podczas uruchamiania musi zamontować ISO, więc musi wiedzieć, jak go znaleźć.

Grub2 może zobaczyć ISO za pomocą komend insmod ..., ale nie robi to nic innego, jak pozwolić Grub2 odczytać wewnątrz ISO, zamontować go w pętli itp., Ale jak tylko Linux wewnątrz ISO uruchomi LVM / LUKS / loop / etc nie ma (nie jest zamontowany), skrypty rozruchowe wewnątrz ISO muszą wiedzieć, jak zamontować tę pętlę LVM / LUKS /; więc jeśli ten Linux nie jest do tego przygotowany, nie będzie można go uruchomić.

Próbkuj bez LVM, LUKS itp. ... jeśli normalny Linux LiveCD ISO nie jest zaprojektowany do wyszukiwania i montowania pętli do pliku .iso podczas uruchamiania, nigdy nie będzie możliwe uruchomienie go z Grub2 (z .iso jako plik).

W takich przypadkach potrzebujesz sprzętowego emulatora CD / DVD (na prawdziwym sprzęcie) lub po prostu zamontuj .iso na wirtualnej jednostce CD / DVD maszyny wirtualnej.

Inną opcją jest oczywiście „edycja” takiego ISO w celu włączenia podczas uruchamiania niektórych skryptów do wyszukiwania i montowania LVM / LUKS / itp.

Anonimo
źródło