Installer le disque dur Boot de la sd sur disque externe

Voila mes références a consulter sans modération.

Pitié pour la carte SD de votre framboise314 : Bootez sur un disque dur USB
Raspberry Pi 4 et boot sur disque SSD : La box domotique Jeedom la plus performante et fiable !
Un nouveau guide pour le Raspberry Pi 4 et pas des moindres. On vous explique comment configurer le boot sur disque dur SSD, suvez le guide ...

Préparer le disque

Créez la structure nécessaire au fonctionnement sous Linux. Dans mon cas c’est /dev/sda2 que j’ai réservé à cet usage.

1-Connectez le disque dur externe au raspberry

sudo fdisk -l

et on peut vérifier que le disque dur de 250 Go a bien été détecté.

freecom_01

Quelques infos sur cette copie d’écran :

La commande fdisk

fdisk -l permet de lister l’ensemble des disques actifs, montés ou non-montés dans le système.
Décortiquons les informations intéressantes fournies par cette commande :
Disk /dev/mmcblk0: 3974 MB
C’est le premier disque détecté par la commande fdisk. Il est accessible dans le répertoire /dev comme tous les périphériques de notre Raspberry Pi, et sa taille est de 3974Mo (4Go si vous préférez). Son nom mmcblk0 vient de MMC (Multi Media Card = carte SD) blk pour Block Device, puisque ce périphérique, comme un disque dur, manipule les données sous forme de blocs (des secteurs de 512 octets) et enfin 0 parce que c’est le premier disque dur (ben oui en informatique on commence à compter à partir de zéro).

