นี่คือวิธีการสร้างไดรฟ์ 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.bin
bootloader ไปยังไดรฟ์ (ดาวน์โหลด 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 แม้ว่าการบูตที่ปลอดภัยยังคงปิดการใช้งานในเครื่องของฉัน