Raspberry Pi - Utiliser une clé USB pour vos partitions

On le sait tous : les cartes SD ont un nombre d’écritures limitées. En plus le lecteur de carte SD du Raspberry Pi est assez fragile et peut vitre être endommagé. Alors une solution possible, stocker vos partitions sur une clé USB ou un disque externe.

img_3160_usb-logo

Depuis que je fais les tutoriels j’ai du refaire une bonne trentaine de fois ma carte SD et casser 2 adaptateurs pour micro-SD (pourtant je suis en général assez soigneux). Donc coté durée de vie ça doit diminuer assez vite même si y a de la marge !

Je propose aujourd’hui comme exemple de créer sur une clé USB de 8Go une partition de 6Go pour le système de fichiers et 2Go pour gérer les espaces utilisateurs (le /home). Le tout depuis votre Raspberry Pi.

  1. Insérer la clé USB dans votre Raspberry Pi
  2. Déterminer l’identifiant de la clé avec dmesg

    Résultat de dmesg : chez moi la clé est sur /dev/sda

    Résultat de dmesg : chez moi la clé est sur /dev/sdaChez moi la clé est sur /dev/sda

  3. Créer les deux partitions avec fdisk (ou cfdisk si vous voulez une interface minimaliste). Vous pouvez avoir à supprimer les anciennes si c’est nécessaire.
    Nous voici avec une clé USB contenant 2 partitions ext4

    Nous voici avec une clé USB contenant 2 partitions ext4

    N’oubliez pas de sauvegarder ! 🙂

  4. Formater les partitions en ext4 avec mkfs.ext4
    mkfs.ext4 /dev/sda1
    mkfs.ext4 /dev/sda2
  5. Vous pouvez maintenant monter ces partitions :
    mkdir /tmp/usb_root
    mkdir /tmp/usb_home
    mount /dev/sda1 /tmp/usb_root
    mount /dev/sda2 /tmp/usb_home
  6. Maintenant que vous avez vos deux partitions, il faut copier l’ensemble des fichiers de la carte SD vers la partition de 6Go. Pour ça on va passer par l’utilitaire rsync qui va être plus rapide que dd.
    apt-get install rsync
  7. Maintenant nous devons dupliquer la partition principale. Seul problème, cette partition est utilisée et donc susceptible d’être modifiée. On va donc remonter la partition en la liant à la partition principale avec l’option -bind.
    mkdir /tmp/sd_root
    mount --bind / /tmp/sd_root/

    Si maintenant vous regarder le contenu de /tmp/sd_root, vous avez votre partition principale :

    Votre partition principale après la commande mount --bind

    Votre partition principale après la commande mount -bind

  8. Maintenant lançons la copie. Mais il faut exclure les répertoires que l’on ne veut pas dupliquer : /home (ça sera notre seconde partition), /tmp (nous travaillons dedans) et /boot (qui ne servira à rien sur notre clé) :
    cd /
    rsync -avh --exclude 'home/pi' --exclude 'tmp/' --exclude 'boot/' /tmp/sd_root/ /tmp/usb_root/
  9. Si besoin copier le répertoire des utilisateurs vers la partition pour les utilisateurs :
    rsync -avh /home/pi/ /tmp/usb_home/
  10. Changer les partitions à monter lors du démarrage. Ca se passe dans le fichier /etc/fstab. Pour nous ça sera /tmp/usb_root/etc/fstab. Remplacer la ligne :
    /dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

    par

    /dev/sda1  /               ext4    defaults,noatime  0       1
    /dev/sda2  /home          ext4    defaults,noatime  0       1
  11. Dernière étape, modifier la carte SD pour démarrer sur la clé USB. Modifier le fichier /boot/cmdline.txt et remplacer par /dev/sda1. Vous devriez avoir la ligne suivante :
    dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait logo.nologo

Vous pouvez redémarrer la machine et profiter du système sur la clé USB 🙂

Merci à IntraIpsum pour son article sur le sujet

[Update] Pensez à créer les répertoires /boot et /tmp sur la nouvelle partition.

