Ecco un modo per creare un'unità USB live Debian con persistenza. Permetterà di installare i pacchetti mancanti che da quel momento in poi saranno disponibili su ogni avvio live usando la persistenza. Dato che ricreamo il contenuto del filesystem di immagine ISO live su un filesystem in grado di leggere e scrivere, possiamo modificare le configurazioni del bootloader per abilitare la persistenza e impostare il layout della tastiera all'avvio.
I passaggi qui descritti sono stati testati per lavorare su Debian stretch e buster per creare un'immagine live di Debian stretch.
Ci sono molti passaggi, ma sembra che questo metodo sia ancora abbastanza efficiente.
Dichiarazione di non responsabilità: si perderanno i dati sull'unità USB di destinazione e, se si confondono i comandi di seguito, potrebbero essere molto dispiaciuti in seguito. Non sono responsabile delle tue azioni.
Mi sento fortunato
Se ti senti particolarmente fortunato oggi, puoi provare uno script bash che automatizza il processo per te. Dagli il tuo percorso immagine ISO come primo parametro e il nome del dispositivo di blocco unità USB come secondo. Nota che questo script è follemente pericoloso e che non dovresti eseguirlo senza prima averlo letto e compreso.
TL; DR
Ottieni l'immagine ISO live di Debian, quindi procedi come segue:
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
Nel dettaglio e con qualche spiegazione
Dovrai eseguire la maggior parte dei seguenti comandi con privilegi elevati, cioè usando sudo
sulla maggior parte dei sistemi GNU / Linux.
Scarica
Scarica un'immagine ISO live di Debian con il window manager di tua scelta:
https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/
Faremo riferimento all'immagine ISO scaricata semplicemente come "live.iso".
Determinare l'unità di destinazione
Trova il dispositivo utilizzato dall'unità USB lsblk
. Lo chiameremo così /dev/sdX
.
Smonta
Smonta le partizioni esistenti sul tuo disco usando umount /dev/sdX*
Crea partizioni
Abbiamo bisogno di una partizione di avvio EFI per i PC UEFI per l'avvio dall'unità USB. Quindi abbiamo bisogno di una partizione sufficientemente grande per contenere il contenuto originale dell'immagine del filesystem ISO live. Quella partizione deve avere il legacy_boot
flag impostato. Quindi aggiungiamo la partizione di persistenza, utilizzando tutto lo spazio rimanente dell'unità USB. Puoi farlo con qualsiasi strumento di partizionamento compatibile con GPT (attenzione alla legacy_boot
bandiera). Ecco un esempio usando 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
Ciò crea una tabella delle partizioni GPT e una tabella delle partizioni MBR protettiva.
Crea filesystem
Vogliamo FAT su EFI e partizione live e vogliamo ext4
sulla partizione di persistenza e abbiamo bisogno dell'etichetta persistence
per il funzionamento della funzione di persistenza.
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
Montare le risorse
Dovremo montare l'ISO di origine e le partizioni di destinazione in punti di montaggio temporanei.
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
Installa il sistema live
Copia il contenuto del filesystem ISO live nella partizione LIVE.
cp -ar /tmp/live-iso/* /tmp/usb-live
persistence.conf
Preparare il filesystem di persistenza con il file di configurazione richiesto. La funzione di persistenza non funzionerà senza questo file.
echo "/ union" > /tmp/usb-persistence/persistence.conf
Grub per il supporto UEFI
Installa grub2 per il supporto all'avvio di UEFI (questo richiede il grub-efi-amd64-bin
pacchetto su Debian). Forziamo grub-install
a non utilizzare l'avvio sicuro UEFI, che apparentemente non funziona con l' --removable
opzione.
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 per supporto BIOS legacy
Installa il gptmbr.bin
bootloader di syslinux sull'unità (scarica syslinux o installa il pacchetto syslinux-common
). Quindi installare syslinux sulla partizione live.
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
Fixup Isolinux
Riutilizzare la configurazione isolinux dell'ISO live originale per lavorare con 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
Parametri del kernel
Ora che abbiamo copiato i file di sistema live in un vero filesystem di lettura / scrittura, possiamo manipolare la configurazione di grub e syslinux.
Aggiungi il parametro del kernel di persistenza a menu.cfg
e grub.cfg
. In entrambi i file, aggiungi la parola chiave persistence
alla fine della rispettiva prima riga con boot=live
al suo interno.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Imposta il parametro del kernel del layout di tastiera. In entrambi i file, aggiungi le parole chiave alla fine della rispettiva prima riga con boot=live
al suo interno.
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
Correggi l'immagine splash di grub (opzionale; l'abbiamo spostata in un'altra directory).
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
Smontaggio e pulizia
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
Perché questo dovrebbe funzionare sia per UEFI che per BIOS
Quando si avvia in modalità UEFI, il PC eseguirà la scansione delle partizioni FAT definite nella tabella delle partizioni GPT. La prima partizione FAT porta il bootloader grub UEFI, che si trova perché si trova nel percorso specificato da UEFI per le unità rimovibili (lo --removable
switch ha grub-install
fatto questo). Non è necessaria alcuna voce di avvio UEFI affinché funzioni, dobbiamo solo fare in modo che il PC tenti di avviarsi dall'unità USB. Quel grub è configurato per prenderlo da lì (carica grub.cfg, mostra il menu, ecc.).
Quando si avvia in modalità BIOS e si seleziona l'avvio dall'unità USB, il PC eseguirà il gptmbr.bin
codice bootloader che abbiamo scritto sul MBR protettivo dell'unità USB. Quel bootloader cerca la partizione GPT contrassegnata con il legacy_boot
flag e chainload syslinux da quella partizione. Quindi Syslinux prende il controllo (carica menu.cfg, mostra il menu, ecc.).
Persistenza criptata
Invece di usare semplicemente ext4 sulla partizione di persistenza, si potrebbe prima crittografare la partizione di persistenza con LUKS (usando cryptsetup
), quindi formattarla con ext4 (usando l'etichetta appropriata). Tuttavia, come dice la documentazione , il sistema live deve includere il cryptsetup
pacchetto. Altrimenti, la partizione crittografata non può essere decifrata dal sistema live. Questo significa che bisogna prima creare un ISO live personalizzato. Questo, tuttavia, non rientra nell'ambito di questa risposta.
Storia
In --no-uefi-secure-boot
precedenza l' opzione non faceva parte della chiamata a grub-install
. Lo stick ha funzionato bene per me, ma questo si è fermato con Debian Buster, anche se l'avvio sicuro è ancora disabilitato sulla mia macchina.