จาก GRUB2 บูต ISO ในโลจิคัลวอลุ่ม LVM2


8

tl; dr - เป็นไปได้ไหมที่จะบูตจากไฟล์. iso ที่อยู่ในโลจิคัลวอลุ่ม lmv2 ที่ไม่เข้ารหัส อย่างไร?

ฉันกำลังพยายามตั้งค่านี้ใน VirtualBox VM ก่อนที่จะทำจริงกับแล็ปท็อปของฉัน ฉันมีการตั้งค่าต่อไปนี้:

  • พาร์ติชัน 4 gpt
    • gpt1 - บูต 2m ef02 bios
    • gpt2 - 5G แบบไม่เข้ารหัส lvm, สำหรับข้อมูลอื่น ๆ , iso's, ฯลฯ
    • gpt3 - lvm ที่ไม่ได้เข้ารหัส 5G สำหรับ / boot, iso's เป็นต้น
    • gpt4 - ส่วนที่เหลือ, lvm, เข้ารหัสด้วย dm-crypt / luks, สำหรับ root, swap, home, etc
  • ใน gpt2 ฉันมีสำเนาของ Arch และ Xubuntu iso ปัจจุบัน
  • ใน gpt3 ฉันมี lvm2 lv พร้อมสำเนาเดียวกันของ iso เดียวกัน

ฉันทำงานต่อไปนี้:

  • ใน gpt4 การติดตั้งการทำงานของ Arch และ Xubuntu (และต้องการเพิ่ม distro's อื่น ๆ ในโลจิคัลวอลุ่มอื่นในบางจุด)
  • ติดตั้ง grub2 จาก Arch ใน / dev / sda
  • การใช้คำสั่ง configfile ของ grub2 สามารถสลับและบูตจากเมนู grub2 ของ distro
  • สามารถบูต iso's จากเมนูด้วงจาก non-lvm gpt2

สิ่งที่ฉันต้องการจะทำคือการบูตจาก iso's ใน gpt3 lvm (และท้ายที่สุดไม่ได้มีพาร์ทิชัน non-lvm gpt2 เลย)

รายการด้วงของฉันคือ:

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 เส้นชี้ไปที่สำเนา 2 ชุดของ iso เดียวกัน ฉันได้ตรวจสอบที่บรรทัดคำสั่ง grub ที่ทั้งสองวนกลับ

เมื่อทำการบูทจาก iso ในพาร์ติชั่นที่ไม่ใช่ LVM ทุกอย่างทำงานได้ดี

เมื่อทำการบูทจาก iso ในพาร์ติชั่น lvm การบู๊ตจะเริ่มต้นขึ้นและในที่สุดก็ได้รับข้อผิดพลาดนี้

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

สำหรับรายการ arch:

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
}

การบูตจาก gpt2 iso ใช้งานได้ แต่ฉันไม่รู้ว่าจะเปลี่ยน "/ dev / sda2" เป็น boot lvm หรือไม่


แก้ไข: สิ่งนี้สามารถทำได้? สำหรับไฟล์. iso อย่างเป็นทางการของ distro Linux ใด ๆ Fedora? Debian? openSUSE? CentOS?

มันเป็นไปไม่ได้เหรอ? หรือมันเป็นสิ่งที่ไม่มีใครคิดว่าจะลองก่อน


EDIT2: เงินรางวัลของฉันหมดอายุมานานแล้วและหลังจาก 9 เดือนฉันคิดว่านี่เป็นไปไม่ได้เลยสำหรับ Linux distro ฉันจะเปิดคำถามไว้ แต่ฉันสงสัยว่าจะมีวิธีแก้ปัญหาการทำงานได้ตลอดเวลาในอนาคตอันใกล้

คำตอบ:


1

ด้วยการใช้ Fedora 21 ISO ฉันลองทำสิ่งต่อไปนี้สำเร็จ:

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จะบอก Linux ให้โหลด LVM ทั้งหมดและiso-scan ทำการค้นหา


UUIDในบรรทัดที่เริ่มต้นด้วยการsearchเป็นหนึ่งในปริมาณตรรกะที่มีไฟล์ ISO, ที่เหมาะสมหรือไม่ sudo blkidจะได้รับมันที่คุณต้องทำ
erik

สิ่งนี้สามารถทำได้ง่ายขึ้นมากดูคำตอบของฉันสำหรับการบูต Fedora และ Ubuntu จาก LVM
erik

1

ฉันได้รับแรงบันดาลใจจากวิธีแก้ปัญหาอย่างง่ายสำหรับ Ubuntuฉันใช้สิ่งต่อไปนี้ซึ่งทำงานเพื่อโหลด Fedora 27 KDE iso และ Ubuntu 17.10 iso

ฉันเพิ่งต่อท้ายบรรทัดต่อไปนี้ในไฟล์ /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
}

