Aquí hay una manera de crear una unidad USB Debian live con persistencia. Permitirá instalar los paquetes faltantes que estarán disponibles a partir de ese momento en cada arranque en vivo usando la persistencia. Debido a que recreamos el contenido del sistema de archivos de imagen ISO en vivo en un sistema de archivos con capacidad de lectura y escritura, podemos cambiar las configuraciones del cargador de arranque para permitir la persistencia y establecer la distribución del teclado en el arranque.
Los pasos descritos aquí se probaron para trabajar en Debian stretch y buster para crear una imagen en vivo de Debian stretch.
Hay muchos pasos involucrados, pero parece que este método sigue siendo bastante eficiente.
Descargo de responsabilidad: perderá los datos en la unidad USB de destino y si desordena los comandos a continuación, puede sentir lástima después. No soy responsable de tus acciones.
Me siento afortunado
Si se siente particularmente afortunado hoy, puede probar un script bash que automatice el proceso por usted. Déle su ruta de imagen ISO como primer parámetro y el nombre del dispositivo de bloqueo de la unidad USB como el segundo. Tenga en cuenta que este script es increíblemente peligroso y que no debe ejecutarlo sin leerlo y comprenderlo primero.
TL; DR
Obtenga la imagen ISO en vivo de Debian, luego haga lo siguiente:
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
En detalle y con alguna explicación
Deberá ejecutar la mayoría de los siguientes comandos con privilegios elevados, es decir, usar sudo
en la mayoría de los sistemas GNU / Linux.
Descargar
Descargue una imagen ISO en vivo de Debian con el administrador de ventanas de su elección:
https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/
Nos referiremos a la imagen ISO descargada simplemente como "live.iso".
Determinar la unidad de destino
Encuentre el dispositivo que utiliza su unidad USB lsblk
. A eso lo llamaremos /dev/sdX
.
Desmontar
Desmonta las particiones existentes en tu disco usando umount /dev/sdX*
Crear particiones
Necesitamos una partición de arranque EFI para que las PC UEFI arranquen desde la unidad USB. Luego, necesitamos una partición suficientemente grande para contener el contenido original de la imagen del sistema de archivos ISO en vivo. Esa partición debe tener establecida la legacy_boot
bandera. Luego agregamos la partición de persistencia, utilizando todo el espacio restante de la unidad USB. Puede hacerlo con cualquier herramienta de partición compatible con GPT (tenga en cuenta el legacy_boot
indicador). Aquí hay un ejemplo 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
Esto crea una tabla de partición GPT y una tabla de partición protectora MBR.
Crear sistemas de archivos
Queremos FAT en el EFI y la partición en vivo y queremos ext4
en la partición de persistencia y requerimos la etiqueta persistence
para que la característica de persistencia funcione.
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
Montando los recursos
Tendremos que montar el ISO de origen y las particiones de destino en puntos de montaje temporales.
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
Instalar sistema en vivo
Copie el contenido del sistema de archivos ISO en vivo en la partición LIVE.
cp -ar /tmp/live-iso/* /tmp/usb-live
persistencia.conf
Prepare el sistema de archivos de persistencia con el archivo de configuración requerido. La característica de persistencia no funcionará sin este archivo.
echo "/ union" > /tmp/usb-persistence/persistence.conf
Grub para soporte UEFI
Instale grub2 para el soporte de arranque UEFI (esto requiere el grub-efi-amd64-bin
paquete en Debian). Obligamos grub-install
a no usar el arranque seguro UEFI, que aparentemente no funciona con la --removable
opció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 para soporte de BIOS heredado
Instale el gptmbr.bin
gestor de arranque syslinux en la unidad (descargue syslinux o instale el paquete syslinux-common
). Luego instale syslinux en la partición en vivo.
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
Reparación de Isolinux
Reutilice la configuración isolinux del ISO en vivo original para trabajar 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
Parámetros del núcleo
Ahora que copiamos los archivos del sistema en vivo en un sistema de archivos de lectura y escritura real, podemos manipular la configuración de grub y syslinux.
Agregue el parámetro del núcleo de persistencia a menu.cfg
y grub.cfg
. En ambos archivos, agregue la palabra clave persistence
al final de la primera línea respectiva con boot=live
ella.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Establezca el parámetro del kernel de distribución del teclado. En ambos archivos, agregue las palabras clave al final de la primera línea respectiva que contiene 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
Salpicadura de la comida
Arregle la imagen de inicio de grub (opcional; la trasladamos a otro directorio).
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
Desmontaje y limpieza
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
Por qué esto debería funcionar tanto para UEFI como para BIOS
Cuando se inicia en modo UEFI, la PC escaneará las particiones FAT que definimos en la tabla de particiones GPT. La primera partición FAT lleva el cargador de arranque grub UEFI, que se encuentra porque está ubicado en la ruta especificada por UEFI para unidades extraíbles (el --removable
cambio a grub-install
hizo esto). No es necesaria una entrada de arranque UEFI para que eso funcione, solo necesitamos hacer que la PC intente arrancar desde la unidad USB. Ese grub está configurado para tomarlo desde allí (cargue el grub.cfg, muestre el menú, etc.).
Al iniciar en modo BIOS y seleccionar arrancar desde la unidad USB, la PC ejecutará el gptmbr.bin
código del cargador de arranque que hemos escrito en el MBR protector de la unidad USB. Ese gestor de arranque busca la partición GPT marcada con la legacy_boot
bandera y la cadena de carga syslinux de esa partición. Syslinux se hace cargo (carga menu.cfg, muestra el menú, etc.).
Persistencia Encriptada
En lugar de usar ext4 simple en la partición de persistencia, primero se podría encriptar la partición de persistencia con LUKS (usando cryptsetup
), luego formatearla con ext4 (usando la etiqueta adecuada). Sin embargo, como dice la documentación , el sistema en vivo debe incluir el cryptsetup
paquete. De lo contrario, la partición cifrada no puede ser descifrada por el sistema en vivo. Esto significa que primero hay que construir un ISO en vivo personalizado. Sin embargo, eso está fuera del alcance de esta respuesta.
Historia
La --no-uefi-secure-boot
opción anteriormente no formaba parte de la llamada a grub-install
. El dispositivo funcionó bien para mí, pero eso se detuvo con Debian Buster, a pesar de que el arranque seguro todavía está desactivado en mi máquina.