UEFI + BIOS สามารถบูตได้ Debian ยืด amd64 ด้วยความคงอยู่


20

ข้อมูลทั้งหมดที่ฉันพบในขณะนี้ไม่เพียงพอสำหรับรสนิยมของฉัน มันอาจล้าสมัยทำให้เข้าใจผิดหรือผิดดูเหมือนว่าซับซ้อนเกินไปหรือไม่ครอบคลุมคำถามเฉพาะนี้

เป้าหมาย:

  • ไดรฟ์ USB ที่สามารถบู๊ตได้ (รองรับ UEFI และ BIOS รุ่นเก่า)
  • (ขึ้นอยู่กับ) เดเบียนสด 9 (ยืด)
  • การคงอยู่ (โดยค่าเริ่มต้นและสำหรับทั้ง UEFI และ BIOS รุ่นเก่า)
  • รูปแบบแป้นพิมพ์ภาษาเยอรมันต่อค่าเริ่มต้น
  • เหมาะสมสำหรับการแก้ไขปัญหาระบบ GNU / Linux อื่น ๆ

เหตุผล:

  • ต้องตั้งค่ารูปแบบแป้นพิมพ์ในทุกการใช้งานเป็นเรื่องปวดหัวจริง
  • cryptsetup และ efibootmgr หายไปในภาพสด Debian ที่เป็นค่าเริ่มต้น
  • gnome-terminal มีพื้นหลังสีขาวที่น่ารำคาญตามค่าเริ่มต้น

ไม่มีวิธีแก้ไข:

  • (ใหม่) การสร้างภาพเดเบียนแบบกำหนดเอง (ดูเหมือนน่าเบื่อแม้ว่าฉันยังไม่ได้ลอง)
  • unetbootin (ขอรหัสผ่านที่ไม่รู้จักเมื่อเริ่มต้นบนเดเบียนยืดและฉันคิดว่ามันไม่สนับสนุน UEFI อย่างไรก็ตาม)
  • กระบวนการอัตโนมัติต่างประเทศบางแห่งที่ฉันไม่เห็นว่าเกิดอะไรขึ้น

ภาพ Debian live และการติดตั้งนั้นเป็น isohybrid และสามารถเขียนลงในอุปกรณ์บล็อกได้ddอย่างสะดวก และพวกมันทำงานจากไดรฟ์ USB แบบนั้นซึ่งเยี่ยมมาก! อย่างไรก็ตามจะไม่มีการคงอยู่และไม่มีวิธีเริ่มต้นด้วยรูปแบบแป้นพิมพ์ที่ไม่ใช่ภาษาอังกฤษต่อการตั้งค่าเริ่มต้นโดยไม่ต้องแก้ไขการตั้งค่า grub และ isolinux ซึ่งรวมอยู่ในระบบไฟล์ ISO9660 แบบอ่านอย่างเดียวของอิมเมจ ISO แบบสด ดังนั้นแม้หลังจากเขียน ISO จริงไปยังไดรฟ์ USB พารามิเตอร์เหล่านี้ยังคงไม่สามารถเปลี่ยนแปลงได้

คำตอบ:


30

นี่คือวิธีการสร้างไดรฟ์ USB Debian สดด้วยความคงอยู่ มันจะช่วยให้การติดตั้งแพ็กเกจที่ขาดหายไปซึ่งจะมีให้ในทุก ๆ การบู๊ตสดโดยใช้การคงอยู่ เนื่องจากเราสร้างเนื้อหาระบบไฟล์อิมเมจ ISO แบบสดใหม่บนระบบไฟล์ที่มีความสามารถในการอ่าน - เขียนเราจึงสามารถเปลี่ยนการกำหนดค่า bootloader เพื่อเปิดใช้งานการคงอยู่และตั้งค่ารูปแบบแป้นพิมพ์ในการบูต

ขั้นตอนที่อธิบายไว้ที่นี่ได้รับการทดสอบการทำงานกับ Debian stretch และ buster เพื่อสร้างภาพ Debian stretch live

มีหลายขั้นตอนที่เกี่ยวข้อง แต่ดูเหมือนว่าวิธีนี้ยังค่อนข้างมีประสิทธิภาพ

