Pertanyaan Dari GRUB2, boot ISO dalam volume logis LVM2


tl; dr - Apakah mungkin untuk mem-boot dari file .iso yang terletak pada volume logical lmv2 yang tidak terenkripsi? Bagaimana?

Saya mencoba mengatur ini di VirtualBox VM sebelum saya melakukannya secara nyata dengan laptop saya. Saya memiliki pengaturan berikut:

  • 4 partisi gpt
    • gpt1 - boot 2M ef02 BIOS
    • gpt2 - 5G non-lvm tidak terenkripsi, untuk misc data, iso, dll.
    • gpt3 - 5G lvm yang tidak terenkripsi, untuk / boot, iso, dll.
    • gpt4 - tersisa, lvm, dienkripsi dengan dm-crypt / luk, untuk root, swap, home, dll.
  • di gpt2, saya memiliki salinan Arch dan Xubuntu iso saat ini
  • di gpt3, saya memiliki lvm2 lv dengan salinan yang sama dari iso yang sama

Saya memiliki pekerjaan berikut:

  • di gpt4, berfungsi menginstal Arch dan Xubuntu (dan ingin menambahkan distro lain dalam volume logis lainnya di beberapa titik)
  • grub2 diinstal dari Arch on / dev / sda
  • menggunakan perintah configfile grub2, dapat beralih dan boot dari kedua menu grub2 distro
  • dapat mem-boot iso dari menu grub dari non-lvm gpt2

Apa yang saya ingin lakukan adalah boot dari iso di gpt3 lvm (dan pada akhirnya, bahkan tidak memiliki partisi gpt2 non-lvm sama sekali).

Entri grub saya adalah:

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 jalur loopback mengarah ke 2 salinan berbeda dari iso yang sama. Saya telah memverifikasi pada baris perintah grub bahwa kedua jalur loopback bekerja.

Ketika boot dari iso di partisi non-lvm, semuanya berfungsi dengan baik.

Saat mem-boot dari iso di partisi lvm, booting dimulai, dan akhirnya mendapatkan kesalahan ini:

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

Untuk entri lengkungan:

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
}

booting dari gpt2 iso bekerja, tetapi saya tidak tahu apa yang harus mengubah "/ dev / sda2" menjadi untuk lvm boot.


EDIT: Bisakah ini dilakukan? Untuk apa saja file resmi iso Linux distro saat ini? Fedora? Debian? openSUSE? CentOS?

Apakah ini tidak mungkin? Ataukah itu sesuatu yang belum pernah dicoba sebelumnya?


EDIT2: Hadiah saya sudah lama kadaluwarsa, dan setelah 9 bulan, saya berasumsi ini tidak mungkin dengan distro Linux. Saya akan membiarkan pertanyaan itu terbuka, tetapi saya ragu akan ada solusi yang berfungsi kapan saja dalam waktu dekat.


8
2017-09-24 17:52


asal




Jawaban:


Menggunakan ISO Fedora 21, saya baru saja berhasil mencoba yang berikut:

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 akan memberitahu Linux untuk memuat semua LVM dan iso-scan mencari mereka.


1
2018-06-04 10:13



Itu UUID di garis yang dimulai dengan search adalah salah satu volume logis yang berisi file iso, kan? Untuk mendapatkannya, Anda harus melakukannya sudo blkid. - erik
Ini bisa dilakukan jauh lebih mudah, lihat jawaban saya untuk mem-boot Fedora dan Ubuntu dari LVM. - erik


Terinspirasi oleh solusi sederhana ini untuk Ubuntu, Saya menggunakan yang berikut ini, yang berfungsi untuk memuat iso Fedora 27 KDE dan iso Ubuntu 17.10.

Saya baru saja menambahkan baris berikut dalam file /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
}

