Raspberry : Yunohost sur un disque externe

Yunohost sur un disque externe

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 :

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

fdisk -l
Disk /dev/mmcblk0: 29.5 GiB, 31614566400 bytes, 61747200 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: 0x34edcb80

Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 * 8192 137215 129024 63M c W95 FAT32 (LBA)
/dev/mmcblk0p2 137216 61747199 61609984 29.4G 83 Linux

Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 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: 0xf47cfc3f

Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 1951426559 1951424512 930.5G 83 Linux
/dev/sda2 1951426560 1953523711 2097152 1G 82 Linux swap / Solari

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 :

dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=32M conv=noerror,sync

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 :

31544311808 bytes (32 GB) copied, 1476.35 s, 21.4 MB/s

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 :

e2fsck -f /dev/sda1

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

Free blocks count wrong (7096623, counted=7096541).
Fix<y>? yes
Free inodes count wrong (1848111, counted=1848095).
Fix<y>? yes

/dev/sda1: ***** FILE SYSTEM WAS MODIFIED *****

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

resize2fs /dev/sda1

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 :

cp /boot/cmdline.txt /boot/cmdline_old.txt

Puis on va modifier le fichier original :

nano /boot/cmdline.txt

Cherchez l’option :

root=/dev/mmcblk0p2

Et remplacez la par :

root=/dev/sda1

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 :

mount /dev/sda1 /mnt

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

nano /mnt/etc/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 :

/dev/sda2       none            swap    sw                0       0

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

proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/sda1       /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

/dev/sda2       none            swap    sw                0       0

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 :

rm /etc/rc2.d/S02dphys-swapfile

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 :

sync
reboot

À 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 ).

L’article Raspberry : Yunohost sur un disque externe est apparu en premier sur Max-Koder.

Vus : 4685
Publié par Max Koder : 16