UEFI + BIOS बूटबल लाइव डेबियन खिंचाव amd64 दृढ़ता के साथ


20

इस मामले पर मुझे वर्तमान में मिली सभी जानकारी मेरे स्वाद के लिए अपर्याप्त है। यह या तो पुराना है, भ्रामक है या गलत है, अत्यधिक जटिल लगता है या इस विशिष्ट प्रश्न को कवर नहीं करता है।

लक्ष्य:

  • बूट करने योग्य USB ड्राइव (UEFI और विरासत समर्थित BIOS दोनों)
  • (आधारित) लाइव डेबियन 9 (खिंचाव)
  • दृढ़ता (डिफ़ॉल्ट रूप से और UEFI और विरासत BIOS दोनों के लिए)
  • डिफ़ॉल्ट रूप से जर्मन कीबोर्ड लेआउट
  • अन्य GNU / Linux सिस्टम के समस्या निवारण के लिए उपयुक्त है

कारण:

  • हर उपयोग पर कीबोर्ड लेआउट सेटअप करना एक वास्तविक सिरदर्द है
  • क्रायसिपेटअप और लाइफब्यूटमार डिफ़ॉल्ट डेबियन लाइव छवियों में गायब हैं
  • सूक्ति-टर्मिनल में प्रति डिफ़ॉल्ट यह कष्टप्रद सफेद पृष्ठभूमि है

कोई समाधान नहीं:

  • (री) कस्टम डेबियन लाइव छवि का निर्माण (यह थकाऊ लगता है, हालांकि मैंने अभी तक इसकी कोशिश नहीं की थी)
  • अनबूटिन
  • कुछ विदेशी स्वचालित प्रक्रिया जहां मैं नहीं देख रहा हूं कि क्या हो रहा है

डेबियन लाइव और स्थापित छवियां isohybrid हैं और आसानी से उपयोग करने वाले उपकरणों को ब्लॉक करने के लिए लिखा जा सकता है dd। और वे उस तरह से USB ड्राइव से काम करते हैं, जो बहुत अच्छा है! हालांकि, ग्रब और आइसोलिनक्स कॉन्फ़िगरेशन को संपादित किए बिना प्रति डिफ़ॉल्ट एक गैर-अंग्रेजी कीबोर्ड लेआउट के साथ शुरू करने के लिए कोई दृढ़ता और कोई रास्ता नहीं होगा, जो कि लाइव आईएसओ छवि के बहुत ही पढ़ने योग्य ISO9660 फाइलसिस्टम में शामिल है। इसलिए लाइव आईएसओ को USB ड्राइव पर लिखने के बाद भी इन मापदंडों को बदला नहीं जा सकता है।

जवाबों:


30

यहाँ दृढ़ता के साथ एक डेबियन लाइव यूएसबी ड्राइव बनाने का एक तरीका है। यह लापता पैकेजों को स्थापित करने की अनुमति देगा जो तब से दृढ़ता का उपयोग करते हुए हर लाइव बूट पर उपलब्ध होंगे। चूँकि हम पढ़े-लिखे सक्षम फाइल सिस्टम पर लाइव आईएसओ इमेज फाइलसिस्टम कंटेंट को फिर से बनाते हैं, हम बूस्ट लोडर कॉन्फ़िगरेशन को दृढ़ता से सक्षम करने और कीबोर्ड लेआउट को बूट पर सेट करने के लिए बदल सकते हैं।

डेबियन खिंचाव लाइव छवि बनाने के लिए डेबियन खिंचाव और बस्टर पर काम करने के लिए यहां वर्णित चरणों का परीक्षण किया गया था।

इसमें बहुत सारे चरण शामिल हैं, लेकिन ऐसा लगता है कि यह विधि अभी भी काफी कुशल है।

अस्वीकरण: आप लक्ष्य USB ड्राइव पर डेटा खो देंगे और यदि आप नीचे दिए गए आदेशों को गड़बड़ करते हैं तो आपको बाद में बहुत खेद महसूस हो सकता है। मैं आपके कार्यों के लिए जिम्मेदार नहीं हूं।

ख़ुशकिस्मत महसूस करना

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

टी एल; डॉ

डेबियन लाइव आईएसओ छवि प्राप्त करें, फिर निम्न कार्य करें:

umount /dev/sdX*
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on

mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3

mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso

