De nombreux outils permettent de rendre une clé USB bootable tels que Rufus, Balena Etcher, UNetBootin… et certains permettent de créer des multiboot USB tels que Multisystem, Ventoy, Easy2boot…
lsblk
Ceci retourne une liste des périphériques de stockage de masse. Exemple :
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 931,5G 0 disk
└─sda1 8:1 0 931,5G 0 part /mnt/997703ee-871d-4254-8133-65c205a019b7
sdb 8:16 1 14,8G 0 disk
└─sdb1 8:17 1 7,5G 0 part
nvme0n1 259:0 0 238,5G 0 disk
├─nvme0n1p1 259:1 0 1M 0 part
├─nvme0n1p2 259:2 0 513M 0 part /boot/efi
└─nvme0n1p3 259:3 0 238G 0 part /
Ici, la clé usb est détectée en sdb. Elle contient une partition sdb1.
Pour rappel :
Le préfixe “sd” signifie “SCSI disk” et est utilisé pour tous les types de disques, y compris SATA, SSD, et USB.
La lettre qui suit “sd” indique l’ordre de détection du disque par le système :
sda : premier disque détecté
sdb : deuxième disque détecté
sdc : troisième disque détecté, et ainsi de suite
Les chiffres après la lettre représentent les partitions sur le disque :
sda1 : première partition du premier disque
sda2 : deuxième partition du premier disque
sdb1 : première partition du deuxième disque, etc.
sudo umount /dev/sdX*
[!IMPORTANT]
Remplacer X par la lettre correspondant à la clé USB. le symbole * permet de cibler toutes les partitions susceptibles d’être montées.
sudo fdisk /dev/sdX
Dans fdisk, taper ‘o’ pour créer une nouvelle table de partition GPT, puis ‘w’ pour écrire les changements.
[!IMPORTANT]
Penser à installer parted si ce n’est pas fait :
sudo apt update sudo apt upgrade -y sudo apt install parted -y
sudo parted /dev/sdX
Dans parted, exécuter les commandes suivantes :
mklabel msdos
mkpart primary fat32 1MiB 100%
set 1 boot on
quit
sudo mkdir /mnt/usb
sudo mount /dev/sdX1 /mnt/usb
sudo grub-install --target=i386-pc --boot-directory=/mnt/usb/boot --recheck /dev/sdX
sudo grub-install --target=x86_64-efi --efi-directory=/mnt/usb --boot-directory=/mnt/usb/boot --removable --recheck /dev/sdX
La clé USB possède à présent tous les dossiers et fichiers nécessaires pour un démarrage.
Il est possible de créer son propre menu de manière relativement simple. Les opérations suivantes sont facultatives mais il est bon de savoir faire ce genre de personnalisation afin de brander ses propres clé USB avec le nom et le logo d’une marque, d’une organisation…
sudo mkdir /mnt/usb/boot/grub/themes /mnt/usb/boot/grub/themes/#Le_nom_de_votre_theme
[!IMPORTANT]
Remplacer #Le_nom_de_votre_theme par le nom que vous décidez de donner à votre thème
Chaque image de fond doivent être dans le format défini du menu. Deux choix s’offrent à nous :
Il est bien évidemment possible de créer son propre fond d’écran avec un logiciel (de préférence de dessin vectoriel) comme Inkscape (Linux et BSD) ou Illustrator (Windows et MacOS).
sudo cp /chemin/de/votre/image /mnt/usb/boot/grub/themes/#le_nom_de_votre_theme
Créer sa propre police de caractère se révèle souvent très fastidieux mais les polices de caractère libres de droit courent le web. Plusieurs sites permettent de choisir une police qui nous convient. Quelques exemples :
[!IMPORTANT]
Afin de simplifier la suite de ce tutoriel, nous choisirons une police de caractère au format TTF (True type font)
Nous choisissons de convertir la police Ubuntu.ttf
sudo apt-get install ttf-ubuntu-font-family && sudo fc-cache -fv
Si vous obtenez un message d’erreur, il est possible qu’elle soit déjà présente sur votre système. Pour le vérifier, vous devrez taper la commande suivante :
ls /usr/share/fonts/truetype/ubuntu/
[!IMPORTANT]
Si vous ne la trouvez pas à cet emplacement, essayez de la trouver dans un des emplacements suivants :
/usr/share/fonts/truetype/
~/.local/share/fonts/(dans votre répertoire personnel)
~/.fonts/(un ancien emplacement, toujours utilisé sur certains systèmes
sudo cp /usr/share/fonts/truetype/ubuntu/Ubuntu-B.ttf /mnt/usb/boot/grub/themes/votre_theme
sudo grub-mkfont -s 24 -o /mnt/usb/boot/grub/themes/votre_theme/Ubuntu-B.pf2 /mnt/usb/boot/grub/themes/votre_theme/Ubuntu-B.ttf
[!NOTE]
Les fichiers .pf2 sont des polices bitmap spécialement formatées pour GRUB.
L’option -s 24 définit la taille de la police en sortie. Cette option est facultative.
Penser à supprimer la police ttf du dossier après conversion
sudo rm /chemin/police.ttf
À présent, nous avons deux éléments visuels fondamentaux mais il nous faut aussi configurer l’agencement des éléments de notre thème.
sudo nano /mnt/usb/boot/grub/themes/votre_theme/theme.txt
# Définition de l'image de fond
desktop-image: "splash.png"
# Configuration du titre (vide)
title-text: ""
title-font: "Ubuntu-B.pf2"
# Configuration du terminal
terminal-font: "Terminus Regular 14"
terminal-box: "terminal_box_*.png"
terminal-border: "0"
# Configuration du menu
+ boot_menu {
left = 15%
top = 20%
width = 70%
height = 60%
item_font = "Ubuntu-B.pf2"
item_color = "#cccccc"
selected_item_color = "#ffffff"
icon_width = 32
icon_height = 32
icon_spacing = 20
item_height = 24
item_padding = 5
item_spacing = 10
}
# Titre
+ label {
top = 8%
left = 0
width = 100%
height = 40
text = "Clé multiboot de La Capsule"
font = "Ubuntu-B.pf2"
color = "#ffffff"
align = "center"
}
# Pied de page
+ label {
top = 95%
left = 0
width = 100%
height = 20
text = "Sélectionner avec Entrée"
font = "Ubuntu-B.pf2"
color = "#ffffff"
align = "center"
}
# Configuration de la barre de progression
+ progress_bar {
id = "__timeout__"
left = 15%
top = 85%
width = 70%
height = 10
fg_color = "#3465a4"
bg_color = "#ffffff"
border_color = "#cccccc"
}
sudo nano /mnt/usb/boot/grub/grub.cfg
set timeout=60
set default=0
set gfxmode=auto
insmod loopback
insmod iso9660
insmod linux
insmod all_video
insmod gfxterm
insmod terminal
insmod font
insmod png
terminal_output gfxterm
loadfont /boot/grub/themes/LaCapsule/Ubuntu-B.pf2
if [ "${grub_platform}" = "efi" ]; then
# Configuration pour le mode UEFI
set theme=/boot/grub/themes/LaCapsule/theme.txt
set gfxmode=1920x1080
else
# Configuration pour le mode BIOS Legacy
set theme=/boot/grub/themes/LaCapsule/theme.txt
set gfxpayload=800x600x16
fi
Nous allons expliquer chaque ligne du texte ci-dessus :
Télécharger un fichier iso depuis internet
Rendez-vous à l’adresse suivante :
https://clonezilla.org/downloads/download.php?branch=stable
Téléchargez l’iso de la dernière version stable de clonezilla en sélectionnant iso au point 2 “file type” et attendre la fin du téléchargement.
Créer un dossier pour stocker les fichiers iso sur la clé usb :
sudo mkdir /mnt/usb/iso
sudo cp /home/$USER/Téléchargements/clonezilla-live-*-amd64.iso /mnt/usb/iso
[!IMPORTANT]
Il est important de vérifier le chemin car si la distribution Linux est dans une autre langue, il se peut que le dossier Téléchargements soit nommé autrement, exemple “Downloads”.
sudo nano /mnt/usb/boot/grub/grub.cfg
menuentry "CLONEZILLA" {
set isofile="/iso/clonezilla-live-3.2.0-5-amd64.iso"
loopback loop $isofile
linux (loop)/live/vmlinuz boot=live union=overlay username=user config components quiet noswap nolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" keyboard-layouts= ocs_live_batch=\"no\" locales= vga=788 ip=frommedia nosplash toram=live,syslinux,EFI findiso=$isofile
initrd (loop)/live/initrd.img
}
Nous allons expliquer chaque argument du texte ci-dessus :
Sauvegarder la nouvelle configuration avec Ctrl+o appuyer sur Entrée et quitter avec Ctrl+x.
sudo umount /mnt/usb
Il ne reste plus qu’à tester la clé USB afin de valider le fait que votre menu est personnalisé et que Clonezilla est bootable.
Comme nous l’avons vu précédemment, il est possible d’importer un fichier iso sur notre clé usb et de lui créer une entrée de menu, permettant à l’utilisateur de booter dessus en choisissant l’entrée.
Nous allons reproduire l’opération avec un fichier iso plus conséquent que celui de clonezilla.
[!WARNING]
Il sera nécessaire de remonter la clé USB comme précédemment grâce à la commande mount.
Pour l’exercice, nous choisirons de télécharger Rhino Linux qui est basé sur Ubuntu. Une fois le fichier complètement téléchargé, il suffit de le copier dans le dossier “/iso” de notre clé USB et d’ajouter les entrées de menu correctes.
Afin de définir correctement les entrées de menu à ajouter dans le fichier de configuration, il est essentiel de comprendre la structure du live CD (iso). Pour se faire, il est impératif d’inspecter sa structure en le montant et listant ses fichiers.
[!IMPORTANT]
Dans notre exemple, nous allons monter le fichier en amont pour vérifier que les routes vers les fichiers sont correctes.
sudo mkdir /mnt/iso sudo mount -o loop '/mnt/usb/iso/Rhino-Linux-2025.1-amd64.iso' /mnt/iso ls /mnt/iso/casperNous pouvons voir que le kernel se trouve être dans /casper/vmlinuz et le fichier initramfs dans /casper/initrd.lz et non dans /live comme pour notre iso de clonezilla.
sudo nano /mnt/usb/boot/grub/grub.cfg
menuentry "RHINO" {
set isofile="/iso/Rhino-Linux-2025.1-amd64.iso"
loopback loop $isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
initrd (loop)/casper/initrd.lz
}
sudo update-grub /mnt/usb/boot/grub/grub.cfg
Il ne reste plus qu’à tester notre clé USB multiboot afin de valider sa conformité en démarrant depuis un poste.
Dernière étape pour notre clé USB multiboot, l’import des distributions Linux personnalisées. (voir le tutoriel)
Comme précédemment, il suffira de monter la clé USB et de copier l’ISO dans le dossier /iso ou de copier le contenu de l’ISO dans un dossier au nom explicite. Pour cet exercice, nous copierons le contenu de l’ISO dans un dossier.
Pour se faire, nous devrons monter l’ISO et copier son contenu dans un dossier créé en amont. Ceci peut se faire de la manière suivante :
sudo mount /dev/sdX1 /mnt/usb # Montage de la clé USB
sudo mount -o /chemin_de_notre_ISO/nom_de_celui-ci.iso /mnt/iso # Montage de l'ISO
sudo mkdir /mnt/usb/nom_de_notre_dossier # Création du dossier sur la clé
sudo cp -r /mnt/iso /mnt/usb/nom_de_notre_dossier # Copie du contenu de l'ISO sur la clé
Ceci fait, il sera nécessaire de vérifier le contenu du dossier pour repérer les bonnes routes, comme précédemment dans l’ISO de Rhino Linux.
Une fois les routes clairement repérées, nous pourrons ajouter une nouvelle entrée de menu à notre fichier de configuration :
sudo nano /mnt/usb/boot/grub/grub.cfg
En y ajoutant les lignes correspondantes aux entrées réelles comme dans cet exemple :
menuentry "Ma Distribution personnalisée" {
insmod linux
linux /nom_de_notre_dossier/boot/vmlinuz
initrd /nom_de_notre_dossier/boot/initrfs.img
}
Une fois ceci accompli, nous pouvons à nouveau mettre à jour le GRUB et démonter la clé USB :
sudo update-grub /mnt/usb/boot/grub/grub.cfg
sudo umount /mnt/usb
Nous pouvons à présent effectuer le test en démarrant depuis un poste.