Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

Raspberry Pi : Installation du système du RPI sur un disque USB

L'utilisation d'un disque dur permet :

  • d'installer sur le disque le système du RPI
  • d'y créer :
    • une partition de swap
    • une zone d'échange ext4 avec le monde linux
    • et une zone d'échange ntfs avec le monde Windows.

Les partitions sont repérées comme au paragraphe Première étape : partitionnement.

Seule la partition de démarrage de Raspbian et celle de BerryBoot doivent impérativement résider sur la carte SD.

Cela économise la carte SD qui ne comporte plus que le boot et peut être mise en mode lecture seule.

Pré-requis

Première étape : partitionnement

Partitionnez le disque pour obtenir une partition ext4 assez grande pour contenir la partition racine actuelle.

Le plan de partitionnement proposé ici comporte :

  1. Une partition Linux ext4 de 100 Go : système du R-Pi, stockage de fichiers, de vidéos…
  2. Une partition ntfs pour pouvoir échanger des fichiers avec des machines équipées en Windows.
Système du R-Pi - ext4 - 100 Go Partition partagée - ntfs - le reste du disque

Branchez le disque USB sur un PC.

Graphiquement, avec gparted

Ouvrez gparted.

Partitionnez le disque pour obtenir une partition ext4 assez grande pour contenir la partition racine actuelle.

Voici un exemple de préparation d'un disque externe avec gparted :

Ici, le disque USB est en /dev/sdh avec ses partitions :

  • /dev/sdh1, créée pour la racine du RPI, formatée en ext4.
  • les autres sont modifiées pour lui faire de la place

En ligne de commande (si on n'a pas d'accès graphique)

Autres étapes

Transfert du Root file system

Nous allons déplacer sur un disque dur USB la partition racine de l'installation Raspbian existante pour améliorer les performances et préserver la carte SD.

Seul boot doit résider sur la carte SD.

Branchez le disque usb sur le RPI.

Repérez les partitions :

pi@framboise:~ $ sudo blkid
/dev/mmcblk0p1: LABEL="RECOVERY" UUID="4410-7BB7" TYPE="vfat" PARTUUID="d25b6342-01"
/dev/mmcblk0p3: LABEL="SETTINGS" UUID="b089fc95-75de-464f-8700-dc9cf62be0b9" TYPE="ext4" PARTUUID="d25b6342-05"
/dev/mmcblk0p5: LABEL="BOOT" UUID="5172-B45E" TYPE="vfat" PARTUUID="d25b6342-06"
/dev/mmcblk0p6: LABEL="root" UUID="4051e5cf-3f44-4459-890f-de6d77c01f15" TYPE="ext4" PARTUUID="c0965f47-06"
/dev/sda1: UUID="8528...|" TYPE="ext4" PARTUUID="c0965f47-01"
/dev/sda2: LABEL="Rpi-data" UUID="422f3716-add7-48ed-a427-32e60109cc2e" TYPE="ext4" PARTUUID="c0965f47-07"
/dev/sda3: LABEL="Reservoirs" UUID="fd152153-c344-4f58-b9cd-5dee43091f5d" TYPE="ntfs" PARTUUID="c0965f47-05"

On voit :

  • les partitions de la carte sd :
    • /dev/mmblk0p1 : “recovery” en FAT = sauvegarde du système tel que fourni au départ
    • /dev/mmblk0p3 : “settings”, en ext4 = réglages
    • /dev/mmblk0p5 : “boot”, en FAT = le boot de NOOBS
    • /dev/mmblk0p6 : “root”, en ext4 = la partition à déplacer sur le disque
  • les partitions de notre disque dur :
    • /dev/sda1 : la partition que nous avons préparée
    • /dev/sda2 et suivantes : les autres partitions

Pour transférer le système, commençons par vérifier les montages par :

