Berikut adalah cara untuk membuat drive USB live Debian dengan ketekunan. Ini akan memungkinkan untuk menginstal paket-paket yang hilang yang sejak saat itu akan tersedia pada setiap boot langsung menggunakan ketekunan. Karena kita membuat ulang isi sistem file ISO live image pada sistem file yang dapat membaca-menulis, kita dapat mengubah konfigurasi bootloader untuk mengaktifkan kegigihan dan mengatur tata letak keyboard saat boot.
Langkah-langkah yang dijelaskan di sini diuji untuk bekerja pada Debian stretch dan buster untuk membuat image live Debian stretch.
Ada banyak langkah yang terlibat, tetapi tampaknya metode ini masih cukup efisien.
Penafian: Anda akan kehilangan data pada drive USB target dan jika Anda mengacaukan perintah di bawah ini, Anda mungkin akan merasa sangat menyesal setelahnya. Saya tidak bertanggung jawab atas tindakan Anda.
Merasa beruntung
Jika Anda merasa sangat beruntung hari ini, Anda dapat mencoba skrip bash yang mengotomatiskan prosesnya untuk Anda. Berikan jalur gambar ISO Anda sebagai parameter pertama dan drive USB memblokir nama perangkat sebagai parameter kedua. Perhatikan bahwa skrip ini sangat berbahaya dan Anda tidak boleh menjalankannya tanpa membaca dan memahaminya terlebih dahulu.
TL; DR
Dapatkan image ISO live Debian, lalu lakukan hal berikut:
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
Secara rinci dan dengan beberapa penjelasan
Anda perlu menjalankan sebagian besar perintah berikut dengan hak istimewa yang ditinggikan, yaitu menggunakan sudopada kebanyakan sistem GNU / Linux.
Unduh
Unduh image ISO live Debian dengan window manager pilihan Anda:
https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/
Kami akan merujuk ke gambar ISO yang diunduh hanya sebagai "live.iso".
Tentukan drive target
Temukan perangkat yang menggunakan USB drive Anda lsblk. Kami akan memanggil itu /dev/sdX.
Lepas
Lepas partisi yang ada di drive Anda menggunakan umount /dev/sdX*
Buat partisi
Kami membutuhkan partisi boot EFI untuk UEFI PC untuk boot dari drive USB. Maka kita membutuhkan partisi yang cukup besar untuk menampung konten gambar sistem file ISO asli yang asli. Partisi itu harus memiliki legacy_bootset bendera. Kemudian kami menambahkan partisi kegigihan, menggunakan semua sisa ruang drive USB. Anda dapat melakukannya dengan alat pemartisian yang mampu GPT (ingat legacy_bootbendera). Berikut ini contoh menggunakan 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
Ini menciptakan tabel partisi GPT dan tabel partisi MBR pelindung.
Buat Filesystem
Kami ingin FAT pada EFI dan partisi langsung dan kami ingin ext4parisi kegigihan dan kami membutuhkan label persistenceagar fitur kegigihan berfungsi.
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
Memasang sumber daya
Kita perlu me-mount ISO sumber dan menargetkan partisi pada titik pemasangan sementara.
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
Instal sistem hidup
Salin konten sistem file ISO langsung ke partisi LIVE.
cp -ar /tmp/live-iso/* /tmp/usb-live
persistence.conf
Persiapkan sistem file persistensi dengan file konfigurasi yang diperlukan. Fitur kegigihan tidak akan berfungsi tanpa file ini.
echo "/ union" > /tmp/usb-persistence/persistence.conf
Grub untuk dukungan UEFI
Instal grub2 untuk dukungan booting UEFI (ini membutuhkan grub-efi-amd64-binpaket di Debian). Kami memaksa grub-installuntuk tidak menggunakan boot aman UEFI, yang tampaknya tidak berfungsi dengan --removableopsi.
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 untuk dukungan BIOS lawas
Instal syslinux gptmbr.binbootloader ke drive (unduh syslinux atau instal paket syslinux-common). Kemudian instal syslinux ke partisi langsung.
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
Perbaikan Isolinux
Gunakan kembali konfigurasi isolinux dari live ISO asli untuk bekerja dengan 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
Parameter kernel
Sekarang kita menyalin file sistem langsung ke sistem file read-write yang sebenarnya, kita dapat memanipulasi konfigurasi grub dan syslinux.
Tambahkan parameter kernel kegigihan ke menu.cfgdan grub.cfg. Di kedua file, tambahkan kata kunci persistencedi akhir baris pertama masing-masing dengan boot=livedi dalamnya.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Setel parameter kernel tata letak keyboard. Di kedua file, tambahkan kata kunci di akhir baris pertama masing-masing dengan boot=livedi dalamnya.
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 splash
Perbaiki grub splash image (opsional; kami memindahkannya ke direktori lain).
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
Lepas dan Bersihkan
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
Mengapa ini harus bekerja untuk UEFI dan BIOS
Saat memulai dalam mode UEFI, PC akan memindai partisi FAT yang kami tentukan dalam tabel partisi GPT. Partisi FAT pertama membawa bootloader grub UEFI, yang ditemukan karena terletak di jalur yang ditentukan oleh UEFI untuk drive yang dapat dilepas ( --removablesakelar untuk grub-installmelakukan ini). Tidak diperlukan entri boot UEFI agar dapat berfungsi, kita hanya perlu membuat PC mencoba melakukan booting dari drive USB. Grub itu dikonfigurasi untuk mengambilnya dari sana (muat grub.cfg, tunjukkan menu, dll.).
Saat memulai dalam mode BIOS dan memilih untuk boot dari drive USB, PC akan mengeksekusi gptmbr.binkode bootloader yang telah kami tulis ke MBR pelindung drive USB. Bootloader itu mencari partisi GPT yang ditandai dengan legacy_bootflag dan chainload syslinux dari partisi itu. Syslinux kemudian mengambil alih (memuat menu.cfg, tampilkan menu, dll.).
Ketekunan Terenkripsi
Alih-alih menggunakan plain ext4 pada partisi persistence, seseorang dapat pertama-tama mengenkripsi partisi persistence dengan LUKS (menggunakan cryptsetup), kemudian memformatnya dengan ext4 (menggunakan label yang tepat). Namun, seperti yang dikatakan dalam dokumentasi , sistem live harus menyertakan cryptsetuppaket. Jika tidak, partisi terenkripsi tidak dapat didekripsi oleh sistem live. Ini berarti kita harus membangun ISO live kustom terlebih dahulu. Namun, itu di luar cakupan jawaban ini.
Sejarah
The --no-uefi-secure-bootpilihan sebelumnya bukan bagian dari panggilan untuk grub-install. Tongkat itu berfungsi dengan baik untuk saya, tetapi berhenti dengan buster Debian, meskipun boot yang aman masih dinonaktifkan pada mesin saya.