Multiboot USB
Utilisation Git
Si Git est installé sur le système, nous pouvons obtenir les fichiers directement à partir du référentiel:
cd ~
git clone git://github.com/aguslr/multibootusb.git
Chaque fois que nous voulons mettre à jour les fichiers :
cd multibootusb && git pull
Sans Git
Si Git n’est pas installé, nous pouvons toujours obtenir les fichiers :
wget https://github.com/aguslr/multibootusb/tarball/master -O - | tar -xzv --strip-components 1 --exclude={README.md,demo.gif}
Utilisation du script
Il suffit de l’exécuter en tant que root:
./makeUSB.sh <device>
Où <device>
est le nom du périphérique USB (par exemple /dev/sd).
Exécutez mount
pour obtenir cette information.
Autre possibilité , juste après avoir inséré la clé USB , exécuter dmesg
dans une fenêtre terminal :
[ 2541.013465] sd 4:0:0:0: [sde] Attached SCSI removable disk
Dans notre exemple la clé est sous /dev/sdd
** AVERTISSEMENT **: Cela efface toutes les données du périphérique, alors assurez-vous de choisir le bon.
Ce sont les options pour le script:
Script to prepare multiboot USB drive
Usage: makeUSB.sh [options] device [fs-type]
device Device to modify (e.g. /dev/sdb)
fs-type Filesystem type for the data partition [ext3|ext4|vfat|ntfs]
-e, --efi Enable EFI compatibility
-i, --interactive Launch gdisk to create a hybrid MBR
-l, --log Save debug information to log
-h, --help Display this message
Création “manuelle”
Clé USB universelle bootable MBR et UEFI
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. Vous avez besoin d’au moins 3 partitions:
- Une partition d’amorçage BIOS (type EF02) qui doit doit avoir une taille de 1 Mo
- Une partition système EFI (type EF00 avec un système de fichiers FAT32) au minimum 50 Mo
- Votre partition de données (utilisez un système de fichiers pris en charge par GRUB) peut prendre le reste de l’espace de votre lecteur
Ensuite, vous devez créer une table de partition hybride MBR, car définir l’indicateur de démarrage sur la partition de protection MBR peut ne pas être suffisant.
Mode su
sudo -s
Identifier la clé USB par dmesg (exemple /dev/sdd
dmesg
[25430.573773] sd 4:0:0:0: [sde] 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/sdd. 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 gdisk pour préparer la clé USB
gdisk /dev/sdd
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-30282974, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-30282974, default = 30282974) or {+-}size{KMGTP}: +1M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): EF02
Changed type of partition to 'BIOS boot partition'
Command (? for help): n
Partition number (2-128, default 2):
First sector (34-30282974, default = 4096) or {+-}size{KMGTP}:
Last sector (4096-30282974, default = 30282974) or {+-}size{KMGTP}: +50M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): EF00
Changed type of partition to 'EFI System'
Command (? for help): n
Partition number (3-128, default 3):
First sector (34-30282974, default = 106496) or {+-}size{KMGTP}:
Last sector (106496-30282974, default = 30282974) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 0700
Changed type of partition to 'Microsoft basic data'
Command (? for help): r
Recovery/transformation command (? for help): h # h --> make hybrid MBR
WARNING! Hybrid MBRs are flaky and dangerous! If you decide not to use one,
just hit the Enter key at the below prompt and your MBR partition table will
be untouched.
Type from one to three GPT partition numbers, separated by spaces, to be
added to the hybrid MBR, in sequence: 1 2 3
Place EFI GPT (0xEE) partition first in MBR (good for GRUB)? (Y/N): N
Creating entry for GPT partition #1 (MBR partition #1)
Enter an MBR hex code (default EF):
Set the bootable flag? (Y/N): N
Creating entry for GPT partition #2 (MBR partition #2)
Enter an MBR hex code (default EF):
Set the bootable flag? (Y/N): N
Creating entry for GPT partition #3 (MBR partition #3)
Enter an MBR hex code (default 07):
Set the bootable flag? (Y/N): Y
Recovery/transformation command (? for help): x # x --> extra functionality (experts only)
Expert command (? for help): h # h --> recompute CHS values in protective/hybrid MBR
Expert command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdd.
The operation has completed successfully.
Systèmes de fichier ,montage ,grub
Systèmes de fichier
pacman -S dosfstools # pour les systèmes de fichier vfat
mkfs.vfat -F 32 /dev/sdd2 # FAT32 pour EFI
mkfs.vfat -F 32 /dev/sdd3 # FAT32 partition principale
Tout d’abord, vous devez monter la partition EFI System (Ex: /mnt/multiboot/efi) et la partition de données (Ex: /mnt/multiboot/data) de votre clé USB (EX: /dev/sdd).
montage
mkdir -p /mnt/multiboot/efi
mount /dev/sdd3 /mnt/multiboot
mount /dev/sdd2 /mnt/multiboot/efi
grub
Vous pouvez maintenant installer GRUB pour prendre en charge EFI + GPT et BIOS + GPT/MBR. La configuration GRUB (–boot-directory) peut être conservée au même endroit.
Installation GRUB pour EFI
grub-install --target=x86_64-efi --efi-directory=/mnt/multiboot/efi --boot-directory=/mnt/multiboot/boot --removable --recheck /dev/sdd
Installation GRUB pour BIOS
grub-install --target=i386-pc --boot-directory=/mnt/multiboot/boot --recheck /dev/sdd
La partition de données est montée sur /mnt/multiboot et le dossier multiboot media/dplus/iso/multibootusb/
Copiez les fichiers GRUB nécessaires:
# répertoire nommé *boot* pour stocker les fichiers de configuration de GRUB, un répertoire nommé *krnl* pour les fichiers du noyau et un autre nommé *isos* pour les fichiers ISO
mkdir -p /mnt/multiboot/boot/{grub,bin,krnl,isos}
mkdir -p /mnt/multiboot/boot/grub/grub.d
# Copie des fichiers GRUB
cp -rf media/dplus/iso/multibootusb/mbusb.d /mnt/multiboot/boot/grub/
Le fichier grub.cfg
nano /mnt/multiboot/boot/grub/grub.cfg
# Config for GNU GRand Unified Bootloader (GRUB)
insmod font
if loadfont unicode ; then
if keystatus --shift ; then true ; else
if [ x"${grub_platform}" = xefi ]; then
insmod efi_gop
insmod efi_uga
insmod videotest
insmod videoinfo
else
insmod vbe
insmod vga
fi
insmod gfxterm
insmod gfxmenu
set gfxmode=auto
set gfxpayload=auto
terminal_output gfxterm
if terminal_output gfxterm ; then true ; else
terminal gfxterm
fi
fi
fi
# Timeout for menu
set timeout=30
# Load custom GRUB configuration
if [ -e "$prefix/grub.cfg.local" ]; then
source "$prefix/grub.cfg.local"
fi
# Load MBUSB configuration
if [ -e "$prefix/mbusb.cfg" ]; then
source "$prefix/mbusb.cfg"
fi
# Grub options
submenu "GRUB2 options ->" {
menuentry "List devices/partitions" {
ls -l
sleep --interruptible 9999
}
menuentry "Enable GRUB2's LVM support" {
insmod lvm
}
menuentry "Enable GRUB2's RAID support" {
insmod dm_nv
insmod mdraid09_be
insmod mdraid09
insmod mdraid1x
insmod raid5rec
insmod raid6rec
}
menuentry "Enable GRUB2's PATA support (to work around BIOS bugs/limitations)" {
insmod ata
update_paths
}
menuentry "Enable GRUB2's USB support *experimental*" {
insmod ohci
insmod uhci
insmod usbms
update_paths
}
menuentry "Mount encrypted volumes (LUKS and geli)" {
insmod luks
insmod geli
cryptomount -a
}
menuentry "Enable serial terminal" {
serial
terminal_input --append serial
terminal_output --append serial
}
}
# Reboot
menuentry "Reboot" {
reboot
}
# Poweroff
menuentry "Poweroff" {
halt
}
Copie des fichiers ISO sur le lecteur USB
Le fichier concernant les OS mbusb.cfg
nano /mnt/multiboot/boot/grub/mbusb.cfg
# Partition holding files
probe -u $root --set=rootuuid
set imgdevpath="/dev/disk/by-uuid/$rootuuid"
export imgdevpath rootuuid
# Custom variables
set isopath="/boot/isos"
export isopath
# Load modules
insmod regexp
insmod all_video
# MultiBoot USB menu
submenu "Multiboot ->" {
# Warning for 32-bit systems
if ! cpuid -l; then
clear
echo "This is a 32-bit computer."
echo "You won't get to use 64-bit software on it."
echo
echo -n "To continue, press ESC or wait 10 seconds... "
sleep --interruptible 10
echo
echo
fi
# Load custom configuration
if [ -e "$prefix/mbusb.cfg.local" ]; then
source "$prefix/mbusb.cfg.local"
fi
# Load configuration files
echo -n "Loading configuration files... "
for cfgfile in $prefix/mbusb.d/*.d/*.cfg; do
source "$cfgfile"
done
}
Dossiers de la clé multiboot
Téléchargez et copiez les fichiers ISO dans le dossier
/mnt/multiboot/boot/isos/
du lecteur USB
Clé
dmesg
[ 18.805942] sdd: sdd1 sdd2 sdd3
[ 18.808951] sd 4:0:0:0: [sdd] Attached SCSI removable disk
Montage de la clé
sudo -s
mkdir -p /mnt/multiboot
mount /dev/sdd3 /mnt/multiboot
Structure des configurations OS
tree -L 2 /mnt/multiboot/boot/grub/mbusb.d/
/mnt/multiboot/boot/grub/mbusb.d/
├── archlinux.d
│ └── generic64.cfg
├── debian.d
│ └── netboot-generic.cfg.ERR
├── kali.d
│ └── generic.cfg
├── manjaro.d
│ └── generic.cfg
└── pmagic.d
└── generic.cfg
Manjaro
Modifier la configuration pour prise en charge langue FR par défaut
sed -i 's/quiet splash/lang=fr_FR keytable=fr quiet splash/g' /mnt/multiboot/boot/grub/mbusb.d/manjaro.d/generic.cfg
Le fichier iso
rsync -h --progress media/dplus/iso/manjaro/manjaro-xfce-18.1.3-191114-linux53.iso /mnt/multiboot/boot/isos/ && sync
Archlinux
Le fichier iso
rsync -h --progress media/dplus/iso/archlinux/archlinux-2020.02.01-x86_64.iso /mnt/multiboot/boot/isos/ && sync
Kali
Modifier la configuration pour prise en charge langue FR par défaut
sed -i 's/hostname=kali/hostname=kali lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105/g' /mnt/multiboot/boot/grub/mbusb.d/kali.d/generic.cfg
Le fichier iso
rsync -h --progress media/dplus/iso/kali-linux-2019-2-amd64-iso/kali-linux-2019.2-amd64.iso /mnt/multiboot/boot/isos/ && sync
Partition magic
Montage fichier iso sur tmp
mkdir -p tmp
sudo mount -o loop -t iso9660 pmagic_2019_12_24.iso tmp/
Copie du répertoire pmagic sur la racine de la clé USB
sudo cp -r tmp/pmagic/ /mnt/multiboot/ && sync
sudo umount tmp
Remplacer le fichier /mnt/multiboot/boot/grub/mbusb.d/pmagic.d/generic.cfg
submenu "Pmagic..." {
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..."
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
}
}
Les fichiers ISO présents
tree /mnt/multiboot/boot/isos/
/mnt/multiboot/boot/isos/
├── archlinux-2020.02.01-x86_64.iso
├── kali-linux-2019.2-amd64.iso
└── manjaro-xfce-18.1.3-191114-linux53.iso
Structure globale de la clé multiboot
tree -L 3 /mnt/multiboot/
/mnt/multiboot/
├── boot
│ ├── bin
│ ├── grub
│ │ ├── fonts
│ │ ├── grub.cfg
│ │ ├── grub.d
│ │ ├── grubenv
│ │ ├── i386-pc
│ │ ├── mbusb.cfg
│ │ ├── mbusb.d
│ │ ├── themes
│ │ └── x86_64-efi
│ ├── isos
│ │ ├── archlinux-2020.02.01-x86_64.iso
│ │ ├── kali-linux-2019.2-amd64.iso
│ │ └── manjaro-xfce-18.1.3-191114-linux53.iso
│ └── krnl
├── efi
└── pmagic
├── bzImage
├── bzImage64
├── fu.img
├── initrd.img
├── m32.img
├── m64.img
└── pmodules
├── PMAGIC_2018_04_30.SQFS
└── scripts
Debian (PROBLEME BOOT , NON RECONNAISSANCE USB)
PROBLEME Debian netinst… → Clé USB Multibootable Debian
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 , les télécharger dans le dossier initrd de la clé USB
sudo -s
mkdir -p /mnt/multiboot/initrd # création dossier initrd
wget -O /mnt/multiboot/initrd/initrd-i386.gz https://mirrors.kernel.org/debian/dists/stable/main/installer-i386/current/images/hd-media/initrd.gz # Pour les iso i386
wget -O /mnt/multiboot/initrd/initrd-amd64.gz https://mirrors.kernel.org/debian/dists/stable/main/installer-amd64/current/images/hd-media/initrd.gz #Pour les iso amd64
Remplacer le fichier /mnt/multiboot/boot/grub/mbusb.d/debian.d/netboot-generic.cfg
for isofile in $isopath/debian-*netinst.iso; do
if [ -e "$isofile" ]; then
menuentry "Debian Buster 64 (mode expert)" {
set isofile=$isofile
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'
}
}
fi
done
Modifier le fichier de configuration /mnt/multiboot/boot/grub/mbusb.d/debian.d/netboot-generic.cfg
submenu "Debian..." {
menuentry "Debian Stretch 32 (mode expert)" {
set isofile='/boot/isos/debian-9.6.0-i386-netinst.iso'
loopback loop $isofile
linux (loop)/install.i386/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-i386.gz'
}
menuentry "Debian Stretch 64 + firmware (mode expert)" {
set isofile='/boot/isos/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 "Debian Stretch 64 (mode expert)" {
set isofile='/boot/isos/debian-9.8.0-amd64-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'
}
}
Démarrez n’importe quelle ISO avec MEMDISK (facultatif)
[Using Syslinux’s MEMDISK][usingmemdisk], , un fichier ISO peut être chargé directement en mémoire (si le système en a assez), ce qui permettra de démarrer certaines images ISO non prises en charge.
Pour obtenir le fichier binaire de MEMDISK, vous pouvez installer syslinux à l’aide du gestionnaire de paquets de votre système et le trouver dans /usr/lib/syslinux/memdisk
ou /usr/lib/syslinux/bios/memdisk
, suivant votre distribution.
sudo pacman -S syslinux # le fichier /usr/lib64/syslinux/bios/memdisk
Alternativement, vous pouvez télécharger l’archive officielle depuis kernel.org, dans ce cas, vous trouverez le binaire /bios/memdisk/memdisk
.
Une fois que vous avez le fichier, il suffit de le copier dans votre partition de données:
cp -f /usr/lib64/syslinux/bios/memdisk /mnt/multiboot/boot/grub/
Démontage
sudo umount /mnt/multiboot
sudo umount /mnt/multiboot/efi
Test de lecteur USB avec QEMU
Pour tester le lecteur USB nouvellement créé dans un environnement virtuel, exécutez:
sudo qemu-system-x86_64 -machine accel=kvm:tcg -m 2G -vga std -hda /dev/sdd
Remplacer /dev/sdd par le nom du périphérique USB (par exemple. /dev/sdb,/dev/sdc,etc…).
Exécutez mount
pour obtenir cette information.
Obtenir des fichiers amorçables ISO
Vous pouvez télécharger des fichiers ISO à partir de ces sites ,dans le dossier <mountpoint>/boot/isos
:
- Antergos:un système d’exploitation moderne, élégant et puissant basé sur une des meilleures distributions Linux disponibles, Arch Linux.
- Arch Linux: une distribution légère et flexible de Linux® qui tente de rester simple.
- AVG Rescue CD:un outil pour réparer les pannes du système et permettre à vos systèmes de fonctionner à pleine capacité.
- BackBox: une distribution basée sur Ubuntu développée pour effectuer des tests de pénétration et des évaluations de sécurité.
- CentOS: un effort de logiciel libre axé sur la communauté visant à fournir un écosystème open source robuste.
- Clonezilla Live: une petite distribution GNU/Linux pour le “clonage” des ordinateurs x86/amd64 (x86-64).
- Debian: un système d’exploitation gratuit (OS) pour votre ordinateur.
- elementary OS: un remplacement rapide et ouvert pour Windows et OS X.
- Fedora: un système d’exploitation poli et facile à utiliser.
- Gentoo Linux: une distribution Linux souple et basée sur les sources.
- GParted Live: outil de partitionnement sur une distribution GNU/Linux.
- Grml Live Linux: un système live bootable basé sur Debian qui comprend une collection de logiciels GNU/Linux spécialement pour les administrateurs système.
- Hiren’s BootCD: une trousse de premiers soins pour votre ordinateur.
- Kali Linux: une distribution Linux dérivée de Debian conçue pour le forensic numérique et les tests de pénétration.
- Linux Mint: une distribution basée sur Ubuntu dont le but est de fournir une expérience complète en incluant des plugins de navigateur, des codecs multimédia, la prise en charge de la lecture de DVD, Java et autres Composants.
- Manjaro Linux: une distribution Linux conviviale basée sur le système d’exploitation Arch développé indépendamment.
- openSUSE: un projet et une distribution Linux sponsorisés par SUSE Linux GmbH et d’autres sociétés.
- Parabola GNU/Linux-libre: un effort communautaire pour fournir un système d’exploitation entièrement libre simple et léger.
- Parted Magic: une solution complète de gestion des disques durs et plus encore.
- Slax Linux: un système d’exploitation Linux moderne, portable, petit et rapide avec une approche modulaire et un design exceptionnel.
- SliTaz: un système d’exploitation sécurisé et performant utilisant le noyau Linux et le logiciel GNU.
- SystemRescueCd: une solution de secours de système Linux pour administrer ou réparer votre système et vos données après une panne.
- Tails: un système d’exploitation en direct, qui vise à préserver votre vie privée et l’anonymat.
- Trisquel GNU/Linux: un système d’exploitation entièrement gratuit pour les particuliers, les petites entreprises et les centres éducatifs.
- Ubuntu: une plateforme logicielle open source qui va du cloud, au smartphone.
- Void: un système d’exploitation à usage général, basé sur le noyau Linux® monolithique.
Vous pouvez obtenir des noyaux iPXE à partir de ces sites Web (sauvegardez sur <mountpoint>/boot/krnl
):
- boot.rackspace.com: une collection de scripts iPXE qui vous permettent de rapidement redémarrer les systèmes d’exploitation, les utilitaires et d’autres outils très facilement.
- netboot.xyz: un moyen de sélectionner les différents installateurs ou utilitaires du système d’exploitation à partir d’un emplacement dans le BIOS sans avoir besoin d’aller chercher le support pour exécuter l’outil.