[RTEX] RPi4B - Raspbian Buster Lite - USB SSD

Tags: #<Tag:0x00007fbda280aab8> #<Tag:0x00007fbda280a838>

(migration depuis l’ancien forum, post du 8 juil. 2019)

Bonjour à tous, c’est akenad :slight_smile: ,

Aujourd’hui je vais vous présenter un retour d’expérience sur la mise en œuvre d’un RPi4B avec système sur support de stockage USB SSD.

Les équipements et logiciels utilisés sont les suivants :

  • RPi4B 4Go
  • Raspbian Buster Lite (base Debian 10)
  • carte microSD 32 Go
  • SSD 32 Go Transcend (TS32GMSA370)
  • boîtier SSD USB/mSATA (Inateck Boîtier USB 3.0) pour y placer le SSD
  • adaptateur microSD/USB Transcend USB3

La version du firmware de l’EEPROM du Rpi4B ne permettant pas au jour ou j’écris ces lignes de booter directement sur USB, nous allons booter sur carte microSD, tout en ayant le système sur USB SSD. C’est-à-dire en mettant /boot sur SD et / sur SSD. / est la racine (root) du système de fichiers.

Nous allons procéder en plusieurs étapes :

  1. installer l’image Raspbian Buster Lite sur la microSD et sur l’USB/SSD.
  2. étendre la partition physique système de la SSD et regénérer son UUID
  3. configurer le chargement du boot et du système en modifiant le fichier cmdline.txt
  4. installation sur le RPi4B, modification de /etc/fstab et configuration du système

1) installer l’image Raspbian Buster Lite sur la microSD et sur l’USB/SSD.

L’image que j’ai utilisée est du 24-06-2019 et disponible ici : https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-06-24/
La dernière version d’image disponible est ici : https://downloads.raspberrypi.org/raspbian_lite_latest

Nous allons installer l’image Raspbian Buster Lite avec BalenaEtcher 2 fois, une fois sur la SD et une fois sur la SSD en utilisant un port USB d’un PC (l’idéal étant d’avoir 2 ports USB3 et de faire tout en même temps) :

  • connecter l’USB/SSD
  • pour la microSD, utiliser l’adaptateur microSD/USB

L’image flashée avec BalenaEtcher crée 2 partitions sur le support de stockage, la première partition FAT32 de 256 Mo et la deuxième partition système linux EXT4 d’environ 2 Go.
Une fois l’image flashée , la partition FAT32 qui vient d’être créée peut ne pas être visible, dans ce cas débrancher et rebrancher l’USB.

Sur la SD et la SSD (c’est-à-dire sur la partition FAT32 créée, mettre à la racine un fichier nommé « ssh » vide. (ceci est nécessaire pour pouvoir accéder par la suite au RPi4B en SSH).

2) étendre la partition physique système de la SSD et regénérer son UUID

Après le flashage de l’image sur la SSD, la partition physique système est d’environ 2Go alors que la SSD est de 32 Go.
Pour étendre la partition la méthode la plus simple que j’ai trouvée et de
booter la toute première fois sur la SSD avec un RPi3B+
(oui, ok il faut en avoir un !),
ce qui a pour effet d’étendre automatiquement la partition physique système au maximum disponible à savoir ici environ 32 Go,
et pour effet de créer un nouveau identifiant UUID pour le disque SSD, différent du disque SD.

3) configurer le chargement du boot et du système en modifiant les fichiers cmdline.txt

La partition FAT32 de la SD et de la SSD contiennent à la racine le fichier cmdline.txt contenant le paramètre :
root=PARTUUID=xxxxxxxx-02
ou xxxxxxxx en hexadécimal sur 8 caractères représente un identifiant UUID de disque et -02 la deuxième partition (partition système (partition root)).
dans le cas présent j’ai :

  • identifiant de la SD : 1ac7c83c
  • identifiant de la SSD : 5fd9eb02

dans le cmdline.txt de la SD je remplace 1ac7c83c par 5fd9eb02, ainsi après le boot sur la SD, le système sera chargé à partir de la SSD.

4) installation sur le RPi4B, modification de /etc/fstab et configuration du système

Sur le Pi4, mettre la SD dans son logement et l’USB/SSD sur un port USB (couleur bleue pour USB3) et démarrer.
Brancher le câble réseau puis l’alimentation.

RPi4B-SSD

Le pi4 boot sur la SD et charge le système depuis la SSD.
Repérer l’adresse IP prise sur le réseau et se connecter SSH (pi/raspberry)

Nous allons modifier le fichier /etc/fstab sur la SSD afin d’indiquer sur la SSD que le /boot est chargé depuis la SD. Ce qui permettra par la suite d’effectuer correctement les mises à jour Kernel et firmware.

pi@raspberrypi:~ $ cat /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=5fd9eb02-01  /boot           vfat    defaults          0       2
PARTUUID=5fd9eb02-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
# use  dphys-swapfile swap[on|off]  for that

pi@raspberrypi:~ $ sudo nano /etc/fstab

