Le Raspberry Pi fonctionne et stocke ses données grâce à une carte SD. C’est pratique, ça se monte et démonte facilement, on peut aisément changer de carte pour utiliser son Raspberry avec une autre distribution.
Le seul problème dans ce beau monde, c’est lorsqu’on souhaite faire tourner son RPi 24/24h.
Effectivement, les cartes ont des débits et temps d’accès intéressants, mais elles ne sont pas vraiment faite pour ce type d’utilisation. Un système d’exploitation, ça lit et écrit constamment sur son support. De plus, le Raspberry n’a pas énormément de RAM, donc un fichier de Swap est également présent sur la carte SD. Imaginez un peu ce que subit votre pauvre carte…
Pour remédier à ça, nous allons vous proposer de faire fonctionner votre Raspberry Pi grâce à un disque dur branché en USB.
La table de partition
Lancez votre RPi sans le disque dur que nous allons installer.
Commençons par lister les partitions disponibles :
sudo fdisk -l
Vous devriez voir quelque chose comme ceci :
/dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA) /dev/mmcblk0p2 122880 7710719 3793920 83 Linux
Ces deux lignes sont respectivement :
- le secteur de boot
- le système de fichier à proprement parlé (celui que nous souhaitons déplacer)
Branchez maintenant votre disque dur USB.
ATTENTION : Si votre disque dur est alimenté par le port USB, il est possible de votre RPi ne fournisse pas assez d’électricité. Si lorsque vous branchez votre disque dur le RPi reboot, alors l’alimentation est trop faible et vous risqueriez d’endommager votre disque dur à force de l’utiliser sous-alimenté. L’utilisation d’un hub USB alimenté est alors obligatoire.
Re-listez les partitions disponibles. Vous devriez voir le même genre de résultats avec quelques lignes supplémentaires :
FriZBy@code4pi / $ sudo fdisk -l Disk /dev/mmcblk0: 3947 MB, 3947888640 bytes 4 heads, 16 sectors/track, 120480 cylinders, total 7710720 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 Disk identifier: 0x0002c262 Device Boot Start End Blocks Id System /dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA) /dev/mmcblk0p2 122880 7710719 3793920 83 Linux Disk /dev/sda: 60.0 GB, 60022480896 bytes 64 heads, 32 sectors/track, 57241 cylinders, total 117231408 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 Disk identifier: 0xbcd5d39b Device Boot Start End Blocks Id System /dev/sda1 2048 115345407 57671680 83 Linux /dev/sda2 115345408 117231407 943000 83 Linux
Comme vous pouvez le voir, un disque « sda » est apparu. Les partitions (que vous pouvez voir sur les 2 dernières lignes du code ci-dessus) correspondent au partitionnement de MON disque dur. Si le votre possède 5 partitions, le schéma ne sera pas le même.
Nous allons maintenant modifier la table de partitionnement de votre disque dur :
sudo fdisk /dev/sda
Supprimez toutes les partitions en entrant « d« .
Vérifiez que vous ayez bien supprimé toutes les partitions en entrant « p« .
Command (m for help): p Disk /dev/sdb: 7743 MB, 7743995904 bytes 255 heads, 63 sectors/track, 941 cylinders, total 15124992 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 Disk identifier: 0x00000000 Device Boot Start End Blocks Id System
Maintenant que votre table est vide, nous allons créer les partitions pour votre RPi.
J’ai choisi d’utiliser le schéma suivant :
- Une partition root qui contiendra le système de fichier qui remplira presque entièrement le disque
- Une plus petite partition qui servira de zone de swap
Entrez « n » pour ajouter un partition, sélectionnez le type de partition (primaire : p ou étendue : e). Dans notre cas, nous allons faire une partition primaire, entrez donc « p« . Choisissez enfin le numéro de la partition, entrez donc « 1« .
Laissez maintenant le premier secteur par défaut, faites juste « Entrée », pour ce qui est du secteur de fin, entrez la taille que vous souhaitez (n’oubliez pas de laisser de la place sur le disque pour la partition de Swap, j’utilise personnellement 1Go) : « +62G » pour allouer environs 62Go sur un disque de 64Go.
Pour faire la partition de swap, il faut refaire les mêmes manipulations :
- « n » pour créer la partition
- « p » pour créer un partition primaire
- « 2 » pour lui attribuer la 2ème partition
- Appuyez juste sur « Entrée » pour sélectionner le secteur de début par défaut
- Appuyez sur « Entrée » pour que la partition s’étende sur la place restante
Appuyez sur « p » pour vérifier la table de partition du disque. Si cela correspond avec ce que vous souhaitiez, appuyez sur « w » pour inscrire les changements dans la table de partition et quitter.
Formatons !
Notre disque dur a maintenant une belle table de partition. On va donc formater ces partitions pour pouvoir les utiliser.
Commençons par formater la partition principale :
sudo mkfs.ext4 /dev/sda1
Ceci peut prendre un peu de temps suivant la taille de votre partition et du type de disque dur.
Maintenant initialisons la partition de swap :
sudo mkswap /dev/sda2
Et voilà, vos partitions sont prêtes ! Ce n’est pas l’étape la plus compliquée me diriez vous, mais ce n’est pas fini.
Finalisation
On va maintenant copier les données de la carte SD vers le disque dur, cette étape peut être un peu longue.
sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=32M conv=noerror,sync
C’est fini ? Ah, cool, continuons alors !
Vérifiez le système de fichier pour corriger les éventuelles erreurs, Faites « o » s’il y en a :
sudo e2fsck -f /dev/sda1
On va maintenant agrandir le système de fichier pour qu’il remplisse la partition que nous lui avons préparé :
sudo resize2fs /dev/sda1
Maintenant, il faut modifier les configurations au démarrage pour que le RPi boot sur le disque dur.
Commencez par faire une copie du fichier que nous allons modifier (en cas de mauvaise manipulation).
sudo cp /boot/cmdline.txt /boot/cmdline.bak sudo nano /boot/cmdline.txt
Dans le fichier, remplacez la séquence « /dev/mmcblk0p2 » par « /dev/sda1« .
Sauvegardez et fermez le fichier.
Nous allons maintenant modifier le fichier de configuration de montage des systèmes de fichier sur notre nouveau disque. Commencez par monter la partition :
sudo mount /dev/sda1 /mnt sudo nano /mnt/etc/fstab
Comme pour le fichier précédent, remplacez la séquence « /dev/mmcblk0p2 » par « /dev/sda1« .
Et ajoutez en dessous cette ligne qui permet d’activer la zone de swap :
/dev/sda2 none swap sw 0 0
Pour finir (et oui !) nous allons stopper l’utilisation du fichier de swap (étant donné que nous avons créé une partition exprès pour ça), terminer les modifications sur le disque et redémarrer.
sudo rm /etc/rc2.d/S02dphys-swapfile sudo sync sudo reboot
Voilà ! Votre Raspberry devrait maintenant fonctionner sur le disque dur. S’il ne fonctionne pas, insérez votre carte SD dans un ordinateur, et copier « /boot/cmdline.bak » pour remplacer « /boot/cmdlin.txt« .
Après ça, votre Raspberry redémarrera sur la carte SD, vous pourrez alors recommencer ces manipulations. La carte SD reste cependant nécessaire pour effectuer le boot sur le disque dur, impossible de démarrer notre RPi sans aucune carte SD.
Merci pour ton article qui m’a bien aidé !
Je vais enfin pouvoir effectuer plus de chose sur mon raspberry.
Il ne me reste plus que la caméra et l’écran à config
clair simple efficace… bravo pour ton article !
Merci pour cette article!
Toutefois, j’ai un soucis, lors du partitionnement de la première section, celui ci ne me laisse pas prendre 1998G sur un disque de 2To. J’ai du inversé les 2 partitions…
Une idée de l’origine du soucis?
Merci!
Tres beau travail 😉
Une question me vient (je suis en train de bosser la dessus) j’ai un dd avec 2 partitons ext4 (FileSystem et Données) quand je fait le « dd » tout ce copie bien mais apres… je me retrouve avec une Erreur Superblock…. j’ai trouver pas mal de truc mais IMPOSSIBLE de remettre la premiere partition en place (2eme partition ext4 OK)
Aurait tu une idée a tout hasard ?
Bonsoir Ghislain,
Merci pour votre commentaire 🙂
Pour votre « bad SuperBlock ». J’ai déjà eu un problème similaire il y a quelques temps lorsque je souhaitais changer de carte SD pour un RPi. Le changement de carte s’est bien passé, mais lorsque j’ai voulu agrandir une partition, c’est là que ça s’est compliqué.
J’ai cherché à résoudre le problème sur une machine Debian, il y a des outils système qui aident à régler ce genre de soucis, mais sans succès dans mon cas malheureusement. J’ai abandonné l’idée de réparer mon image raspbian après quelques jours.
Je ne peux que vous encourager à chercher « bad superblock repair » et à essayer différentes solutions. Les communautés Debian et Ubuntu vous seront d’une grande aide et sont de bonnes sources d’informations pour tout problèmes.
Désolé de ne pas pouvoir vous guider plus précisément, et je vous souhaite bon courage !
FriZBy
Merci de la réponse rapide.
J’ai pour l’instant abandonné l’idée et je passe par rsync. J’avais hate de tout mettre en place sur la bestiole donc au moins comme sa sa tourne mais si je trouve la solution un jour pas de souci
Bonjour,
merci pour ce tuto. je n’ai pas encore essayé, mais mon disque de WD de 314Go acheté le 3/14 pour 31,42$ après une réduction de 31,4% (et non, ce n’est pas une blague) devrait bientôt arriver.
par contre est-il possible de faire cela avec un disque ssd, car un disque mécanique sur un système embarqué ce n’est pas forcément top.
merci d’avance et encore bravo.
cordialement
Philippe
Bonjour !
Merci pour votre retour, hâte d’avoir de vos nouvelles lorsque vous aurez fait le transfert de votre support de stockage 🙂
Concernant le SSD, oui c’est tout à fait possible, et la manipulation reste la même, cependant, c’est un petit peu dommage de perdre les performances du disque SSD à cause des ports USB. Mais c’est vrai que si vos Raspberry et support de stockage sont amené à bouger et subir des « chocs » sous tension, le SSD craint beaucoup moins qu’un HDD classique.
Je pense avoir répondu à votre question.
A bientôt sur notre site je l’espère 🙂
FriZBy
merci pour votre réponse. le disque devrait arriver bientôt 🙂
mon soucis vis-à-vis du ssd était le support des pilotes, et le prix bien-sûr mais cela baisse.
bonne journée
Philippe
Bonjour,
Bientôt 7 ans après, la procédure marche toujours. Seules quelques précautions et modifications sont à prendre en compte.
1/ il faut absolument que la clé USB soit au moins égale en taille à la partition rootfs, même si elle est à 90% vide; sinon la copie par commande dd sort en erreur, la copie étant en copie de secteurs et non de données
2/ ATTENTION: il semblerait que dans le fstab il faille mettre le PARTUUID et non pas/plus la device. Pour récupérer le PARTUUID, taper la commande « sudo blkid »
Ce que j’ai fait de cette procédure ?
– récupération d’un vieux RPI2
– installation de Raspberry Pi OS version lite sur carte SD
– boot, configuration (réseau, clavier…)
– application de la procédure
– vérification que la clé USB est bien utilisée (en la montant sur un autre PC)
– création d’une partition boot sur une carte SD de 1Go (pour pas gâcher) et copie de la partition boot d’origine. Attention là, bien noter le PARTUUID pour modifier le fstab car là aussi il est demandé.
– vérification, et ça marche.
Merci