Vous aimerez aussi...

  • goolwen

    Est-ce que cela pourrais marcher sur un montage NAS ?
    Si oui, ne pourrais-t’on avoir le choix entre plusieurs montage pour choisir une distrib’ ou l’autre ?

    • Montage NAS ? Je connais pas. Si par contre tu parles de montage NFS, le tuto est dans les cartons 🙂

  • J’adore ce genre de tuto ! Merci a toi!

  • lalala

    Merci pour le tuto, faut que j’essaye !
    Deux questions bêtes : une fois tout mis sur la clé, on a plus besoin de carte SD n’est-ce pas ? On peut dont l’enlever du Pi ?
    Et pas moyen d’installer les OS directement sur une clé USB plutôt que sur une carte SD ?
    Merci !

    • Tu as toujours besoin de la carte SD au moins pour le démarrage. Il faut donc la laisser dans le lecteur.
      Pour les OS tu peux installer directement. Seulement tu auras alors 2 partitions comme sur une carte SD. Il faudra adapter le fichier cmdline.txt de ta carte SD pour pointer vers la bonne partition sur la clé USB. Et modifier le fichier /etc/fstab de cette partition pour monter correctement la clé.

  • Pierre

    Question idiote: la limitation en nombre de lecture/écriture n’est elle pas la même pour la mémoire flash en général?
    Je ne suis pas expert, mais il me semble en plus que la qualité - relative - des composants de cartes SD sont probablement exactement les mêmes dans les clefs USB récentes (parfois très plates).
    Qu’un disque dur SSD soit de meilleure qualité, sûrement, mais y’a t-il un réel gain de durée de vie entre Clef USB de base et SD???

    Apparement, l’USB est de toutes façons plus rapide sur le Raspberry que la SD…sans compter que ton très bon tuto peut probablement marcher pour une disque dur classique…merci donc!

    • Oui c’est pas faux. Mon intro d’article est un peu pourrie ! 🙂 Pour chez moi l’avantage est surtout de ne plus bouger cette carte SD qui m’a fait des dégats. Merci pour la précision. Je vais adapter l’article 🙂

  • PiR

    Merci pour le tuto, que je vais probablement appliquer au serveur Minecraft dans les prochains jours pour voir si les performances (qui sont déjà plus que satisfaisantes) sont meilleures !

    Par ailleurs, mes compliments pour la refonte du site ! C’est clair, épuré, on a l’impression d’avoir gagné de l’espace par rapport au site précédent et la lecture est beaucoup plus sympa ! Merci aussi d’avoir ajouté des catégories plus précises, c’était à mon avis indispensable pour sortir du cadre du blog pur et simple même si le format « journal » est aussi intéressant pour ce type de bidouilles.

    • Merci !! Content que ca apporte plus qu’un coté esthétique 🙂 ET bonne installation

  • Bonjour, et merci du tuto !

    Est-ce que la méthode fonctionne de la même manière sous Arch Linux ARM (l’apt-get qui s’est glissé dans ton post et le post cité en référence en fin de billet qui porte sur Raspbmc laissent penser que ça marche sous les dérivés de Debian, mais est-ce le cas sous Arch Linux ?).

    Merci d’avance !

    -Thomas

    • Salut. Le principe reste en théorie le même car c’est avant tout du paramètrage sur la carte sd pour utiliser une autre partition. Rsync existe aussi sur ArchLinux je pense.
      Si tu essayes tiens nous au courant 🙂

  • San Migel

    J’ai suivi la procédure, mais quand le Pi boote, il affiche un écran de login infranchissable car l’identifiant et le mot de passe (pi+raspberry !!!) ne sont pas reconnus. J’ai vérifié les droits, j’ai recommencé avec une seule partition pour / et /home : même effet. Par contre, je n’ai pas de problème si je remets root=/dev/mmcblk0p2 dans config.txt.
    Une idée ?

    • Il s’agit bien de la meme distribution qui est installee sur la clé ?
      Si le pi boote c’est que la distrib est bien installee. C’est comme si le user n’etait pas present

  • San Migel

    Effectivement. Pourtant j’ai fait l’installation depuis la même carte SD (wheezy).

    • Essaye de monter la carte sd sur une autre machine et de regarder le contenu dans /etc/passwd et voir si le user pi est bien present

  • Pat

    Bonjour !
    Merci pour le tuto bien fait !!
    J’ai un petit soucis lorsque je redémarre mon raspb il reboot en boucle pourtant j’ai suivis le tuto à la lettre !! il semblerait que le repertoire tmp/usb_root/ « disparaisse » à chaque redémarrage (fichier tmp purgé au boot !) y a t il une solution pour éviter ce problème ? J’essaierais bien de changer l’endroit de création de usb_root (tmp/var/usb_root ?) mais je voudrais pas trop bidouiller sans avis de connaisseurs !!
    Ps je pense que vous aurez remarqué que je ne suis pas un habitué des systèmes linux ah et je suis donc sous raspbmc frodo
    Encore merci

    • Salut,
      Alors pour le /tmp, il est purgé par le système à chaque reboot. C’est le fonctionnement normal d’un système type UNIX.
      Pas de soucis à déplacer le point de montage ailleurs du moment que les différents scripts sont mis à jour.

      • Pat

        Ok je vais faire comme ça
        Merci 🙂

        • Pat

          Bonsoir
          Bon ben ma méconnaissance des systèmes Unix dans toute sa splendeur ! Je n’ai pas réussi à changer les points de montage !! Toujours le reboot en boucle !! je pense que c’est lié aux scripts non mis à jour car je ne sais pas vraiment en quoi cela consiste ! :/

  • Valou

    Super, je viens de transférer la distribution raspbx sur un clef USB, ça marche nickel, juste une petite remarque: pour le dossier /tmp qu’il faut créer sur la clef usb il faut remettre tout les droits ( moi j’ai fait bourrin => chmod 777 /tmp) sinon certaine application comme freepbx ne fonctionne pas ( problème d’acces de MySQL à /var/run/mysqld/mysqld.sock

  • dplamp

    J'ai été préoccupé par usure de carte SD. Alors, J'ai fait la même chose que vous avec une clé USB. Enfin, J'ai laissé tomber il parce qu'il n'y n'avait aucun gain évident. La façon dont je suis allé, est Mont / avec noatime et annuaires les plus écrites (/tmp, /var/tmp, /var/log, /var/spool, /var/cache, etc.) à tmpfs en RAM. D'ailleurs, J'ai écrit un script d'initialisation qui synchronise les données dans tmpfs avec un répertoire de la carte SD au démarrage et d'arrêt.

    Puis, Assurez-vous que logrotate est bien configuré pour votre cas, et don’t oublier d'apt-get clean.

  • Gat Le

    salut possible d avoir une image de clee usb deja faite a flasher direct sur ma clee j ai des erreur tout le tps merci

  • Gat Le

    sinon j arrive pareil que San Migel • il y a 2 ans

    J’ai suivi la procédure, mais quand le Pi boote, il affiche un écran de login infranchissable car l’identifiant et le mot de passe (pi+raspberry !!!) ne sont pas reconnus. J’ai vérifié les droits, j’ai recommencé avec une seule partition pour / et /home : même effet. Par contre, je n’ai pas de problème si je remets root=/dev/mmcblk0p2 dans config.txt.
    Une idée ?

    • « Pensez à créer les répertoires /boot et /tmp sur la nouvelle partition » C’est le cas ? Est-ce que le répertoire /etc de la nouvelle partition sur la clé contient bien des fichiers avec passwd, group, etc. ?

  • Mirelsol

    Merci beaucoup pour ce tutorial très clair et très détaillé. Par contre
    je pense qu’il faut enlever le / lors de la copie des données du /home:

    Donc remplacer rsync -avh /home/pi/ /tmp/usb_home/ par:
    rsync -avh /home/pi /tmp/usb_home/
    Sinon c’est le contenu de /home/pi qui sera copié dans /tmp/usb_home/ et non le répertoire pi

Handpicked links

Mise en cache objet de 2188/2452 objets utilisant disk Mise en cache utilisant disk: enhanced Mise en cache de base de données 8/94 requêtes dans 0.251 secondes utilisant disk Served from: pihomeserver.fr @ 2017-09-19 16:21:19 by W3 Total Cache -->