cp -ar /tmp/live-iso/* /tmp/usb-live

echo "/ union" > /tmp/usb-persistence/persistence.conf

grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX

dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2

mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg

sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso

विस्तार से और कुछ स्पष्टीकरण के साथ

आपको निम्न निर्देशों के अधिकांश को उन्नत करने की आवश्यकता होगी, जो sudoकि अधिकतर GNU / Linux सिस्टम पर प्रयोग करके उन्नत विशेषाधिकार के साथ है ।

डाउनलोड

अपनी पसंद के विंडो मैनेजर के साथ एक डेबियन लाइव ISO छवि डाउनलोड करें:

https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/

हम डाउनलोड की गई आईएसओ छवि को "live.iso" के रूप में संदर्भित करेंगे।

लक्ष्य ड्राइव निर्धारित करें

उस डिवाइस को खोजें जो आपके USB ड्राइव का उपयोग कर रहा है lsblk। हम वह फोन करेंगे /dev/sdX

अनमाउंट

अपने ड्राइव का उपयोग करके मौजूदा विभाजन को अनमाउंट करें umount /dev/sdX*

विभाजन बनाएँ

हमें USB ड्राइव से बूट करने के लिए UEFI पीसी के लिए एक EFI बूट विभाजन की आवश्यकता है। फिर हमें मूल लाइव आईएसओ फाइलसिस्टम छवि सामग्री को रखने के लिए एक पर्याप्त बड़े विभाजन की आवश्यकता है। उस विभाजन में legacy_bootध्वज सेट होना चाहिए । फिर हम यूएसबी ड्राइव के सभी शेष स्थान का उपयोग करते हुए दृढ़ता विभाजन को जोड़ते हैं। आप किसी भी GPT सक्षम विभाजन टूल ( legacy_bootध्वज को ध्यान में रखते हुए ) के साथ कर सकते हैं । यहाँ एक उदाहरण का उपयोग किया गया है parted:

parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on

यह एक GPT विभाजन तालिका और एक सुरक्षात्मक MBR विभाजन तालिका बनाता है।

Filesystems बनाएँ

हम ईएफआई और लाइव विभाजन पर एफएटी चाहते हैं और हम ext4दृढ़ता पर निर्भर हैं और हमें persistenceकाम करने के लिए दृढ़ता सुविधा के लिए लेबल की आवश्यकता है ।

mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3

संसाधन जुटाना

हमें अस्थायी माउंट बिंदुओं पर स्रोत ISO और लक्ष्य विभाजन माउंट करने की आवश्यकता होगी।

mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso

लाइव सिस्टम स्थापित करें

लाइव आईएसओ फाइलसिस्टम कंटेंट को LIVE पार्टीशन पर कॉपी करें।

cp -ar /tmp/live-iso/* /tmp/usb-live

persistence.conf

आवश्यक कॉन्फ़िगरेशन फ़ाइल के साथ दृढ़ता फाइल सिस्टम तैयार करें। इस फ़ाइल के बिना दृढ़ता सुविधा काम नहीं करेगी।

echo "/ union" > /tmp/usb-persistence/persistence.conf

UEFI समर्थन के लिए ग्रब

UEFI बूटिंग समर्थन के लिए grub2 स्थापित करें (इसके लिए grub-efi-amd64-binडेबियन पर पैकेज की आवश्यकता होती है )। हम यूईएफआई सुरक्षित बूट का उपयोग नहींgrub-install करने के लिए मजबूर करते हैं , जो स्पष्ट रूप से --removableविकल्प के साथ काम नहीं करता है।

grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX

विरासत BIOS समर्थन के लिए Syslinux

gptmbr.binड्राइव में syslinux बूटलोडर स्थापित करें (syslinux डाउनलोड करें या पैकेज स्थापित करें syslinux-common)। फिर लाइव विभाजन के लिए syslinux स्थापित करें।

dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2

आइसोलिनक्स तय

Syslinux के साथ काम करने के लिए मूल लाइव ISO के आइसोलिनक्स विन्यास का पुन: उपयोग करें।

mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg

कर्नेल पैरामीटर

अब जब हमने लाइव सिस्टम फ़ाइलों को एक वास्तविक रीड-राइट फाइलसिस्टम में कॉपी किया है, तो हम ग्रब और सिसलिनक्स कॉन्फिग को मैनिपुलेट कर सकते हैं।

करने के लिए दृढ़ता कर्नेल पैरामीटर जोड़ें menu.cfgऔर grub.cfg। दोनों फाइलों में, persistenceइसमें संबंधित पहली पंक्ति के अंत में कीवर्ड जोड़ें boot=live

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

कीबोर्ड-लेआउट कर्नेल पैरामीटर सेट करें। दोनों फाइलों में, इसमें संबंधित पहली पंक्ति के अंत में कीवर्ड जोड़ें boot=live

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

पीस छप

ग्रब स्प्लैश छवि को ठीक करें (वैकल्पिक; हमने इसे किसी अन्य निर्देशिका में स्थानांतरित किया है)।

sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg

अनमाउंटिंग और क्लीनअप

umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso

क्यों यह UEFI और BIOS दोनों के लिए काम करना चाहिए

यूईएफआई मोड में शुरू होने पर, पीसी जीपीटी विभाजन तालिका में परिभाषित एफएटी विभाजन को स्कैन करेगा। पहला FAT विभाजन UEFI ग्रब बूटलोडर को ले जाता है, जो पाया जाता है क्योंकि यह हटाने योग्य ड्राइव (यह --removableकरने के लिए स्विच grub-install) के लिए UEFI द्वारा निर्दिष्ट पथ में स्थित है । काम करने के लिए कोई यूईएफआई बूट प्रविष्टि आवश्यक नहीं है, हमें केवल यूएसबी ड्राइव से पीसी को बूट करने का प्रयास करने की आवश्यकता है। उस ग्रब को वहां से लेने के लिए कॉन्फ़िगर किया गया है (grub.cfg को लोड करें, मेनू दिखाएं आदि)।

BIOS मोड में शुरू करने और USB ड्राइव से बूट करने के लिए चयन करते समय, पीसी gptmbr.binबूट लोडर कोड निष्पादित करेगा जिसे हमने USB ड्राइव के सुरक्षात्मक एमबीआर को लिखा है। वह बूटलोडर उस विभाजन से legacy_bootध्वज और श्रृंखला लोड सिसलिन के साथ चिह्नित GPT विभाजन की तलाश करता है। इसके बाद Syslinux ओवर लोड (मेनू menu। एफजी, मेन्यू इत्यादि दिखाता है)।

एन्क्रिप्टेड दृढ़ता

दृढ़ता विभाजन पर सादे ext4 का उपयोग करने के बजाय, कोई पहले LUKS (उपयोग cryptsetup) के साथ दृढ़ता विभाजन को एन्क्रिप्ट कर सकता है , फिर ext4 (उचित लेबल का उपयोग करके ) के साथ प्रारूपित करें । हालाँकि, जैसा कि प्रलेखन कहता है, लाइव सिस्टम में cryptsetupपैकेज शामिल होना चाहिए । अन्यथा, एन्क्रिप्टेड विभाजन को लाइव सिस्टम द्वारा डिक्रिप्ट नहीं किया जा सकता है। इसका मतलब है कि किसी को पहले एक कस्टम लाइव आईएसओ का निर्माण करना होगा। हालांकि, इस जवाब के दायरे से बाहर है।

इतिहास

--no-uefi-secure-bootविकल्प पहले से करने के लिए कॉल का हिस्सा नहीं था grub-install। छड़ी ने मेरे लिए ठीक काम किया, लेकिन वह डेबियन बस्टर के साथ बंद हो गई, भले ही सुरक्षित बूट अभी भी मेरी मशीन पर अक्षम है।


1
इसके लिए धन्यवाद देने के लिए मैंने यहां एक खाता बनाया है। उत्कृष्ट मैनुअल। छोटा सुझाव - यह अच्छा होगा कि दृढ़ता से विभाजन को एन्क्रिप्ट किया जाए।
पेट्र हैवलिस

1
@PetrHavlicek सच। मुझे लगता है कि ऐसा करना काफी आसान है, लेकिन मैंने अपना खाली समय इस अन्य प्रश्न के साथ क्यू एंड ए बनाने में बिताया, इसलिए मुझे अभी भी इस विचार को फिर से देखना है (और आपकी प्रशंसा के लिए धन्यवाद :)।
10

बहुत अच्छा काम करता है! कुछ अतिरिक्त स्पष्टीकरण अच्छा होगा, हालांकि। (सुनिश्चित करें कि आप इसे सभी मैन पेजों पर देख सकते हैं, लेकिन उदाहरण के लिए mktable, जबकि mklable के समान, वास्तव में इस तरह के रूप में प्रलेखित नहीं है, आदि)
mikuszefski

क्या FAT स्वरूपित USB स्टिक पर केवल एक फ़ाइल होना संभव है, जिसमें दृढ़ता वॉल्यूम है? यह फ़ाइल बढ़ते लूप द्वारा संभव होना चाहिए। लेकिन विभाजन के बजाय एक फाइल लेने के लिए डेबियन को initrd कैसे बताएं?
ceving

इसके लिए debian-live.alioth.debian.org/live-manual/stable/manual/html/… देखें । संक्षेप में: किसी भी फाइल सिस्टम के मूल में एक छवि (विरल) फ़ाइल बनाएँ, उस फ़ाइल को 'दृढ़ता' नाम दें और उसे प्रारूपित करें, जैसे, ext4 के साथ।
१०:२४
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.