pi@framboise:~ $ sudo df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
rootfs              36G     12G   23G  33% /
/dev/mmcblk0p6      36G     12G   23G  33% /
devtmpfs           458M       0  458M   0% /dev
tmpfs              462M     13M  450M   3% /run
tmpfs              5,0M    4,0K  5,0M   1% /run/lock
tmpfs              462M       0  462M   0% /run/shm
/dev/mmcblk0p5      66M     22M   45M  32% /boot
/dev/mmcblk0p3      30M    444K   28M   2% /media/SETTINGS
/dev/sda1           30M    434K   28M   2% /media/8528...
/dev/sda2           99G    2,2G   92G   3% /media/Rpi-data
/dev/sda3           94G     21G   69G  23% /media/Reservoirs

La partition /dev/mmblk0p6 est la racine (/dev/root = rootfs), montée en /

On retrouve :

partitionmontée en
/dev/mmblk0p5/boot
/dev/mmblk0p6/
/dev/sda1/media/XXXX…

La partition /dev/mmblk0p6 est la racine (/dev/root = rootfs), montée en /

Affichez le fichier /boot/cmdline.txt :

pi@framboise:~ $ cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait

L'élément à repérer est root=/dev/mmblk0p6 : pour l'instant, la racine utilisée est /dev/mmblk0p6, sur la carte SD. Nous allons la remplacer par /dev/sda1

Commençons par copier cette partition sur celle du disque :

Démontez la partition du disque et faites la copie :

pi@framboise:~ $ sudo umount /dev/sda1
pi@framboise:~ $ pv /dev/mmblk0p6 | sudo dd of=/dev/sda1 bs=4M

Maintenant, il faut rediriger le boot vers le disque.

Éditez avec les droits d'administration le fichier dev/mmblk0p5/cmdline.txt pour remplacer root=/dev/mmblk0p6 par root=/dev/sda1

Cas particulier : écriture directe de Raspbian sur la carte SD sans BerryBoot

Dans /dev/mmcblk0p1, modifier les paramètres de cmdline.txt pour signifier au noyau que le Root File System se trouve sur /dev/sda2.

Éditez avec les droits d'administration le fichier /boot/cmdline.txt pour remplacer root=/dev/mmcblk0p2 par root=/dev/sda2

Sur le disque : paramétrage du fichier fstab

Éditez avec les droits d'administration le fichier /dev/sda2/etc/fstab pour :

  • dupliquer la ligne de la carte SD (ici, commençant par /dev/mmcblk0p6)
  • commenter la première (ajouter un # au début de la ligne),
  • modifier l'autre en remplaçant la carte SD par le disque
  • mettre la carte SD en Read Only (ro) puisqu’on ne fait que lire les fichiers qui s’y trouvent pour les charger en mémoire. Comme la carte est limitée en nombre d’écritures mais pas en nombre de lectures, vous voici tranquille pour un moment. De plus une cinquantaine de Mo suffisent pour /dev/mmcblk0p5, ce qui fait que vous pouvez réutiliser une vieille carte SD de 1GO sans problème.

Il s’agit ici du fichier fstab qui se trouve dans la partition /dev/sda2, pas de celui qui est sur la carte SD (/dev/mmcblkop2)

/dev/sda2/etc/fstab
/dev/mmcblk0p5  /boot           vfat    defaults          0       2
#/dev/mmcblk0p6  /               ext4    defaults,noatime  0       1
/dev/sda1  /               ext4    defaults,noatime  0       1

Redémarrez le Raspberry PI :

pi@framboise:~ $ sudo reboot

Si tout se passe bien il démarre comme d’habitude, mais depuis le disque.

Notez que vous ne perdrez pas de données ; si les choses tournent mal, il suffit de modifier à nouveau le fichier /boot/cmdline.txt sur un ordinateur pour démarrer de nouveau à partir de la carte SD.

Étendre le Root file system

Le rootfs (partition /dev/sda1) ne fait que 1.8Go, car c'est la copie de la carte SD…

L'étendre avec resize2fs pour qu'il occupe tout l’espace disponible :

pi@framboise:~ $ sudo resize2fs /dev/sda1

Résultat : le rootfs (partition /dev/sda2) a été agrandi.

Conclusion

Problèmes connus

Voir aussi