Jusqu’à peu, tout mon Yunohost et ses données (qui tourne sur Raspberry 3) était installé sur une carte SD.
J’y voyais plusieurs inconvénients angoissants :
-
Pas très fiable : Avec une partition swap et un Nextcloud qui tourne bien, la carte SD allait inexorablement vers une mort en burn-out quasi certaine à moyen terme.
Pas cool. -
Vitesse de lecture / écriture assez faible.
-
C’est cher et donc vite limitant si on a besoin de place.
Mais ça c’était avant que je découvre qu’il était possible de configurer les Raspberry pi **Pi 2B v1.2, 3A+, 3B, 3B+ et 4 pour qu’ils boot directement sur un disque SSD branché en USB.
Il y a plein d’infos et de tuto disponibles à propos du USB boot sur le Raspberry pi 4, mais beaucoup moins à propos des autres modèles.
Donc j’y vais de mon petit tuto parce que j’ai trouvé que ce n’était vraiment pas compliqué. Si ça peut être utile à quelqu’un alors tant mieux.
ATTENTION :
- L’opération est irréversible
- Sur le Raspberry Pi 3A+, elle empêche le Pi d’être en mode USB device (mode dans lequel le raspberry se comporte comme un clé USB lorsqu’on le branche à un autre ordinateur).
1 - Le matos
Un adaptateur USB 3.0 ↔ Sata (j’en ai trouvé un à 7.99€ qui marche nickel)
Un SSD (j’en ai pris un de 480 Go pour environ 65€)
2 - Avant tout, on sauvegarde
On va tout d’abord faire une image de notre carte SD.
On éteint le Raspberry pi proprement, on enlève la carte SD et sur une autre machine Linux on en fait l’image à l’aide de la commande suivante :
dd if=/dev/mmcblk0 of=/repertoire/du/backup/backup-YNH-date-du-jour.img status=progress
Quand c’est terminé, on garde précieusement l’image backup-YNH-date-du-jour.img de côté parce qu’on va l’utiliser plus tard.
3 - On configure le USB mass storage boot
On va remettre la carte SD dans la raspberry et le mettre sous tension.
Ensuite, je me suis tout simplement basé sur la doc officielle de la fondation Raspberry)
Rajouter la ligne program_usb_boot_mode=1
à la fin du fichier /boot/config.txt
avec la commande.
echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
Puis redémarrer proprement le raspberry avec un
sudo reboot
Après le reboot, lancer cette commande :
$ vcgencmd otp_dump | grep 17:
La commande doit renvoyer exactement 17:0x3020000a
Si ce n’est pas le cas, c’est que ça n’a pas marché et qu’il faut recommencer.
La doc précise que l’on peut supprimer la ligne program_usb_boot_mode
du fichier config.txt
, pour éviter que la carte SD ne configure un autre raspberry en USB mass storage boot (si on la met dans un autre Pi). Ils précisent qu’il ne faut pas laisser de ligne vide à la fin du fichier config.txt
.
Voilà, votre Raspberry devrait maintenant pouvoir booter sur un périphérique USB.
4 - On flash l’image sur le SSD
brancher le SSD à l’aide de l’adaptateur sur l’ordinateur sur lequel se trouve l’image de notre Yunohost réalisée au début du tuto.
Là, il faut tout simplement flasher l’image sur le SSD. Chacun à sa méthode, moi j’utilise Etcher.
- 1-On sélectionne l’image. Ici, backup-YNH-date-du-jour.img
- 2-On sélectionne le disque SSD sur lequel on va flasher l’image
- 3-On valide
Si besoin, se baser sur cette page.
Une fois que l’image est flashée, on peut démonter les partitions du SSD.
Certains constateront que la partition root crée est uidentique à l’ancienne et que l’espace disque du SSD n’est pas complètement utilisé. C’est normal, nous allons régler ça juste après.
5 - Le test
On retire la carte SD du raspberry et on y branche le SSD.
On met sous tension.
Votre Pi devrait démarrer en prenant un peu plus de temps (5 à 10 secondes de plus) parce qu’il cherche dans un premier temps s’il n’y a pas une carte SD.
Ne pas hésiter à brancher un écran pour l’occasion, histoire de voir ou de comprendre ce qu’il se passe en cas de problème.
Pour ma part la premier boot n’avait pas fonctionné, je ne sais pas trop pourquoi. J’ai enlevé l’alim, l’ai remise et PAF, ça a fonctionné parfaitement. Et pas de soucis depuis.
6 - Repartitionner la partition root
Une fois que votre machine est démarrée et que vous avez constaté que tout fonctionne, nous pouvons redimentionner la partition root pour qu’elle occupe tout l’espace non partitionné sur le SSD
-
Faire un
fdisk -l
et repérer la partition root.
Dans mon cas, il s’agissait de /dev/sda2 (si vous n’êtes pas sûr, il y a la commandefindmnt
qui peut vous aider) -
Ensuite, lancer la commande fdisk suivie de l’emplacement de votre SSD.
Pour moi cela donne :
fdisk /dev/sda
Vous êtes maintenant dans le programme fdisk.
- Saisir la commande
p
pour afficher la table de partitions
Cela devrait ressembler à quelque chose comme ça :
Command (m for help): p Disk /dev/sda: 7.5 GiB, 8027897856 bytes, 15679488 sectors Disk model: DataTraveler 410 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xd02483c7
Device Boot Start End Sectors Size Id Type /dev/sda1 8192 532480 524289 256M c W95 FAT32 (LBA) /dev/sda2 540672 6365183 5824512 2.8G 83 Linux
Noter la valeur start
de la partition concernée (ici, cela correspond à 540672, mais chez vous cela sera sûrement autre chose. Notez le, c’est important.)
- Saisir
d
(pour delete) et taper sur entrée, puis saisir 2 pour supprimer /dev/sda2 (la deuxième partition).
Command (m for help): d Partition number (1,2, default 2): 2 Partition 2 has been deleted.
- Saisir
n
(pour new), touche entrée, puisp
(pour primary), touche entrée, et enfin 2 puis touche entrée (pour partition numéro 2).
Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): 2
- Là, le programme vous demande le premier secteur. Il vous faut saisir le numéro que vous avez noté plus haut (dans mon cas c’est 540672) et valider avec entrée.
First sector (2048-15679487, default 2048): 540672
- Ensuite, on vous demande le numéro du dernier secteur.
Saisir le numéro par défaut (dans mon cas c’est 15679487)
Last sector, +/-sectors or +/-size{K,M,G,T,P} (540672-15679487, default 15679487 ):
La partition est ensuite crée.
Created a new partition 2 of type ‘Linux’ and of size 7.2 GiB.
- Il est possible que le programme vous affiche le message suivant :
Partition #2 contains a ext4 signature. Do you want to remove the signature? [Y]es/[N]o:
Si c’est le cas, saisir N (pour Non / No), puis entrée.
- Saisir
w
puis entrée pour sauvegarder et quitter le programme.
Command (m for help): w The partition table has been altered. Syncing disks.
-
Rebooter la machine.
(ce n’est pas encore terminé) -
Après le reboot, lancer la commande
sudo resize2fs /dev/sda2
- Vérifier que votre partition est correctement dimentionnée avec la commande
df -h
C’est terminé.
Vous pouvez vérifier encore une fois que tout fonctionne et faire une sauvegarde (vous pouvez même éteindre la machine, débrancher le SSD pour en faire une image, on ne sait jamais…)
-En espérant que cela vous soit utile-