Raspberry PI : transférer l’OS sur un disque SSD

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.

On le sait tous, le principal défaut des Raspberry est sa carte SD. En effet, la carte SD n’a pas une vie éternelle. Une carte SD est un composant électronique qui est écrit et écrasé continuellement. Ce type de composant est soumis à un nombre de cycles d’écriture. Malheureusement, dans un Raspberry, les nombreux cycles répétés à la minute, voir à la seconde ont vite raison de la carte SD qui termine par se corrompre, mettant alors votre système en carafe.

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:

  1. /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). 
  2. /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