Pour la partition /boot, remplacer l’identifiant de disque SD (ici 5fd9eb02) par l’identifiant de disque SSD (ici 1ac7c83c) :

pi@raspberrypi:~ $ cat /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=1ac7c83c-01  /boot           vfat    defaults          0       2
PARTUUID=5fd9eb02-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

On retrouve les identifiants de disque par la commande fdisk :

pi@raspberrypi:~ $ sudo fdisk -l
[...]
Disk /dev/mmcblk0: 30.2 GiB, 32395755520 bytes, 63272960 sectors
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: 0x1ac7c83c

Device         Boot  Start      End  Sectors  Size Id Type
/dev/mmcblk0p1        8192   532480   524289  256M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      540672 63272959 62732288 29.9G 83 Linux

Disk /dev/sda: 29.8 GiB, 32017047552 bytes, 62533296 sectors
Disk model: ASM1153E
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
Disklabel type: dos
Disk identifier: 0x5fd9eb02

Device     Boot  Start      End  Sectors  Size Id Type
/dev/sda1         8192   532480   524289  256M  c W95 FAT32 (LBA)
/dev/sda2       540672 62533295 61992624 29.6G 83 Linux

Le modèle de disque « ASM1153E » correspond à la SSD.
On retrouve bien :

  • identifiant de la SD : 1ac7c83c
  • identifiant de la SSD : 5fd9eb02

/dev/root ne fait pour l’instant qu’environ 2 Go.

Extension de la partition logique :

pi@raspberrypi:~ $ sudo resize2fs /dev/sda2
resize2fs 1.44.5 (15-Dec-2018)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/sda2 is now 7749078 (4k) blocks long.
[/code]
[code]pi@raspberrypi:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        30G  1.7G   27G   6% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  8.5M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   40M  213M  16% /boot
tmpfs           391M     0  391M   0% /run/user/1000

/dev/root fait maintenant 30 Go.

Ce qui à été détaillé ici permet donc de faire tourner un RPi4B sur un SSD, en bootant sur SD, en attendant qu’une mise à jour du firmware du Pi4 soit disponible pour se passer de la SD comme c’est le cas sur un RPi3B+.

Buster venant de passer en stable, lancer la commande suivante pour que les prochaines mises à jour se passent bien :

pi@raspberrypi:~ $ sudo apt-get update --allow-releaseinfo-change

La suite de la configuration étant classique, je ne détaillerai pas.

Les sources de dépôts :

pi@raspberry:~ $ cat /etc/apt/sources.list
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
# deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi

pi@raspberry:~ $ ls /etc/apt/sources.list.d/
raspi.list

pi@raspberry:~ $ cat /etc/apt/sources.list.d/raspi.list
deb http://archive.raspberrypi.org/debian/ buster main
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://archive.raspberrypi.org/debian/ buster main

Raspbian Buster a installé par défaut entre autres :

  • php7.3
  • python2.7 et python3.7
  • NodeJS 10.15.2 (n’a pas installé npm, j’ai donc installé en plus npm, c’est la 5.8.0)

(à noter que si l’on purge Nodejs et npm, puis que l’on installe npm, npm installe aussi nodejs)

/!\ ATTENTION : donc à la compatibilité avec les installations des dépendances du core et plugins actuels.

Installation de Jeedom 3.3.27 (master) OK.
Juste un petit souci d’installation de dépendances :

  • Le paquet “libav-tools” a été remplacé par le paquet “ffmpeg”, c’est donc ce dernier qu’il faut installer pour effectuer du codec stream audio video.
  • synthétiseurs vocaux libttspico et mbrola NOK

RPi4B-ventilateur-radiateurs

Le pi4 chauffant plus que le pi3 il est conseillé d’y ajouter radiateurs et ventilateur :

Pour alimenter en 5 volts le ventilateur, brancher ses 2 fils sur le connecteur GPIO du Pi.
Les 2 fils se branchent sur la rangée externe, en partant de la gauche,

  • le fil rouge sur sur le 1er ou 2ième pin (5v)
  • le fil noir sur le 3ième pin (Ground)

Voila j’espère que ce retour d’expérience sera utile aux membres Jeedom.

akenad :slight_smile:

4 J'aimes

Merci pour ce dossier complet.

Pour la version de PHP il y a la possibilité d’utilisé le repository survy.org qui permet de mettre des version de PHP antérieur et qui est maintenu par un développeur debian.
C’est une possibilité pour les pluging qui ne sont pas compatible php 7.3. Je ne l’ai pas testé sur raspberry.

A+

Bonjour @mccharlet,

Je pense que ce n’est pas une bonne idée de modifier la version par défaut de php dans Buster

Ceux qui vont suivre cette méthode risquent d’avoir des problèmes de dépendances de plugins par la suite.

Avec Buster (et php 7.3), si un plugin Jeedom affiche des doubles accolades {{ }} c’est probablement que le développeur n’a pas encore remplacé dans le code php la classe « object:: » par « jeeObject:: ».

Pour les utilisateurs avancés impatients :

  • Plugin JeeXplorer
  • recherche des fichiers .php
  • édition/recherche/remplace

