[RTEX] RPi4B - Raspbian Buster Lite - USB SSD

Tags: #<Tag:0x00007fc8d1b6d900>

(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
  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

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.
(A noter que cette opération à pour conséquence de créer un nouveau identifiant pour le disque SSD.)

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 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:

3 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: