GRUB2 से, LVM2 लॉजिकल वॉल्यूम में ISO बूट करें


8

tl; dr - क्या यह एक .iso फ़ाइल से बूट करना संभव है जो एक अनएन्क्रिप्टेड lmv2 लॉजिकल वॉल्यूम में स्थित है? कैसे?

इससे पहले कि मैं अपने लैपटॉप के साथ असली के लिए यह एक VirtualBox VM में स्थापित करने की कोशिश कर रहा हूँ। मेरे पास निम्नलिखित सेट अप हैं:

  • 4 जीपीटी विभाजन
    • gpt1 - 2M ef02 बायोस बूट
    • gpt2 - 5 जी अनएन्क्रिप्टेड नॉन-एलवीएम, मिस डेटा के लिए, आइसो आदि।
    • gpt3 - 5G अनएन्क्रिप्टेड lvm, के लिए / बूट, iso's, आदि।
    • gpt4 - शेष, lvm, dm-crypt / luks के साथ एन्क्रिप्ट किया गया, रूट, स्वैप, होम, आदि के लिए।
  • gpt2 में, मेरे पास वर्तमान आर्क और Xubuntu iso की प्रतियां हैं
  • gpt3 में, मेरे पास lvm2 lv है जो समान आइसो की समान प्रतियों के साथ है

मेरे पास निम्नलिखित कार्य हैं:

  • gpt4 में, आर्क और ज़ुबंटू की कार्यप्रणाली इंस्टाल (और कुछ अन्य में अन्य लॉजिकल वॉल्यूम में अन्य डिस्ट्रो को जोड़ना चाहेंगे)
  • grub2 आर्च पर / देव / एसडीए से स्थापित किया गया
  • grub2 के configfile कमांड का उपयोग करके, distro के grub2 मेनू से स्विच और बूट कर सकता है
  • गैर-lvm gpt2 से ग्रब मेनू से आइसो बूट कर सकते हैं