(/!\ ATTENTION : ne concernent que certains plugins et pas le core)

akenad :slight_smile:

2 J'aimes

Hello @akenad,

Merci pour ton retour d’expertise.

Super, merci pour ce tuto. Je me tate à remplacer mon pi3b par un 4…mais lequel ??
As tu vu une grande différence dans la rapidité d’exécution ?

Si on fait ça, on va bloquer les futures mises à jour, non? :expressionless:

EDIT :

dans mon install, ce sont les fichiers suivants qui ont encore “object::” :

./core/api/jeeApi.php
./core/class/jeeNetwork.class.php
./desktop/php/battery.php
./plugins/RTSP/desktop/php/RTSP.php
./plugins/virtualhistory/desktop/php/virtualhistory.php
./plugins/Monitoring/desktop/php/Monitoring.php
./plugins/ethalsurveillance/desktop/php/panel.php:
./plugins/ethalsurveillance/desktop/php/ethalsurveillance.php
./plugins/netatmoWeather/desktop/php/netatmoWeather.php

Bonjour,
Je voudrais bien passer de RPI3 a RPI4 mais le connecteur GPIO est utilisé par un module Zwave+. A moins qu’il y ai sur le connecteur GPIO d’autre plot d’alimantation car autrement je ne pourrais pas installer de ventilateur.
Quelqu’un sait-il ???
Merci

Bonjour @michel76,

Le ventilateur fonctionne aussi si tu connectes le fil rouge sur pin 17 (3,3v) et fil noir sur pin 25 (GND)
gpio-pin
mais ça ne réglera pas ton problème à cause de l’encombrement du ventilateur.

akenad :slight_smile:

Hello,
Avec la dernière image de buster il y a un souci de partuuid identiques (problème connu qui devrait être réglé pour la prochaine image apparemment).
En effet il n’est pas re-généré à chaque nouvelle install, ce qui fait que la sd et le ssd ont les mêmes partuuid, impossible donc de les distinguer dans le cmdline et le fstab. Et vu que je compte lui mettre un autre disque dur je ne peux pas me servir de /dev/sda comme chemin.
J’ai reussi à m’en sortir avec ce script https://www.raspberrypi.org/forums/viewtopic.php?t=253562
en changeant les partuuid de la sd.
Pour une sd c’est sudo ./set-ptuuid /dev/mmcblk0 random

@michel76
Tu peux aussi souder 2 fils par en dessous pour ton ventilo.
Je l’ai déjà fait, avec 2 petits colliers type colson ça tient bien.

Il me semble que le pin 2 est branché en direct. Les autres passent par le PI, la puissance dispo est-elle suffisance sur les pins 17 et 25 ?

La puissance est de 3,3Vx0,1A.
Elle est inférieure mais reste suffisante (le ventilateur tourne moins vite).

akenad :slight_smile:

Salut,

c’est sincèrement navrant de perdre le msd sur le pi4 … pour l’ensemble des solutions autre que desktop et la fondation par son mepris a perdu de sa crédibilité … enfin bref

Au niveau fiabilité de l’ensemble avec les plugins c’est bon ?
et au niveau perf ?

merci pour le rex !

Salut,

Niveau perf, c’est forcement plus réactif qu’un pi3…

@akenad
J’ai suivi ta procédure et avec les commentaires de @Ione j’ai réussi a m’en sortir.
Maintenant j’ai un problème de “reboot”. Je suis obligé de débrancher et rebrancher le RPI4 pour retrouver le réseau.(pas pratique)
(je suis en IP fixe)
Si quelqu’un a une idée ??
Merci

@akenad
J’ai résolu le problème en ajoutant un " GPIO Stacking Header " pour connecter mon controleur Z-Wave et utiliser les pins 17 & 25 pour le ventilo ce qui a pour effet d’être silencieux et quand même efficace.

IMG_20191106_094637

@lone Tu pourrais détailler comment utiliser le script set-partuuid stp ? Je ne suis pas très bon sous linux et je n’arrive pas le modifier si bien que mes deux disques utilisent le même et donc je ne peux pas avancer sur le tuto.

@stephanehouse
Salut, pour le script;
Télécharge le sur un ordi, dézippe le, copie le dans ton dossier home (je ne sais pas quelle partition système est active chez toi donc fais le sur la sd et le ssd dans le doute).
Ensuite tu démarre le pi et tu tape:

./set-ptuuid /dev/mmcblk0 random

Ca va changer les partuuid de ta sd donc au prochain reboot tu devrais démarrer sur le ssd.
Fais lsblk pour savoir qui fait quoi.

@michel76
Tu es sûr que c"est un problème d’IP ? si tu branche un écran tu as accès à raspbian ?

@lone e Merci beaucoup, je ne pensais pas que c’était si simple, en fait il suffisait de le mettre à la racine du lecteur. Il me semblait avoir essayé ça en premier mais j’ai du faire une connerie quelque part. J’ai fait autrement (mais en beaucoup plus long), mais je garde la manip de côté pour la prochaine fois ^^.