Je suis toujours dans mes tests. Si vous me suivez, vous savez que depuis quelques temps je ne parle plus programmation, mais uniquement d’auto-hébergement. Ça va revenir, le temps de réussir à mettre en place tout ce que je souhaite.
Comme j’ai acheté un Raspberry, je souhaite balancer tout ce que j’ai en ligne dessus. Mais déjà pour la place, la carte SD c’est pas génial, alors niveau fiabilité, c’est encore pire. C’est pour ça que j’ai voulu mettre Yunohost sur un disque externe.

Le but de cet article est de laisser le minimum sur la carte SD (le boot, soit 63Mo environ), qui n’est utilisé qu’en lecture sauf cas de mise à jour de Debian. Tout le reste passera sur un disque externe branché en USB.
Nous créerons en même temps une partition swap sur le DD, et supprimerons le swap de la carte SD, toujours pour éviter des écritures dessus et essayer ainsi de prolonger sa vie 🙂

Les manipulations décrites ici sont également valables sur un Raspian, aucune n’est spécifique à Yunohost.

Prérequis

Ben il faut pas grand chose : Un Raspberry avec sa carte SD, Yunohost installé dessus (qui fonctionne, c’est toujours mieux), et un disque dur USB.
Pour ma part, j’ai pris un Maxtor de 1 To en 3,5 pouces, ce qui comblera largement mes besoins.

Préparation du disque dur

Prenez un disque dur USB, branchez le sur un système UNIX et créez 2 partitions :

– Une partition en EXT4 de la place que vous voulez
– Une seconde partition de 1Go en SWAP.

Je ne détaille pas ici, mais perso je le fais si possible en mode graphique avec Gparted :

yunohost-externe-gparted

Puis branchez le sur le Raspberry, connectez vous en SSH dessus, en root.
Lancez la commande suivante : fdisk -l

4 partitions :

– /dev/mmcblk0p1 : Partition de boot de 63Mo sur la carte SD, qui ne sera pas touchée
– /dev/mmcblk0p2 : Partition root, sur laquelle est installée Debian et Yunohost
– /dev/sda1 : Partition de mon disque dur (930Go), où je souhaite transférer Yunohost
– /dev/sda2 : Partition Swap

Si ce n’est pas les mêmes, notez bien les noms des partitions, afin de ne pas vous perdre ou planter tout le bordel 😉

Copie des fichiers

A présent, nous allons copier l’intégralité de la partition sur laquelle est installée Yunohost sur la partition du disque externe :

Notez que l’on utilise la commande dd, et pas cp, bien plus appropriée lorsqu’on traite de systèmes de fichiers.

La copie peut être très longue selon la capacité de la carte SD, même si celle-ci est vide.
Pour ma carte de 32Go dont 2 utilisés, il a fallut plus de 30 minutes au Pi pour copier la partition :

Une fois l’opération terminée, il est souhaitable de vérifier le système de fichiers et, si besoin, corriger les éventuelles erreurs :

S’il y a des erreurs, corrigez-les en appuyant sur ‘y’ :

Étendre le système de fichiers

À ce moment précis, si vous relancez fdisk, vous verrez que la partition sur laquelle nous avons copié Yunohost semble occuper l’espace alloué au partitionnement initial.
Mais souvenez-vous, nous avons utilisé la commande dd, et celle-ci copie également la taille du système de fichiers. En fait, celui-ci fait la taille de la carte SD.

Pour agrandir le système de fichiers au maximum dans la partition, nous allons utiliser la commande resize2fs sur la partition fraîchement copiée :

Options du boot

Il existe sur Linux la possibilité de passer des options pendant le boot, au moyen du fichier /boot/cmdline.txt.
À ma connaissance, il n’est pas très utilisé par les OS Linux (Ubuntu etc). On trouve d’ailleurs peu de ressources francophones dessus.
Mais le Raspberry s’en sert pour définir l’emplacement du système de fichiers root, la partition boot n’étant pas située au même endroit.

Avant de le modifier, nous allons en effectuer une copie, qui nous sera utile si le système ne redémarre pas comme prévu :

Puis on va modifier le fichier original :

Cherchez l’option :

Et remplacez la par :

sda1 étant la partition destinée à recevoir Yunohost sur le disque externe.

Sauvegardez (Ctrl + O, Enter) puis quittez nano (Ctrl + X).

Montage des partitions

À présent, nous allons modifier le point de montage des différentes partitions, à l’aide du fichier /etc/fstab.
Mais souvenez-vous, vous êtes encore montés sur la carte SD, et le prochain démarrage doit se faire sur le disque dur. Il faut donc modifier le fichier /etc/fstab du disque externe, et non pas celui de la carte SD.

Commençons donc par monter le disque externe :

Le point de montage n’est pas très important puisque temporaire. Nous l’utiliserons uniquement pour modifier le fstab :

Là encore, modifiez /dev/mmcblk0p2 par /dev/sda1

Puis nous allons y indiquer la partition swap. En bas du fichier, passez une ligne et entrez-y ceci :

Le contenu du fichier complet doit être semblable à cela :

Enregistrez et quittez.

Swap de la carte SD

J’en ai parlé plus haut, le Raspberry possède une zone swap de 100Mo sur la carte SD. Celle-ci, si elle est utilisée, risque d’endommager rapidement la carte à cause des nombreuses écritures dessus.
De plus, comme nous avons configuré un swap de 1Go sur le disque externe, cette swap ne nous sert désormais à rien. Alors autant ne plus l’utiliser :

Redémarrage

Le système devrait à présent être prêt à redémarrer sur le disque externe, hormis la partition /boot.
Nous allons donc nous assurer que toutes les opérations effectuées seront bien écrites sur le disque, à l’aide de la commande sync, puis redémarrer le Pi :

À présent, la carte SD est utilisée seulement en lecture pour le boot, puis le disque externe prend le relais.

Help !

Si votre Pi ne redémarre plus, pas de panique.
Souvenez-vous, vous avez fait une sauvegarde du cmdline.txt. Il suffit donc de récupérer la carte SD du Raspberry, la mettre dans un PC.
Puis supprimez le fichier cmdline.txt présent dans la partition /boot, et renommez le fichier cmdline_old.txt en cmdline.txt, et relancez le Pi (n’oubliez pas de mettre la SD 😉 ).