Multiboot USB

Clé USB Multibootable Debian

Création d’une clé USB bootable 32Go

Hybrid UEFI GPT + BIOS GPT/MBR boot(archlinux wiki)

Cette configuration est utile pour créer une clé USB universelle, bootable partout. Tout d’abord, vous devez créer une table de partitions GPT sur votre périphérique avec une partition FAT32. Il faut disposer des outils fdisk et gdisk

Mode su

sudo -s

Identifier la clé USB par dmesg (exemple /dev/sde

dmesg
[25430.573773] sd 4:0:0:0: [sdd] Attached SCSI removable disk

La clé est sur /dev/sdd

On va initialiser la clé USB

gdisk /dev/sdd
GPT fdisk (gdisk) version 1.0.4

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): x

Expert command (? for help): z
About to wipe out GPT on /dev/sde. Proceed? (Y/N): Y
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
Blank out MBR? (Y/N): Y

Lancer fdisk pour préparer la clé USB

fdisk /dev/sdd
Bienvenue dans fdisk (util-linux 2.33.1).
Les modifications resteront en mémoire jusqu'à écriture.
Soyez prudent avant d'utiliser la commande d'écriture.

Le périphérique ne contient pas de table de partitions reconnue.
Création d'une nouvelle étiquette pour disque de type DOS avec identifiant de disque 0x7c3b5ad6.