मैं क्या करना चाहूंगा, यह iso से gpt3 lvm में बूट है (और अंत में, गैर- 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 अलग-अलग प्रतियों की ओर इशारा करती हैं। मैंने ग्रब कमांड लाइन पर सत्यापित किया है कि दोनों लूपबैक लाइनें काम करती हैं।

जब गैर-lvm विभाजन में आइसो से बूट होता है, तो सब कुछ ठीक काम करता है।

जब lvm विभाजन में आइसो से बूट होता है, तो बूट शुरू होता है, और अंततः यह त्रुटि मिलती है:

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

आर्च प्रविष्टि के लिए:

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 आईएसओ से बूटिंग काम करता है, लेकिन मुझे नहीं पता कि lvm बूट के लिए "/ dev / sda2" को क्या बदलना है।


संपादित करें: यह किया जा सकता है? के लिए किसी भी मौजूदा लिनक्स distro की आधिकारिक .iso फ़ाइल? फेडोरा? डेबियन? openSUSE नहीं है? CentOS?

क्या यह असंभव है? या यह कुछ ऐसा है जिसे पहले किसी ने भी करने की कोशिश नहीं की है?


EDIT2: मेरी इनाम की अवधि समाप्त हो गई है, और 9 महीने बाद, मैं मान रहा हूं कि यह किसी भी लिनक्स डिस्ट्रो के साथ संभव नहीं है। मैं प्रश्न को खुला छोड़ देता हूं, लेकिन मुझे संदेह है कि निकट भविष्य में कभी भी काम करने का समाधान होगा।

जवाबों:


1

फेडोरा 21 आईएसओ का उपयोग करते हुए, मैंने बस निम्नलिखित की सफलतापूर्वक कोशिश की:

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 लिनक्स को सभी LVM को लोड करने के लिए कहेगा और आइसो-स्कैन उन्हें खोजता है।


UUID लाइन है कि के साथ शुरू होता में searchतार्किक मात्रा कि, आईएसओ फ़ाइल है सही में से एक है? इसे पाने के लिए, आपको करना होगा sudo blkid
एरिक

यह बहुत आसान हो सकता है, LVM से फेडोरा और उबंटू को बूट करने के लिए मेरा जवाब देखें।
इरिक

1

उबंटू के लिए इस सरल समाधान से प्रेरित होकर , मैंने निम्नलिखित का उपयोग किया, जो एक फेडोरा 27 केडीई आइसो और एक उबंटू 17.10.o लोड करने के लिए काम करता है।

मैंने फ़ाइल में केवल निम्न पंक्तियों को जोड़ा है /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पथ को परिभाषित करती है, जहाँ तार्किक आयतन पर आइसो फ़ाइल पाई जा सकती है। जब मैं अपना सिस्टम शुरू करता हूं, तो यह निहित होता है /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"
    
  • फिर, एक और महत्वपूर्ण बात यदि आप अन्य आईएसओ फाइलों को बूट करना चाहते हैं, तो वे रेखाएं हैं जो शुरू होती हैं linuxऔर initrd। मैंने उन्हें iso फ़ाइल को खोलने के साथ file-roller(संपीड़ित अभिलेखागार निकालने के लिए gui) या mc(कंसोल फ़ाइल प्रबंधक) के साथ प्राप्त किया।

    • फेडोरा और समान: वहाँ आप निर्देशिका में जाते हैं /isolinux, जहाँ आपको एक फ़ाइल मिलेगी, जिसे कहा जाता है isolinux.cfg। वहाँ मैंने कुछ पंक्तियों की शुरुआत की label, और उनसे नीचे की महत्वपूर्ण पंक्तियाँ देखीं

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

      जिसका उपयोग आप मेरे grub2 की अंतिम दो पंक्तियों को भरने के लिए करेंगे menuentry

    • उबंटू और इसी तरह: वहां आप डायरेक्टरी में जाते हैं /boot/grub, जहाँ आपको एक फाइल मिलेगी, जिसे कहा जाता है grub.cfg। यहां आपको कुछ पंक्तियाँ मिलेंगी menuentry, जो शुरू होती हैं , और उनके नीचे निम्नलिखित महत्वपूर्ण पंक्तियाँ हैं

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

      जिसे आप कॉपी कर सकते हैं।


0

मुझे लगता है कि अधिकांश वितरण की आधिकारिक आईएसओ फ़ाइल के लिए यह संभव नहीं है।

आपको जो त्रुटि हो रही है:

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

इसका मतलब यह है कि बूट पर, आप जो लाइव सिस्टम शुरू कर रहे हैं वह सीडी / डीवीडी ड्राइव के लिए खोज कर रहा है और किसी को नहीं ढूंढ रहा है।

लाइव सीडी को LVM पर अपने स्रोत के लिए खोज करने के लिए कॉन्फ़िगर नहीं किया गया है; आप शायद इसे करने के लिए छवि की बूट स्क्रिप्ट को संशोधित कर सकते हैं, लेकिन मुझे नहीं लगता कि कोई वर्तमान डिस्ट्रो अधिकारी। .इस फ़ाइल को करता है। आप अपने पसंदीदा डिस्ट्रो के देवों से संपर्क करने की कोशिश कर सकते हैं जो शायद एकीकृत हो?


यह है संभव है, मेरे सरल जवाब है, जहां मैं फेडोरा 27 और Ubuntu 17.10 से बूट देखते हैं।
इरिक

0

आप यह कोशिश कर सकते हैं:

मेनेंट्री की शुरुआत में इसे जोड़ें:

insmod lvm

उसके बाद, अपना LVM विभाजन निर्दिष्ट करें:

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

तो आपका Xubuntu आईएसओ प्रविष्टि इस तरह होगा:

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 नहीं मिला है।
स्नैपशॉट

0

बस उस पर एक बिंदु:

आईएसओ जब बूटिंग आईएसओ को माउंट करना चाहिए, तो यह पता होना चाहिए कि इसे कैसे खोजना है।

Grub2 को insmod ... कमांड के साथ ISO देख सकते हैं, लेकिन यह कि Grub2 को ISO के अंदर पढ़ने के अलावा और कुछ नहीं बनाता है, लूप इसे माउंट करता है, आदि, लेकिन जैसे ही ISO के अंदर लिनक्स LVM / LUKS / लूप / etc शुरू होता है। वहाँ नहीं (घुड़सवार नहीं), आईएसओ के अंदर बूट स्क्रिप्ट को पता होना चाहिए कि एलवीएम / एलयूकेएस / लूप कैसे माउंट किया जाए; इसलिए यदि ऐसा करने के लिए लिनक्स तैयार नहीं है, तो इससे बूट करना संभव नहीं होगा।

LVM, LUKS, आदि के बिना नमूना ... यदि एक सामान्य लिनक्स LiveCD ISO को बूट करने के लिए एक .iso फ़ाइल को खोजने और माउंट करने के लिए डिज़ाइन नहीं किया गया है, तो इसे Grub2 (के साथ .iso) से बूट करना संभव नहीं होगा। फ़ाइल)।

ऐसे मामलों के लिए आपको एक हार्डवेयर सीडी / डीवीडी एमुलेटर (यदि वास्तविक हार्डवेयर पर) की आवश्यकता है, या बस वर्चुअल मशीन के वर्चुअल सीडी / डीवीडी यूनिट पर .iso माउंट करें।

दूसरा विकल्प, ज़ाहिर है, ऐसे ISO को 'एडिट' करना है जिसमें LVM को खोजने और LVM / LKKS / इत्यादि को माउंट करने के लिए कुछ स्क्रिप्ट को शामिल किया जाए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.