Booter sur un disque dur USB avec un Raspberry PI4

Introduction

A ce jour, le RPI Pi 4 ne boot pas nativement sur un disque dur USB.
Il faut ressortir l’ancienne méthode pour faire cela, c’est à dire mettre une carte SD qui ne servira qu’au boot (démarrage).

Préparation

Dans un premier temps, il faut mettre Raspbian sur la Carte SD : Gravez l’image tout simplement.

Idem pour votre disque SSD : Gravez l’image. Et petite remarque pour les installations toutes neuves, il vous faudra utiliser gparted pour redimensionner la partition (Raspbian ne voudra pas le faire).

Branchez le disque SSD, mettez la carte SD, et démarrez le RPI.

C’est parti en SSH

S’identifier en SSH et se mettre en root :
sudo -i

On va maintenant identifier le disque SSD, tapez :
fdisk -l | grep /dev/sd
On aura quelque chose comme cela :

Si vous avez plusieurs disques, vous pourrez vérifier lequel on doit utiliser par rapport aux partitions :
/dev/sda1 -> FAT32 (c’est la partition de boot)
/dev/sda2 -> Linux (c’est la partition des données).
Vous pouvez aussi vérifier que c’est le bon disque grâce à la taille du disque (ici : 119,2GiB)
Vous remarquerez que ma partition /dev/sda2 a besoin d’un petit gparted car elle ne fait que 59,6G (et elle pourrait faire bien plus soit ~ 118G)

C’est parti pour dire au SDD que c’est lui qui sera le disque à utiliser :
mount /dev/sda1 /media
nano /media/cmdline.txt

Recherchez root= et mettre root=/dev/sda2
Ctrl + O pour enregistrer, et Ctrl + X pour sortir
umount /media
mount /dev/sda2 /media
nano /media/etc/fstab

Dans fstab, on aura deux lignes comme cela :
xxxxxxxxxxxxxx    /boot vfat    defaults 0       2
xxxxxxxxxxxxxx   
/ ext4    defaults,noatime 0       1
Ce qui est important c’est de remplace le texte du début par /dev/sda1 et /dev/sda2
/dev/sda1    /boot vfat    defaults 0       2
/dev/sda2   
/ ext4    defaults,noatime 0       1
Ctrl + O pour enregistrer, et Ctrl + X pour sortir
umount /media

Maintenant on va dire à la carte SD de booter sur le SSD :
nano /etc/fstab
on a un truc du genre : 
proc              /proc proc    defaults 0       0
/dev/mmcblk0p1    /boot vfat    defaults 0       2
/dev/mmcblk0p2   
/ ext4    defaults,noatime 0       1

Modifiez seulement le début de la 3ème ligne qui parle de / en ext4 pour mettre /dev/sda2 :
proc              /proc proc    defaults 0       0
/dev/mmcblk0p1    /boot vfat    defaults 0       2
/dev/sda2         / ext4    defaults,noatime 0       1

Ctrl + O pour enregistrer, et Ctrl + X pour sortir
nano /boot/cmdline.txt
Remplacer le root=/dev/mmcblk0p2 par root=/dev/sda2
(normalement c’est root=/dev/mmcblk0p2, au pire vous aurez compris qu’il faut remplacer ce qu’il y a après root= par /dev/sda2)
Ctrl + O pour enregistrer, et Ctrl + X pour sortir

Et reboot !

Vérification

Après le reboot, reconnectez-vous en ssh et tapez :
sudo -i
df -h
Cela sortira la liste des partitions montées et sur quel disque elles sont montées :

Deux choses à vérifier :
En rouge la ligne montée en / fait bien la taille du disque (pour rappel ma /dev/sda2 faisait 59,6G donc c’est ~59G)
En bleu la ligne montée en /boot doit pointer sur /dev/sda1 pour utiliser la partition boot du SSD après le démarrage.

Revenir en arrière et booter sur la carte SD

mkdir /mnt/tmp1
mkdir /mnt/tmp2
mount /dev/mmcblk0p1 /mnt/tmp1
mount /dev/mmcblk0p2 /mnt/tmp2

nano /mnt/tmp1/cmdline.txt
–> Changer root=/dev/sda2 en root=/dev/mmcblk0p2
nano /mnt/tmp2/etc/fstab

commenter #/dev/sda2 / ext4 defaults,noatime 0 1
ajouter /dev/mmcblk0p2 / ext4 defaults,noatime 0 1
reboot