ข้อจำกัดความรับผิดชอบ:คุณจะสูญเสียข้อมูลในไดรฟ์ USB เป้าหมายและหากคุณทำตามคำสั่งด้านล่างคุณอาจรู้สึกเสียใจอย่างมากในภายหลัง ผมไม่รับผิดชอบต่อการกระทำของคุณ.

ความรู้สึกโชคดี

หากคุณรู้สึกโชคดีเป็นพิเศษในวันนี้คุณสามารถลองใช้สคริปต์ทุบตีโดยอัตโนมัติกระบวนการสำหรับคุณ กำหนดพา ธ อิมเมจ ISO เป็นพารามิเตอร์แรกและชื่ออุปกรณ์บล็อกไดรฟ์ USB เป็นอันที่สอง โปรดทราบว่าสคริปต์นี้เป็นอันตรายอย่างเมามันและคุณไม่ควรดำเนินการโดยไม่อ่านและทำความเข้าใจก่อน

TL; DR

รับภาพ ISO Debian สดจากนั้นทำสิ่งต่อไปนี้:

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 แบบสดของ Debian ด้วยโปรแกรมจัดการหน้าต่างที่คุณต้องการ:

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

เราจะอ้างถึงภาพ ISO ที่ดาวน์โหลดมาอย่างง่าย ๆ ว่า "live.iso"

กำหนดไดรฟ์เป้าหมาย

ค้นหาอุปกรณ์ที่เป็นไดรฟ์ USB lsblkของคุณโดยใช้ /dev/sdXเราจะเรียกว่า

ยกเลิกการเชื่อมต่อ

ถอนติดตั้งพาร์ติชันที่มีอยู่ในไดรฟ์ของคุณโดยใช้ umount /dev/sdX*

สร้างพาร์ติชัน

เราต้องการพาร์ติชั่นบูต EFI สำหรับพีซี UEFI เพื่อบู๊ตจากไดรฟ์ USB จากนั้นเราต้องการพาร์ติชันที่มีขนาดใหญ่พอที่จะเก็บเนื้อหาอิมเมจระบบไฟล์ ISO ของจริง พาร์ติชันนั้นต้องมีการlegacy_bootตั้งค่าสถานะ จากนั้นเราเพิ่มพาร์ติชั่นการคงอยู่โดยใช้พื้นที่ที่เหลือทั้งหมดของไดรฟ์ USB คุณสามารถทำได้ด้วยเครื่องมือแบ่งพาร์ติชันที่มีความสามารถ 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 ป้องกัน

สร้างระบบไฟล์

เราต้องการ FAT ใน EFI และพาร์ติชั่นที่มีชีวิตและเราต้องการ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

ติดตั้งระบบสด

คัดลอกเนื้อหาระบบไฟล์ ISO สดไปยังพาร์ติชันสด

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

persistence.conf

เตรียมระบบไฟล์เก็บถาวรด้วยไฟล์คอนฟิกูเรชันที่ต้องการ คุณลักษณะการคงอยู่จะไม่ทำงานหากไม่มีไฟล์นี้

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

Grub สำหรับการสนับสนุน UEFI

ติดตั้ง grub2 เพื่อรองรับการบูท UEFI (ต้องใช้grub-efi-amd64-binแพ็คเกจบนเดเบียน) เราบังคับgrub-installให้ไม่ใช้การบู๊ตที่ปลอดภัย UEFI ซึ่งเห็นได้ชัดว่าไม่สามารถใช้งานได้กับ--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

Syslinux สำหรับการรองรับ BIOS ดั้งเดิม