คำอธิบาย

  • บรรทัดที่ขึ้นต้นด้วยset iso_pathกำหนดพา ธ โดยที่ไฟล์ iso สามารถพบได้บนโลจิคัลวอลุ่ม เมื่อฉันเริ่มระบบของฉันมันอยู่ใน/home/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso"นั้น แต่/homeเป็นโลจิคัลวอลุ่มที่เมาท์ดังนั้นฉันจึงปล่อยสิ่งนี้และเริ่มต้นเส้นทางด้วย/erik/Downloads/…
  • บรรทัดที่ขึ้นต้นด้วยsearchมีตัวแปรและตัวเลขแปลก ๆ (เรียกว่า UUID) 6340ในตอนท้ายที่ขึ้นต้นด้วย ฉันได้รับหมายเลขนี้จากคำสั่ง

    sudo blkid
    

    ซึ่งทำให้ฉันพร้อมคนอื่น ๆ บรรทัดต่อไปนี้

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • จากนั้นอีกหนึ่งสิ่งที่สำคัญหากคุณต้องการที่จะบูต ISO ไฟล์อื่น ๆ จะเป็นเส้นที่ขึ้นต้นด้วยและlinux initrdฉันได้รับโดยการเปิดไฟล์ isoด้วยfile-roller(gui สำหรับการคลายบีบอัดไฟล์บีบอัด) หรือmc(console file manager)

    • Fedora และที่คล้ายกัน:มีคุณไปยังไดเรกทอรีที่คุณจะพบไฟล์ที่เรียกว่า/isolinux isolinux.cfgฉันพบบางบรรทัดที่ขึ้นต้นด้วยlabelและด้านล่างมีบรรทัดสำคัญต่อไปนี้

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

      ซึ่งคุณจะใช้เพื่อเติมเต็มสองบรรทัดสุดท้ายของ menuentrygrub2

    • Ubuntu และที่คล้ายกัน:มีคุณไปยังไดเรกทอรีที่คุณจะพบไฟล์ที่เรียกว่า/boot/grub grub.cfgที่นี่คุณจะพบกับบางบรรทัดที่ขึ้นต้นด้วยmenuentryและอยู่ใต้บรรทัดสำคัญต่อไปนี้

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

      ซึ่งคุณสามารถคัดลอก


0

ฉันคิดว่ามันเป็นไปไม่ได้สำหรับไฟล์ iso อย่างเป็นทางการของดิสทริบิวชันส่วนใหญ่

ข้อผิดพลาดที่คุณได้รับ:

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

หมายความว่าเมื่อบูตระบบสดที่คุณเริ่มต้นจะค้นหาไดรฟ์ซีดี / ดีวีดีและไม่พบสิ่งใด

Live CD ไม่ได้ถูกกำหนดค่าให้ค้นหา iso ต้นทางบน LVM; คุณอาจจะสามารถแก้ไขบูตสคริปท์ของภาพได้ แต่ฉันไม่คิดว่าไฟล์. iso ของ distro อย่างเป็นทางการจะทำเช่นนั้น คุณสามารถลองติดต่อ devs ของ distro ที่คุณชื่นชอบเพื่อรวมเข้าด้วยกัน?


มันเป็นไปได้ดูคำตอบง่ายๆของฉันที่ฉันบูตจาก Fedora 27 และ Ubuntu 17.10
erik

0

คุณสามารถลองสิ่งนี้:

เพิ่มสิ่งนี้ในตอนต้นของเมนู:

insmod lvm

จากนั้นระบุพาร์ติชัน LVM ของคุณด้วย:

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

ดังนั้นรายการ Xubuntu ISO ของคุณจะเป็นเช่นนี้:

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
}

โปรดแก้ไขตามที่จำเป็น

สิ่งนี้จะทำให้ GRUB รู้จักปริมาตร lvm2 ทำให้สามารถอ่านไฟล์ ISO ได้ อย่างไรก็ตามอาจจะไม่พบ ISO ...


ฉันลองคำแนะนำของคุณแล้ว แต่อย่างที่คุณพูด iso ยังไม่พบ
snapshoe

0

เพียงจุดบน:

ISO เมื่อทำการบูทจะต้องเมานท์ iso ดังนั้นจะต้องรู้วิธีค้นหามันด้วย

Grub2 สามารถดู ISO ด้วยคำสั่ง insmod ... แต่นั่นทำให้ไม่มีอะไรอื่นนอกจากให้ Grub2 อ่านภายใน ISO, ลูปติดมัน ฯลฯ แต่ทันทีที่ Linux ภายใน ISO เริ่มใช้งาน LVM / LUKS / loop / etc ไม่ได้อยู่ที่นั่น (ไม่ได้ติดตั้ง) สคริปต์บูตภายใน ISO ต้องทราบวิธีติดตั้ง LVM / LUKS / ลูปนั้น ดังนั้นหาก Linux ไม่ได้เตรียมที่จะทำมันจะไม่สามารถบูตได้

ตัวอย่างที่ไม่มี LVM, LUKS และอื่น ๆ ... หาก Linux LiveCD ISO ปกติไม่ได้ออกแบบมาเพื่อค้นหาและเชื่อมต่อลูปไปยังไฟล์. iso ในขณะทำการบูตจะไม่สามารถบูตจาก Grub2 ได้ (โดยมี. iso เป็น ไฟล์).

สำหรับกรณีดังกล่าวคุณต้องมีตัวจำลอง CD / DVD ฮาร์ดแวร์ (หากใช้กับฮาร์ดแวร์จริง) หรือเพียงติดตั้ง. iso บนหน่วย CD / DVD เสมือนของเครื่องเสมือน

แน่นอนว่าตัวเลือกอื่นคือ 'แก้ไข' ISO ดังกล่าวเพื่อรวมตอนบูตสคริปต์บางอย่างเพื่อค้นหาและเมานต์ LVM / LUKS / เป็นต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.