Un peu plus bas, vous trouvez les partitions existantes sur ce disque dur mmcblk0 : /dev/mmcblk0p1  La première partition au format W95 FAT32 (colonne System)
C’est cette partition qui apparait seule quand vous lisez votre carte SD sur une machine zindozs car formatée en FAT32. C’est aussi sur cette partition que votre Raspberry Pi boote par défaut, ce qui explique qu’il ne peut booter que sur une carte SD.
/dev/mmcblk0p2 Celle-ci est indiquée formatée en Linux, ce qui explique que zindozs dit ne pas la connaitre (à mon avis c’est fait exprès

Ensuite on passe au deuxième disque, celui qui nous intéresse :
Disk /dev/sda: 250.1 GB
C’est le premier “vrai” disque détecté. En Linux pas de C: ou D: vous l’aurez remarqué ! les disques durs se nomment sda, sdb …
Ensuite on voit qu’il n’y a qu’une partition /dev/sda1 sur ce disque et qu’elle est en format NTFS / exFAT car le disque a été reformaté sous Win7. Linux est moins sectaire que son collègue zindozs et vous donne des infos sur la concurrence. Ah mais! Si d’autres partitions existaient elles s’appelleraient sda2, sda3 …

La commande cfdisk

L’outil disponible en ligne de commande pour configurer les partitions est cfdisk. Plus sympathique que fdisk, il dispose d’une interface plus conviviale, gérable avec les touches de déplacement .  Il vous permettra de

  • Détruire la ou les partitions existantes
  • Créer de nouvelles partitions
  • Leur attribuer des types (DOS, FAT32, ext3, swap…)
  • Enregistrer la table de partition modifiée sur le disque

Allez, on se lance :

sudo cfdisk /dev/sda

Puisque mon disque de 250 Go a été détecté en /dev/sda (voir le fdisk un peu plus haut).

freecom_04

Supprimer une partition

Sélectionnez la partition que vous voulez détruire en vous déplaçant avec les flèches Haut et Bas, et allez sur [  Delete  ] avec les flèches Droite et Gauche. Validez avec Enter

La partition a disparu … de l’écran.  Rien n’est encore perdu, vous pouvez avoir un remord, si vous repensez tout à coup que les images de votre bambin sont restées sur le disque, il est encore temps ! Seule la ré-écriture de la nouvelle table de partition par [  Write  ] écrasera la ou les partition(s) existantes… (et encore, il y a des outils de récupération).

Créer une partition

Allez maintenant sur [  New  ], pour créer la (les) nouvelle(s) partition(s).

freecom_05

Dans mon cas, je n’ai que 3 partitions à créer, j’ai donc décidé de créer 3 partitions primaires (c’est qui le chef ? hein ?) : Pour la première …

freecom_06

Il s’agit du Swap dont la taille (1 Go) représente 1000 Mo

freecom_07

Après validation, la partition est créée et elle apparait comme sda1. Créez les autres partitions selon vos besoins. On voit ici que mes trois partitions sont appelées sda1, sda2 et sda3, que ce sont des partitions primaires, et qu’elles sont de type Linux. Je n’ai pas modifié le type. On le fera à l’étape suivante.

freecom_09

Modifier le type de la partition

Le type se définit en cliquant sur [  Type  ], et en choisissant le N° approprié (ce sera 82 pour swap, 83 pour Linux et 0C pour Win95 FAT32). Une fois les types configurés, vérifiez la conformité de toutes vos partitions.

Écrire la table de partition

Passez à l’écriture : [  Write  ]. Il faudra confirmer par un yes que vous abandonnez tout espoir de revoir un jour les données qui étaient sur votre disque dur … Allez c’est parti !

freecom_12

Ne vous inquiétez pas si les partitions n’ont pas exactement la valeur que vous avez indiquée. Une partition ne peut comporter que des pistes entières du disque ! Alors à moins de se livrer à des calculs avant de créer ses partitions, il faut accepter ce léger écart dû à “l’adaptation” à laquelle le logiciel procède avant de configurer la table de partition. Comme vous le voyez ci-dessus les différences restent minimes.

Vérifier le partitionnement du disque dur

Après toutes ces modifs, un

sudo fdisk -l

va nous permettre de vérifier

  • que les modifications ont bien été écrites dans la table de partition
  • qu’elles sont conformes à ce qui était attendu
  • … que le disque dur fonctionne toujours (ouf)
freecom_13

Et maintenant je fais quoi avec ce super disque connecté à mon Raspberry Pi ?

Ben…. rien ! pour l’instant, c’est comme si vous aviez une armoire (la partition) dans laquelle vous avez prévu de ranger vos vis, écrous, rondelles (vos données) …. mais cette armoire ne contient ni étagère, ni boites de rangement, ni étiquettes (le système de fichiers) ! Ça va être un sacré bazar !! Il va donc falloir formater nos partitions avant de les utiliser. Ben oui, je sais sous zindozs vous branchez le disque que vous venez d’acheter chez Carouf et ça marche tout seul… Mais si vous travaillez un jour sur des serveurs, NAS… Il faudra aussi mettre les mains dans le cambouis.

Commençons par formater la partition Linux. Vous avez noté sur la copie d’écran de fdisk qu’elle s’appelle sda2. La commande pour “préparer” la partition à travailler avec Linux est Make File System (mkfs) soit :

sudo   mkfs.ext3   /dev/sda2

freecom_15

Ci-dessus en cours de formatage (en bas : 83/1491).

Ci-dessous : formatage terminé

freecom_16

Passons au formatage de la partition de SWAP : sda1sudo   mkswap   /dev/sda1

freecom_17

Enfin, pour formater la partition FAT32 avec Raspbian, nous avons besoin d’outils non installés d’origine : les dosfstools (DOS File System Tools). Installons les avant de formater la partition sd3. Puis formatons la partition avec mkfs.vfat, avec l’option -n qui permet de nommer le volume.sudo   apt-get   install   dosfstools sudo   mkfs.vfat   -F  32   /dev/sda3   -n   freecomF32

freecom_18

Si on était chez zindozs, pas de souci, une fois branché, votre disque apparaitrait comme un disque D: ou E: et le tour est joué. Mais nous, on s’amuse avec Linux ! Alors c’est différent :

“Comme pour l’utilisateur TOUT EST FICHIER, tous les systèmes de fichiers quels que soient leur emplacement physique doivent être intégrés dans l’UNIQUE arborescence logique du système Linux.
Cette arborescence peut donc être construite (et évoluer) à partir de diverses partitions qui peuvent être situées sur plusieurs disques. Cela réalise une intégration et une abstraction plus poussée que dans le monde Windows où les partitions et lecteurs auxquels sont affectées les lettres A: C: D: … demeurent des entités séparées. Naturellement la partition sur laquelle est situé le répertoire racine joue un rôle particulier.” [source A.C. Créteil]

Nous allons tout simplement “monter” le disque dur dans l’arborescence de notre framboise314, pour qu’il apparaisse comme un répertoire de cette arborescence. La commande qui réalise ce “montage” est la commande … mount.  🙄

Pour que mount puisse fonctionner, il faut un répertoire d’accueil pour monter la partition. J’ai choisi de créer un répertoire /home/pi/freecom qui deviendra le point d’accès à la partition ext3 de mon disque dur Freecom.

sudo   mount   -t   ext3   /dev/sda2   /home/pi/freecom

freecom_19

Si tout se passe bien… pas de message d’erreur, on peut vérifier si l’espace disque /dev/sda2 a bien été “monté” dans /home/pi/freecom.

freecom_20

La commande df indique l’espace disque utilisé et disponible sur le système de fichiers contenant chaque fichier donné en paramètre. Sans paramètre, l’espace disponible sur tous les systèmes de fichiers montés sera affiché (c’est le cas ici)

Une autre façon de voir les choses est de dire que cette commande permet de connaître l’emplacement des partitions utilisables sur votre système et les capacités restantes sur chacune d’elles.

On voit bien que /dev/sda2 a été montée sur /home/pi/freecom, qu’elle n’est occupée qu’à 1%, et comporte 192 243 960 blocs de 1K. (comme le K informatique fait 1024 ! On n’est pas loin du compte).

Pour tester la disponibilité réelle de cet espace nouvellement ajouté, je décide de copier tout ce qu’il y a dans /etc vers cet emplacement

freecom_21

Ma foi… pas de protestation ! Comme toujours en Linux : “Qui ne dit mot consent”, donc si la framboise314 ne vous insulte pas, c’est que tout s’est bien passé !

Pour contrôler que tout s’est vraiment bien passé (pfff vous n’avez vraiment pas confiance !), listez le contenu de /home/pi/freecom, il doit être identique à celui de /etc.

ls   -al   /home/pi/freecom

Rassuré(e) ?

Démontage d’une partition

De la même manière que vous avez dû “monter” la partition pour pouvoir utiliser l’espace disponible, il va falloir la “démonter” avant de débrancher le disque sinon….

Si le démontage de partition ne fonctionne pas, c’est qu’il y a encore un fichier ouvert ou qu’un processus  l’utilise pour son répertoire de travail. Débrancher brutalement le disque externe peut conduire à des pertes de données !

sudo   umount   /dev/sda2

Démontera la partition sda2. Faites de même pour les autres partitions si nécessaire. Aujourd’hui on démonte le répertoire dans lequel la partition est montée :

sudo   umount   /home/pi/freecom

Mais j’ai mes habitudes….

demontage_dd

Montage automatique d’une partition

freecom_23

C’est dans le fichier fstab que ça se passe (File System Table). Ouvrez le fichier avec nano par exemple,sudo    nano    /etc/fstab

et ajoutez la ligne suivante :

/dev/sda2   /home/pi/freecom   ext3   defaults   0   3

Cela montera la partition /dev/sda2, de type ext3 dans le répertoire /home/pi/freecom avec les paramètres par défaut. Le 0 pour dire à dump de ne pas faire de backup de cette partition, le 3 indique l’ordre dans lequel la partition sera vérifiée par fsck.

Test du montage automatique de partition

Dernier test :  Redémarrez le Raspberry Pi et allez vérifier que dans le répertoire /home/pi/freecom vous retrouvez les données que vous y avez copiées. Cela signifie que votre partition s’est montée de façon automatique et qu’il n’y a pas d’erreur dans la ligne que vous avez ajoutée à /etc/fstab.

2 Copie et montage du disque dur

Tout d’abord, si votre disque dur est connecté à votre framboise314, et que vous l’utilisez déjà sous Linux, il va falloir démonter la partition que vous réservez pour en faire un RFS.
Sinon, créez la structure nécessaire au fonctionnement sous Linux. Dans mon cas c’est /dev/sda2 que j’ai réservé à cet usage.

sudo   umount   /dev/sda2

dd_01

Ma partition /dev/sda2 était montée dans /home/pi/freecom, le umount la démonte, ce que confirme le df

Transférer le ROOT FILE SYSTEM

Maintenant nous allons copier le Root File System présent dans /dev/mmcblk0p2, dans la partition ext4 de la carte SD. On pourrait penser utiliser cp,  mais on va se heurter à des problèmes avec les droits. Il vaut mieux utiliser la méthode radicale qui est de copier secteur par secteur avec dd, brutalement, sans se préoccuper du contenu (c’est du Hard Copy !). Je vous rappelle que dd écrase sans espoir de retour les données qui sont dans of… Vérifiez bien (plusieurs fois) que vous avez passé les bons paramètres à la commande dd ! En particulier le nom de la partition de destination.

avertissement

sudo   dd   if=/dev/mmcblk0p2   of=/dev/sda2   bs=512

En clair : copie tout ce qui est dans la carte SD vers la partition sda2 du disque dur, par blocs de 512 octets (bs=block size).

dd_02

Si je remonte la partition d’origine (souvenez vous, elle était formatée en ext3 !) sur /home/pi/freecom : le système proteste… C’est bon signe, puisque dd doit avoir écrasé la partition d’origine (en ext3) par la RFS de la carte SD (en ext4).

dd_02a

Par contre aucun problème pour monter cette partition en précisant le type (-t) ext4. Un ls confirme que les données d’origine (dans mon cas c’était une copie de /etc) ont bien été remplacées par le RFS de la carte SD (on reconnait l’arborescence de base de LINUX).

  1. Pour commencer faites une copie du fichier qui pourra être restaurée le cas échéant

sudo cp /boot/cmdline.txt /boot/cmdline.txt.bak

Il nous reste encore un ou deux détails à régler pour que tout ça fonctionne.

Modification du fichier cmdline.txt

Modifions à présent le fichier cmdline pour indiquer sur quel disque booter.

  1. Pour commencer faites une copie du fichier qui pourra être restaurée le cas échéantsudo cp /boot/cmdline.txt /boot/cmdline.txt.bak

2.   A présent, éditez le fichiersudo nano /boot/cmdline.txt

3.    Recherchez PARTUUID et remplacez l’ID de la carte SD par celui que nous venons de créer pour le SSD

PARTUUID-raspberrypi-change
partuuid-raspberrypi-ssd

4 Enfin terminez en enregistrant la modification avec la combinaison de touches control + x puis Yes.

5 Maintenant, il est temps de rebooter le Rpisudo reboot

6. Effectuez un ping du Raspberry pi pour vérifier qu’il a correctement démarré. Si toutefois, le raspberry pi ne ping pas, c’est qu’il y a une erreur dans la modification du fichier cmdline.txt. Heureusement nous avons effectué une sauvegarde juste avant, il est alors possible de restaurer cette sauvegarde en connectant la carte SD à un PC.

ping-raspberrypi-ssd

7 Après le redémarrage, vérifiez la bonne prise en compte du paramètrage avec la commande suivante.findmnt -n -o SOURCE /

findmnt-result-ssd-raspberrypi

8 A présent, il faut ouvrir le fichier fstabsudo nano /etc/fstab

fstab-raspberrypi4-ssd

9 Nous allons modifier le PARTUUID de la seconde ligne pour pointer vers notre disque SSD, tout simplement en indiquant l’ID du disque SSD que nous avons indiqué dans les premières étapes.

PARTUUID-disk-ssd-raspberrypi4-fstab

10 Maintenant, il est temps de rebooter le Rpi une nouvelle fois.sudo reboot