ติดตั้ง syslinux gptmbr.binbootloader ไปยังไดรฟ์ (ดาวน์โหลด 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

การซ่อมแซม Isolinux

ใช้การกำหนดค่า isolinux ของ ISO สดเดิมเพื่อทำงานกับ syslinux

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

พารามิเตอร์เคอร์เนล

ตอนนี้เราคัดลอกไฟล์ระบบสดไปยังระบบไฟล์อ่าน - เขียนจริงเราสามารถจัดการการตั้งค่า grub และ syslinux

เพิ่มความคงทนเคอร์เนลพารามิเตอร์และ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

เมื่อเริ่มต้นในโหมด UEFI พีซีจะสแกนพาร์ติชัน FAT ที่เรากำหนดไว้ในตารางพาร์ติชัน GPT พาร์ติชัน FAT แรกมี UloadI grub bootloader ซึ่งพบได้เนื่องจากอยู่ในพา ธ ที่ระบุโดย UEFI สำหรับไดรฟ์ที่ถอดออกได้ ( --removableสวิตช์เพื่อgrub-installทำสิ่งนี้) ไม่มีรายการบูต UEFI ที่จำเป็นสำหรับการทำงานเราต้องทำให้พีซีพยายามบูตจากไดรฟ์ USB ด้วงนั้นถูกกำหนดค่าให้นำมาจากที่นั่น (โหลด grub.cfg แสดงเมนู ฯลฯ )

เมื่อเริ่มต้นในโหมด BIOS และเลือกที่จะบูตจากไดรฟ์ USB พีซีจะเรียกใช้gptmbr.binรหัส bootloader ที่เราเขียนไปยัง MBR ที่ป้องกันของไดรฟ์ USB bootloader นั้นมองหาพาร์ติชัน GPT ที่ทำเครื่องหมายด้วยlegacy_bootค่าสถานะและ chainload syslinux จากพาร์ติชันนั้น Syslinux จะเข้าควบคุม (โหลด menu.cfg แสดงเมนู ฯลฯ )

ความคงทนในการเข้ารหัส

แทนการใช้ ext4 ธรรมดาบนพาร์ติชั่นการคงอยู่คนแรกสามารถเข้ารหัสพาร์ติชันคงอยู่ด้วย LUKS (โดยใช้cryptsetup) จากนั้นฟอร์แมตด้วย ext4 (โดยใช้เลเบลที่เหมาะสม) อย่างไรก็ตามตามที่เอกสารระบุว่าระบบสดจะต้องมีcryptsetupแพ็คเกจ มิฉะนั้นพาร์ติชันที่เข้ารหัสไม่สามารถถอดรหัสโดยระบบจริง ซึ่งหมายความว่าเราต้องสร้าง ISO แบบกำหนดเองสดก่อน นั่นคืออย่างไรก็ตามออกจากขอบเขตของคำตอบนี้

ประวัติศาสตร์

ตัวเลือกก่อนหน้านี้ไม่ได้เป็นส่วนหนึ่งของการเรียกร้องให้--no-uefi-secure-boot grub-installไม้ทำงานได้ดีสำหรับฉัน แต่นั่นหยุดลงกับ Debian buster แม้ว่าการบูตที่ปลอดภัยยังคงปิดการใช้งานในเครื่องของฉัน


1
ฉันเพิ่งสร้างบัญชีที่นี่เพื่อขอบคุณสำหรับสิ่งนี้ คู่มือที่ยอดเยี่ยม ข้อเสนอแนะเล็ก ๆ - มันจะดีถ้ามีพาร์ติชันติดตาเข้ารหัส
Petr Havlicek

1
@PetrHavlicek True ฉันคิดว่ามันง่ายพอที่จะทำ แต่ฉันใช้เวลาว่างตั้งแต่สร้างคำถาม & คำตอบกับปัญหาอื่น ๆ ดังนั้นฉันยังต้องทบทวนแนวคิดนี้อีกครั้ง (และขอบคุณที่คุณชื่นชม :)
schlimmchen

ใช้งานได้ดี! คำอธิบายพิเศษบางอย่างน่าจะดี (แน่นอนว่าคุณสามารถดูได้ทั้งหมดใน man pages แต่เช่น mktable ในขณะที่ mklable นั้นไม่ได้รับการบันทึกไว้เช่นนั้น ฯลฯ )
mikuszefski

เป็นไปได้หรือไม่ที่จะมีเพียงไฟล์ในฟอร์แมท USB ที่จัดรูปแบบ FAT ซึ่งมีปริมาณการคงอยู่? มันควรจะเป็นไปได้โดยการวนไฟล์ แต่จะบอกให้เดเบียนเริ่มต้นใช้ไฟล์แทนพาร์ติชั่นได้อย่างไร?
ceving

ดูdebian-live.alioth.debian.org/live-manual/stable/manual/html/…สำหรับสิ่งนั้น กล่าวโดยย่อ: สร้างไฟล์รูปภาพ (กระจัดกระจาย) ในรูทของระบบไฟล์ใด ๆ ให้ตั้งชื่อไฟล์ว่า 'การคงอยู่' และจัดรูปแบบไฟล์เช่นด้วย ext4
schlimmchen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.