Dari GRUB2, boot ISO dalam volume logis LVM2

8

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

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

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

Saya memiliki yang berikut ini:

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

Apa yang ingin saya lakukan adalah boot dari iso di gpt3 lvm (dan 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 garis loopback menunjuk ke 2 salinan berbeda dari iso yang sama. Saya telah memverifikasi di baris perintah grub bahwa kedua jalur loopback berfungsi.

Saat mem-boot dari iso di partisi non-lvm, semuanya bekerja dengan baik.

Saat mem-boot dari iso di partisi lvm, boot akan 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 berfungsi, tapi saya tidak tahu harus mengubah apa "/ dev / sda2" menjadi untuk boot lvm.


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

Apakah ini tidak mungkin? Atau apakah ini sesuatu yang belum pernah dicoba sebelumnya?


EDIT2: Karunia saya telah lama berakhir, dan setelah 9 bulan, saya berasumsi ini tidak mungkin dilakukan dengan distro Linux mana pun. Saya akan membiarkan pertanyaan terbuka, tapi saya ragu akan ada solusi yang berfungsi kapan saja dalam waktu dekat.

snapshoe
sumber

Jawaban:

1

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

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 memberi tahu Linux untuk memuat semua LVM dan iso-scan mencarinya.

nxxy
sumber
The UUID di baris yang dimulai dengan searchadalah 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
1

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

  • Baris yang dimulai dengan set iso_pathmendefinisikan path, 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", tetapi /homevolume logis yang dipasang, jadi saya meninggalkan ini dan memulai jalan dengan/erik/Downloads/…
  • Baris yang diawali dengan searchmemiliki variabel alfanumerik yang aneh (yang disebut UUID) di akhir, yang dimulai dengan 6340. Saya mendapat nomor ini dari perintah

    sudo blkid
    

    yang memberi saya, di sepanjang yang lain, baris berikut

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • Kemudian, hal penting lainnya jika Anda ingin mem-boot file iso lainnya, adalah baris yang dimulai dengan linuxdan initrd. Saya mendapatkannya dengan membuka file iso dengan file-roller(gui untuk mengekstrak arsip terkompresi) atau mc(file manager 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 garis yang dimulai dengan label, dan di bawahnya ada 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 dari 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 diawali dengan menuentry, dan di bawahnya ada beberapa baris penting berikut

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

      yang bisa Anda salin.

erik
sumber
0

Saya pikir itu tidak mungkin untuk file iso resmi sebagian besar distribusi.

Kesalahan yang Anda dapatkan:

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

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

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

alphatiger
sumber
Hal ini mungkin, melihat jawaban sederhana saya, di mana saya boot dari Fedora 27 dan Ubuntu 17.10.
erik
0

Anda bisa mencoba ini:

Tambahkan ini di awal menu masuk:

insmod lvm

Kemudian, tentukan partisi LVM Anda dengan:

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

Jadi entri ISO Xubuntu Anda akan 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
}

Harap perbaiki seperlunya.

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

Leonardo Dagnino
sumber
Saya mencoba saran Anda, tetapi seperti yang Anda katakan, iso masih belum ditemukan.
snapshoe
0

Hanya satu titik di atasnya:

ISO saat boot harus me-mount iso, jadi harus tahu cara menemukannya.

Grub2 dapat melihat perintah ISO dengan insmod ..., tetapi itu membuat tidak ada yang lain selain membiarkan Grub2 membaca di dalam ISO, loop mount, dll, tetapi begitu Linux di dalam ISO memulai LVM / LUKS / loop / etc adalah tidak ada di sana (tidak dipasang), skrip boot di dalam ISO harus tahu cara me-mount LVM / LUKS / loop; jadi jika Linux itu tidak siap untuk melakukannya, itu tidak akan mungkin untuk boot dari itu.

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

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

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

Anonimo
sumber