:::: MENU ::::

Déporter le système de fichier sur un disque dur USB

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.

A propos de l'auteur :

Ingénieur .NET chez Econocom, diplômé Manager des Systèmes d'Information par l'Exia.Cesi. Je m'intéresse au Raspberry Pi depuis sa sortie et travaille avec depuis une expérience "Raspbienne" en entreprise. Je développe sur ce micro-ordinateur essentiellement pour des projets personnels en utilisation standard ou embarquée.


12 Comments

  • Répondre Nicolas |

    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

  • Répondre Romain |

    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!

  • Répondre Ghislain |

    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 ?

    • Répondre Vincent |

      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

      • Répondre Ghislain |

        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

  • Répondre Philippe |

    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

    • Répondre Vincent |

      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

      • Répondre Philippe |

        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

  • Répondre Vangeles |

    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

Laissez un commentaire