Penjelasan

  • Garis yang dimulai dengan set iso_path mendefinisikan jalur, di mana file iso dapat ditemukan pada volume logis. Ketika saya memulai sistem saya, itu terletak di /home/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso", tapi /home adalah volume logis yang terpasang, jadi saya meninggalkan ini dan memulai jalan dengan /erik/Downloads/…
  • Garis yang dimulai dengan search memiliki variabel alfanumerik yang aneh (yang disebut UUID) di bagian akhir, yang dimulai dengan 6340. Saya mendapat nomor ini dari perintah

    sudo blkid
    

    yang memberi saya, bersama yang lain, baris berikut

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • Kemudian, hal lain yang penting jika Anda ingin mem-boot file iso lainnya, adalah garis yang dimulai dengan linux dan initrd. Saya mendapatkannya membuka file iso dengan file-roller (gui untuk mengekstraksi arsip yang dikompresi) atau mc (manajer file konsol).

    • Fedora dan sejenisnya: Di sana Anda pergi ke direktori /isolinux, di mana Anda akan menemukan file bernama isolinux.cfg. Di sana saya menemukan beberapa baris yang dimulai dengan label, dan di bawah mereka garis-garis penting berikut

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

      yang akan Anda gunakan untuk mengisi dua baris terakhir grub2 saya menuentry.

    • Ubuntu dan sejenisnya: Di sana Anda pergi ke direktori /boot/grub, di mana Anda akan menemukan file bernama grub.cfg. Di sini Anda akan menemukan beberapa baris yang dimulai dengan menuentry, dan di bawah mereka garis-garis penting berikut

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

      yang bisa Anda salin.


1
2018-01-29 00:32





Saya pikir itu tidak mungkin untuk file iso resmi kebanyakan distribusi.

Kesalahan yang Anda dapatkan:

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

berarti bahwa saat boot, sistem hidup yang Anda mulai sedang mencari drive cd / dvd dan tidak menemukan apa pun.

Live CD tidak dikonfigurasi untuk mencari iso sumbernya di LVM; Anda mungkin dapat memodifikasi skrip boot dari gambar untuk melakukannya, tapi saya tidak berpikir ada file resmi isiso distro saat ini. Anda dapat mencoba untuk menghubungi distro favorit Anda untuk memiliki yang terintegrasi mungkin?


0
2017-10-19 14:52



Saya t aku s mungkin, lihat jawaban sederhana saya, di mana saya boot dari Fedora 27 dan Ubuntu 17.10. - erik


Anda dapat mencoba ini:

Tambahkan ini di awal menu menu:

insmod lvm

Kemudian, tentukan partisi LVM Anda dengan:

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

Jadi entri ISO Xubuntu Anda akan menjadi seperti ini:

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
}

Silakan lakukan koreksi sesuai kebutuhan.

Ini harus membuat GRUB mengenali volume lvm2, sehingga memungkinkan untuk membaca file ISO di dalamnya. Namun, mungkin ISO masih belum ditemukan ...


0
2018-01-29 21:46



Saya mencoba saran Anda, tetapi seperti yang Anda katakan, iso masih tidak ditemukan. - snapshoe


Hanya satu poin di atasnya:

ISO ketika boot harus me-mount iso, jadi harus tahu bagaimana menemukannya.

Grub2 dapat melihat ISO dengan perintah insmod ..., tetapi itu tidak membuat apa pun selain membiarkan Grub2 membaca di dalam ISO, mengaitkannya, dll, tetapi segera setelah Linux di dalam ISO memulai LVM / LUKS / loop / etc. tidak ada (tidak terpasang), skrip boot di dalam ISO harus tahu cara memasang LVM / LUKS / loop; jadi jika Linux tidak siap untuk melakukannya, tidak mungkin untuk boot dari itu.

Contoh tanpa LVM, LUKS, dll ... jika ISO LiveCD Linux normal tidak dirancang untuk mencari dan me-mount loop ke file .iso saat boot, tidak akan mungkin untuk mem-boot ke dalamnya dari Grub2 (dengan .iso sebagai mengajukan).

Untuk kasus seperti itu Anda memerlukan emulator CD / DVD perangkat keras (jika menggunakan perangkat keras sebenarnya), atau cukup pasang iso pada unit Virtual CD / DVD dari mesin Virtual.

Pilihan lain, tentu saja, adalah 'mengedit' ISO tersebut untuk memasukkan saat boot beberapa skrip untuk mencari dan me-mount LVM / LUKS / dll.


0
2018-05-11 09:55