Commande (m pour l'aide) : o
Création d'une nouvelle étiquette pour disque de type DOS avec identifiant de disque 0x34c40d0d.

Commande (m pour l'aide) : n
Type de partition
   p   primaire (0 primaire, 0 étendue, 4 libre)
   e   étendue (conteneur pour partitions logiques)
Sélectionnez (p par défaut) : 

Utilisation de la réponse p par défaut.
Numéro de partition (1-4, 1 par défaut) : 
Premier secteur (2048-61439999, 2048 par défaut) : 
Dernier secteur, +/-secteurs ou +/-taille{K,M,G,T,P} (2048-61439999, 61439999 par défaut) : 

Une nouvelle partition 1 de type « Linux » et de taille 29,3 GiB a été créée.
La partition #1 contient une signature vfat.

Voulez-vous supprimer la signature ? [O]ui/[N]on : O

La signature sera supprimée par une commande d'écriture.

Commande (m pour l'aide) : w
La table de partitions a été altérée.
Appel d'ioctl() pour relire la table de partitions.
Synchronisation des disques.

Systèmes de fichier

pacman -S dosfstools            # pour les systèmes de fichier vfat
mkfs.vfat -F 32 /dev/sdd1       # FAT32 partition principale

Monter la partition

mkdir -p /mnt/usb
mount /dev/sdd1 /mnt/usb

Créer les dossiers

mkdir -p /mnt/usb/{boot,initrd,ISO}

Vous pouvez maintenant installer GRUB pour BIOS

grub-install --target=i386-pc --boot-directory=/mnt/usb/boot --recheck /dev/sdd
Installation pour la plate-forme i386-pc.
Installation terminée, sans erreur.

Placez vos iso dans le dossier ISO de la clé USB

initrd pour hd-media

Il faut télécharger une petite archive pour que le mode install se déroule sans encombre : initrd.gz

L’initrd est une image du RAM-disque initiale (un disque virtuel RAM configuré pour le démarrage de Linux, contenant possiblement des modules nécessaires pour monter l’image du système et certains scripts pour le faire).

Or l’initrd.gz se trouvant dans les iso de Debian ne convient pas pour une clé USB, elle est faite pour les supports optiques (CD/DVD). L’iso ne sera pas détecté durant l’installation, excepté si elle a été placé dans la clé à l’aide de la commande dd ou cp mais nn veut mettre plusieurs iso sur une même clé USB…

Il faut utiliser des iso hybrides ou des images hdd

Pour les iso i386 :

wget -O initrd-i386.gz https://mirrors.kernel.org/debian/dists/stable/main/installer-i386/current/images/hd-media/initrd.gz

Pour les iso amd64 :

wget -O initrd-amd64.gz https://mirrors.kernel.org/debian/dists/stable/main/installer-amd64/current/images/hd-media/initrd.gz

De même, placer initrd-i386.gz et initrd-amd64.gz dans le dossier initrd de la clé USB

configurer grub.cfg

timeout=-1
# Partition holding files
probe -u $root --set=rootuuid
set imgdevpath="/dev/disk/by-uuid/$rootuuid"
export imgdevpath rootuuid

# Custom variables
set isopath="/ISO"
export isopath

# Load modules
insmod regexp
insmod all_video

set default_settings="edd=on keymap=fr-latin1 fr_FR"
set live_settings="boot=live eject=no"
set linux_64="/pmagic/bzImage64"
set linux_32="/pmagic/bzImage"
set initrd_img="/pmagic/initrd.img /pmagic/fu.img /pmagic/m64.img"
set initrd_img32="/pmagic/initrd.img /pmagic/fu.img /pmagic/m32.img"
set message="Chargement kernel et initramfs. Patienter SVP..."

    
set paramdebian='config fromiso=/dev/sdb1/$isofile lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105'

menuentry "Arch Linux (x86_64)" {
	set isofile='/ISO/archlinux-2019.01.01-x86_64.iso'
	loopback loop $isofile
	bootoptions="img_dev=$imgdevpath img_loop=$isofile earlymodules=loop"
	linux (loop)/arch/boot/x86_64/vmlinuz $bootoptions
	initrd (loop)/arch/boot/x86_64/archiso.img
}
 
menuentry "Debian Stretch (mode expert)" {
	set isofile='/ISO/debian-9.8.0-amd64-firmware-netinst.iso'
	loopback loop $isofile
	linux (loop)/install.amd/vmlinuz config fromiso=/dev/sdb1/$isofile lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 priority=medium
	initrd '/initrd/initrd-amd64.gz'
}

menuentry "Pmagic - Default settings 64 (Runs from RAM)"{
	echo $message
	search --set -f $linux_64
	linux $linux_64 $default_settings
	initrd $initrd_img
}

menuentry "Pmagic - Default settings 32 (Runs from RAM)"{
	search --set -f $linux_32
	linux $linux_32 $default_settings
	initrd $initrd_img32
}

menuentry "Pmagic - Live with default settings 64"{
	echo $message
	search --set -f $linux_64
	linux $linux_64 $default_settings $live_settings
	initrd $initrd_img
}
menuentry "Pmagic - Live with default settings 32"{
	search --set -f $linux_32
	linux $linux_32 $default_settings $live_settings
	initrd $initrd_img32
}

menuentry "Pmagic - Clonezilla 64"{
	echo $message
	search --set -f $linux_64
	linux $linux_64 $default_settings clonezilla=yes
	initrd $initrd_img
}
menuentry "Pmagic - Clonezilla 32"{
	search --set -f $linux_32
	linux $linux_32 $default_settings clonezilla=yes
	initrd $initrd_img32
}

menuentry "Manjaro Linux" {
	echo $message
	set isofile='/ISO/manjaro-xfce-18.0.4-stable-x86_64.iso'
	loopback loop $isofile
	bootoptions="img_dev=$imgdevpath img_loop=$isofile earlymodules=loop misobasedir=manjaro lang=fr_FR keytable=fr tz=UTC nouveau.modeset=1 i915.modeset=1 radeon.modeset=1 logo.nologo overlay=free quiet splash showopts"
	linux (loop)/boot/vmlinuz-x86_64 $bootoptions
	initrd (loop)/boot/initramfs-x86_64.img
}

menuentry "Tails" {
	echo $message
	set isofile='/ISO/tails-amd64-3.13.iso'
	loopback loop $isofile
        bootoptions="findiso=$isofile boot=live config apparmor=1 security=apparmor nopersistence noprompt timezone=Etc/UTC block.events_dfl_poll_msecs=1000 splash noautologin module=Tails kaslr slab_nomerge slub_debug=FZP mce=0 vsyscall=none page_poison=1 union=aufs  quiet"
        linux (loop)/live/vmlinuz $bootoptions
        initrd (loop)/live/initrd.img
}

Structure de la clé

La clé USB est montée sur /mnt/usb

tree -L 3 /mnt/usb/
/mnt/usb/
├── ISO
│   ├── archlinux-2019.01.01-x86_64.iso
│   ├── debian-9.8.0-amd64-firmware-netinst.iso
│   ├── debian-9.8.0-amd64-netinst.iso
│   ├── debian-9.8.0-live-amd64-xfce+nonfree.iso
│   └── manjaro-xfce-18.0.4-stable-x86_64.iso
├── boot
│   └── grub
│       ├── fonts
│       ├── grub.cfg
│       ├── grubenv
│       ├── i386-pc
│       ├── locale
│       └── themes
├── initrd
│   ├── initrd-amd64.gz
│   └── initrd-i386.gz
└── pmagic
    ├── bzImage
    ├── bzImage64
    ├── fu.img
    ├── initrd.img
    ├── m32.img
    ├── m64.img
    └── pmodules
        ├── PMAGIC_2018_04_30.SQFS
        └── scripts

11 directories, 16 files

Test clé USB

Repérer sur quel point de montage est la clé

dmesg
[ 1293.359465] sd 4:0:0:0: [sdd] Attached SCSI removable disk

A l’aide de qemu

sudo qemu-system-x86_64 -machine accel=kvm:tcg -m 1024 -hda /dev/sdd