Đây là một cách để tạo một ổ USB sống Debian với sự bền bỉ. Nó sẽ cho phép cài đặt các gói còn thiếu từ đó sẽ có sẵn trên mỗi lần khởi động trực tiếp bằng cách sử dụng kiên trì. Vì chúng tôi tạo lại nội dung hệ thống tệp hình ảnh ISO trực tiếp trên hệ thống tệp có khả năng đọc ghi, chúng tôi có thể thay đổi cấu hình bộ nạp khởi động để cho phép kiên trì và đặt bố cục bàn phím khi khởi động.
Các bước được mô tả ở đây đã được thử nghiệm để hoạt động trên Debian Stretch và buster để tạo ra một hình ảnh trực tiếp kéo dài Debian.
Có rất nhiều bước liên quan, nhưng dường như phương pháp này vẫn khá hiệu quả.
Tuyên bố miễn trừ trách nhiệm: Bạn sẽ mất dữ liệu trên ổ USB đích và nếu bạn làm hỏng các lệnh bên dưới, bạn có thể cảm thấy rất tiếc sau đó. Tôi không chịu trách nhiệm cho hành động của bạn.
Cảm thấy may mắn
Nếu bạn cảm thấy đặc biệt may mắn ngày hôm nay, bạn có thể thử một tập lệnh bash tự động hóa quy trình cho bạn. Đặt cho nó đường dẫn hình ảnh ISO của bạn làm tham số đầu tiên và tên thiết bị khối ổ đĩa USB là tên thứ hai. Lưu ý rằng tập lệnh này cực kỳ nguy hiểm và bạn không nên thực hiện nó mà không đọc và hiểu nó trước.
TL; DR
Nhận hình ảnh ISO trực tiếp của Debian, sau đó thực hiện các bước sau:
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
Chi tiết và với một số giải thích
Bạn sẽ cần phải thực thi hầu hết các lệnh sau với các đặc quyền nâng cao, nghĩa là sử dụng sudo
trên hầu hết các hệ thống GNU / Linux.
Tải về
Tải xuống hình ảnh ISO trực tiếp của Debian với trình quản lý cửa sổ bạn chọn:
https://cdimage.debian.org/debian-cd/civerse-live/amd64/iso-hy điều /
Chúng tôi sẽ đề cập đến hình ảnh ISO được tải xuống đơn giản là "live.iso".
Xác định ổ đĩa đích
Tìm thiết bị sử dụng ổ USB của bạn lsblk
. Chúng tôi sẽ gọi nó /dev/sdX
.
Vô song
Ngắt kết nối các phân vùng hiện có trên ổ đĩa của bạn bằng cách sử dụng umount /dev/sdX*
Tạo phân vùng
Chúng tôi cần một phân vùng khởi động EFI cho các PC UEFI để khởi động từ ổ USB. Sau đó, chúng ta cần một phân vùng đủ lớn để chứa nội dung hình ảnh hệ thống tập tin ISO gốc. Phân vùng đó phải có legacy_boot
cờ đặt. Sau đó, chúng tôi thêm phân vùng kiên trì, sử dụng hết dung lượng còn lại của ổ USB. Bạn có thể làm điều đó với bất kỳ công cụ phân vùng có khả năng GPT nào (chú ý đến legacy_boot
cờ). Dưới đây là một ví dụ sử dụng 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
Điều này tạo ra một bảng phân vùng GPT và một bảng phân vùng MBR bảo vệ.
Tạo hệ thống tập tin
Chúng tôi muốn FAT trên EFI và phân vùng trực tiếp và chúng tôi muốn ext4
liên kết bền vững và chúng tôi yêu cầu nhãn persistence
cho tính năng kiên trì hoạt động.
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
Gắn kết tài nguyên
Chúng ta sẽ cần gắn ISO nguồn và phân vùng đích tại các điểm gắn kết tạm thời.
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
Cài đặt hệ thống trực tiếp
Sao chép nội dung hệ thống tập tin ISO trực tiếp vào phân vùng LIVE.
cp -ar /tmp/live-iso/* /tmp/usb-live
kiên trì
Chuẩn bị hệ thống tập tin kiên trì với tập tin cấu hình cần thiết. Tính năng kiên trì sẽ không hoạt động nếu không có tệp này.
echo "/ union" > /tmp/usb-persistence/persistence.conf
Grub cho hỗ trợ UEFI
Cài đặt grub2 để hỗ trợ khởi động UEFI (yêu cầu grub-efi-amd64-bin
gói này trên Debian). Chúng tôi buộc grub-install
để không sử dụng UEFI khởi động an toàn, mà dường như không làm việc với các --removable
tùy chọn.
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 hỗ trợ BIOS kế thừa
Cài đặt gptmbr.bin
bộ tải khởi động syslinux vào ổ đĩa (tải xuống syslinux hoặc cài đặt gói syslinux-common
). Sau đó cài đặt syslinux vào phân vùng trực tiếp.
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
Sửa chữa Isolinux
Sử dụng lại cấu hình isolinux của ISO gốc trực tiếp để hoạt động với 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
Thông số hạt nhân
Bây giờ chúng tôi đã sao chép các tệp hệ thống trực tiếp vào một hệ thống tệp đọc-ghi thực tế, chúng tôi có thể thao tác cấu hình grub và syslinux.
Thêm tham số kernel kiên trì vào menu.cfg
và grub.cfg
. Trong cả hai tệp, thêm từ khóa persistence
ở cuối dòng đầu tiên tương ứng với boot=live
nó.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Đặt tham số kernel bố trí bàn phím. Trong cả hai tệp, thêm các từ khóa ở cuối dòng đầu tiên tương ứng với boot=live
nó.
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
Grub giật gân
Sửa hình ảnh giật gân grub (tùy chọn; chúng tôi đã chuyển nó vào một thư mục khác).
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
Tháo gỡ và dọn dẹp
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
Tại sao điều này nên hoạt động cho cả UEFI và BIOS
Khi bắt đầu ở chế độ UEFI, PC sẽ quét các phân vùng FAT mà chúng ta đã xác định trong bảng phân vùng GPT. Phân vùng FAT đầu tiên mang bộ tải khởi động UEFI grub, được tìm thấy bởi vì nó nằm trong đường dẫn được chỉ định bởi UEFI cho các ổ đĩa di động (công --removable
tắc để grub-install
thực hiện việc này). Không có mục khởi động UEFI nào cần thiết để hoạt động, chúng ta chỉ cần làm cho PC cố gắng khởi động từ ổ USB. Grub đó được cấu hình để lấy nó từ đó (tải grub.cfg, hiển thị menu, v.v.).
Khi bắt đầu ở chế độ BIOS và chọn khởi động từ ổ USB, PC sẽ thực thi gptmbr.bin
mã bộ tải khởi động mà chúng tôi đã ghi vào MBR bảo vệ của ổ USB. Bộ tải khởi động đó tìm phân vùng GPT được đánh dấu bằng legacy_boot
cờ và chuỗi tải syslinux từ phân vùng đó. Syslinux sau đó tiếp quản (tải menu.cfg, hiển thị menu, v.v.).
Kiên trì mã hóa
Thay vì sử dụng ext4 đơn giản trên phân vùng lưu trữ lâu dài, trước tiên người ta có thể mã hóa phân vùng lưu trữ lâu bền bằng LUKS (sử dụng cryptsetup
), sau đó định dạng với ext4 (sử dụng nhãn phù hợp). Tuy nhiên, như tài liệu nói, hệ thống trực tiếp phải bao gồm cryptsetup
gói. Mặt khác, phân vùng được mã hóa không thể được giải mã bởi hệ thống trực tiếp. Điều này có nghĩa là người ta phải xây dựng một ISO trực tiếp tùy chỉnh trước tiên. Đó là, tuy nhiên, ra khỏi phạm vi của câu trả lời này.
Lịch sử
Các --no-uefi-secure-boot
tùy chọn trước đây không nằm trong cuộc gọi đến grub-install
. Chiếc gậy hoạt động tốt với tôi, nhưng nó đã dừng với Debian buster, mặc dù khởi động an toàn vẫn bị vô hiệu hóa trên máy của tôi.