Je copie in-extenso la page de Tpeltier, de peur que celle-ci ne disparaisse.
Merci à lui.
Sur les derniers modèles de Raspberry PI ( PI 3 b+, PI 4 … ) il est désormais possible de booter directement sur un port USB. Ce qui n’est pas forcément le cas sur les anciennes versions du PI.
Voici donc une procédure pour transférer la partition / de la carte SD sur un support connecté sur un port USB et ainsi fiabiliser votre Raspberry. Dans mon cas il s’agit d’un Raspberry PI 2 B et d’un disque SSD.
Préparation
Dans un premier temps il faut mettre à jour le Raspberry. On se connecte donc en ssh avec les identifiants par défaut ( pi/raspberry ). On utilise ensuite les commandes suivantes :
# sudo apt update
# sudo apt full-upgrade
# sudo rpi-update
Ensuite lancer un reboot pour la prise en compte des mises à jour.
Transfert sur SSD
Pour comprendre cette méthode, ce qu’il faut savoir c’est que lorsqu’on installe Raspbian sur une carte SD, il y a deux partitions de créées:
- /dev/mmcblk0p1 qui est monté sur « /boot ». Cette partition est de type FAT32 (donc accessible depuis Windows) et contient des fichiers qui vont servir à déterminer certains paramètres matériel et du noyau ainsi que lancer le démarrage du système (de Linux donc).
- /dev/mmcblk0p2 qui est monté sur « / » (root) et qui est formaté pour Linux (donc pas accessible depuis Windows) en général au format ext4. Root contient le système Linux avec toutes l’arborescence que vous connaissez (/home, /dev, /var, …). c’est donc cette partition que l’on va devoir transférer sur le SSD.
Lorsque le Raspberry démarre il va aller chercher des données dans la partition « /boot ». Et parmi ces données, il va y avoir l’indication de la partition dans laquelle il va pouvoir lancer Linux. Cette information est stockée dans le fichier « cmdline.txt » derrière le champ « root ».
Par exemple vous pouvez avoir quelque chose du genre root=/dev/mmcblk0p2 ou alors du genre root=PARTUUID=c5ac05a5-02.
Première étape, connecter le disque SSD et vérifier qu’il n’est pas monté automatiquement avec la commande « mount ».
Si c’est le cas utiliser la commande « umount » pour démonter le disque :
sudo umount /dev/sda1
Bien sur il faudra adapter à votre propre nommage pour le disque USB s’il n’est pas en sda.
Copier dessus le système Linux qui est actuellement sur la carte SD. Pour ce faire on va utiliser la commande suivante « dd » :
sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=512
Il va maintenant falloir indiquer au noyau que le système ne se trouve plus sur la carte SD mais sur la partition /dev/sda1. Pour cela, éditez le fichier /boot/cmdline.txt et modifiez après le champ root pour avoir:
root=/dev/sda1
Voici ce que contient mon fichier:
console=serial0,115200 console=tty1 root=PARTUUID=904b080b-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Ce qui doit nous donner après modification :
console=serial0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
La dernière chose à faire, sera de modifier le fichier /etc/fstab qui indique au système quelles partitions sont à monter au démarrage. En effet, dans le fichier actuel, il est indiqué que la partition /dev/mmcblk0p2 doit être montée sur « / » (root). Maintenant, root devra être associé à /dev/sda1
Attention toutefois, à ce stade, d’éditer le bon fichier. Car si vous avez suivi cette procédure jusqu’ici, vous devriez toujours être avec un montage « / » qui est sur « /dev/mmcblk0p2 ». Donc si vous éditez « /etc/fstab », ce sera celui qui est dans la partition de la carte SD et pas celle qui est sur le disque SSD. Pour accéder au disque SSD, il va falloir le monter sur un répertoire. Par exemple:
sudo mkdir /media/ssd
sudo mount -t ext4 /dev/sda1 /media/ssd
sudo vi /media/ssd/etc/fstab
Commenter la ligne qui permet de monter l’ancienne partition et ajouter une ligne qui monte la nouvelle sur « / »:
proc /proc proc defaults 0 0
PARTUUID=904b080b-01 /boot vfat defaults 0 2
/dev/sda1 / ext4 defaults,noatime 0 1
# PARTUUID=904b080b-02 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
Ensuite rebooter et vérifier que tout est bien monté en lançant la commande « mount ».
Vous devriez voir (entre autres) les lignes:
/dev/sda1 on / type ext4 (rw,noatime,data=ordered)
/dev/mmcblk0p1 on /boot type vfat ….
Finalisation
La dernière chose à faire va consister à étendre la partition à toute la taille du disque. Pour cela, lancez la commande:
sudo resize2fs /dev/sda1
Et vérifiez que l’espace disponible correspond bien à la taille du disque
sudo df -kh
Ce qui nous donne effectivement 74G pour la partition /
Filesystem Size Used Avail Use% Mounted on
/dev/root 74G 1.6G 69G 3% /
devtmpfs 184M 0 184M 0% /dev
tmpfs 216M 0 216M 0% /dev/shm
tmpfs 216M 3.1M 213M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 216M 0 216M 0% /sys/fs/cgroup
/dev/mmcblk0p1 253M 54M 199M 22% /boot
tmpfs 44M 0 44M 0% /run/user/1000