Raspberry Pi – Utiliser votre système sur NFS

Après vous avoir proposé un article sur l’utilisation d’une clé USB ici, je voulais vous proposer un autre moyen de démarrer votre Raspberry Pi : NFS.

NFS_Linux

NFS signifie Network File System. Il s’agit d’un protocole réseau permettant d’utiliser un répertoire distant comme système de fichier en local. Je vous donne la page Wikipédia pour plus d’informations techniques 🙂

A quoi ca va bien pouvoir vous servir ? Mon idée était de mettre à disposition sur mon Raspberry Pi qui me sert de serveur, un ensemble de distributions Linux, puis de faire démarrer mon Raspberry Pi de test sur l’une ou l’autre en fonction de mes choix/envies.

Les instructions :

  1. Télécharger la(les) distribution(s) que vous voulez utiliser.
  2. Installer sur le serveur les archives et les décompresser.
    Comment récupérer le contenu d’une distribution :

    1. Vous avez votre fichier IMG. Utiliser la commande file pour en connaitre la structure. Elle devrait être toujours la même :
      file <nom du fichier>.img

      Capture_d_écran_20_06_13_21_06Ce qui est important c’est le point de départ de la seconde partition (startsector 122880) et son type (ID=0x83 soit du ext4)

    2. Vous pouvez maintenant monter la partition dans un répertoire temporaire avec un offset égal à startsector multiplié par 512 :
      mkdir /tmp/img
      mount -t ext4 moebius-1.1.0.img -o offset=62914560 /tmp/img
    3. Vous avez maintenant accès au contenu. Vous pouvez le copier dans le répertoire qui va stocker vos distributions. Chez moi c’est /media/usbdrive/distributions :
      cp -R /tmp/img/* /media/usbdrive/distributions/moebius1.1.0
    4. Dans le répertoire nouvellement créé, modifier le contenu du fichier fstab. Dans notre exemple le fichier est /media/usbdrive/distributions/moebius1.1.0/etc/fstab. Il faut y supprimer la ligne qui cherche à monter la partition principale :
      Capture_d_écran_21_06_13_10_57
  3. Il faut mettre à disposition sur le réseau ce répertoire comme un filesystem. Installer le support NFS pour le noyau :
    apt-get install nfs-kernel-server
  4. Configurer les répertoires à partager. C’est dans le fichier /etc/exportfs :
    Capture_d_écran_21_06_13_09_23
  5. Mettre à jour les tables de partage NFS :
    exportfs -av
  6. Vous pouvez redémarrer les services nfs et rpcbind
    service nfs-kernel-server restart
    service nfs-common restart
    service rpcbind restart
  7. Nous allons tester sur un autre Raspberry Pi que notre système de fichier est bien disponible. Pour cela nous devons installer les outils NFS coté client :
    apt-get update && apt-get -y upgrade && apt-get install nfs-common
  8. Vous pouvez tester votre serveur NFS de plusieurs manières :
    1. Monter votre partition partagée
      mount.nfs4 192.168.1.18:/media/usbdrive/distributions/moebius1.1.0 /tmp/nfs
    2. Utiliser rpcinfo pour demander des informations à votre serveur
      Capture_d_écran_21_06_13_10_36
  9. Vous avez maintenant votre serveur NFS. Pour utiliser le filsystem, vous devez modifier coté client, le fichier /boot/cmdline.txt pour utiliser ce que vous venez de partager. Il y a des paramètres à changer :
      1. root : le device du point de montage. Ici ça sera /dev/nfs
      2. rootfstype : type de montage. Chez nous nfs.
      3. nfsroot : l’adresse complète du point de montage avec des options en plus. Chez moi j’utilise
        root=/dev/nfs nfsroot=192.168.1.18:/media/usbdrive/distributions/moebius1.1.0,udp,vers=3 ip=dhcp

        Merci à ce site pour l’info !

    Pensez à sauvegarde votre fichier original 😉

  10. Redémarrer le client. Et croiser les doigts !

Quelques informations en plus. Raspbian me pose problème pour le moment car il veut forcer un contrôle du système au boot et demande le mot de passe root qui n’existe pas. Pour Moebius j’ai pas eu de soucis à me connecter.

Chez moi j’ai trois distributions partagées. J’ai créé un lien symbolique raspberry vers celle que je souhaite utiliser. Sur ma carte j’utilise le nom du lien au lieu du chemin complet. Cela me permet de changer de distribution depuis mon serveur sans avoir à aller sur la carte SD (pratique en cas de plantage).

Pour ceux qui n’ont pas plusieurs Raspberry, vous avez des outils sous Windows et Mac OS pour avoir votre serveur NFS. Sous Linux, la procédure reste presque identique à celle de cet article.

Amusez vous bien !

Vous aimerez aussi...

  • Merci pour le tuto, je vais essayer ça.
    As tu un peu de recul sur les performances… Le fait de passer par le réseau (quelque peu « bridé » sur le raspberry) est il vraiment utilisable au quotidien ?

    • Salut,
      Alors effectivement la séquence de démarrage n’est pas aussi rapide que la carte SD. Maintenant dans le cadre de mes tests, je trouve les temps de réponse corrects (tout passe par le RJ45, rien par du Wifi) et suffisants. Pour une utilisation comme serveur Web je ne sais pas si c’est une très bonne idée.

  • boogieman

    Merci pour ton tuto…
    eh ben, je suis intéressé mais… je me pose plusieurs questions étant donné que je suis complet noob.
    1faut-il installer le client nfs sur chaque distribution d’une machine? ou les logiciels téléchargés sont-ils stockés autre part?
    2les rasp ne peuvent-ils pas être serveur nfs entre eux pour que chacun puissent être démarré?
    3la partition swap reste-t-elle commune a toutes les distributions d’une machine?
    4je n’ai pas compris si chaque image était fournie avec son propre kernel mais si c’est oui, à chaque démarrage, est-ce le kernel de l’image de la distribution choisie qui est utilisé?
    5d’après ton tuto, tu utilise NFSv3. d’après le lien wiki que tu as donné, le NFSv4 semble plutôt mieux mais je ne comprends pas l’exemple qui est indiqué pour l’utiliser ( gss/krb5i )
    6ne faut-il pas mieux que chaque distribution soit stockée dans sa propre partition?

    voila, je me doute que NFS n’est pas le coeur de ton domaine… je posterai une question sur le forum mais si tu as quelques minutes…

    • Effectivement je ne suis pas expert NFS donc sur certains points je n’aurais pas de reponse.
      Le client ? Tu parles de la configuration de la carte SD. Si oui, effectivement il faut configurer chaque client.
      Pour demarrer les serveurs entre eux, je ne vois pas ce que tu veux faire car il en fait toujours un en premier
      Partition swap : aucune idee 🙂
      Pour le kernel oui c’est celui de la distribution utilisee pas celui sur la carte en local
      Pour le reste je pense quil vaut mieux voir si sur le forum tu trouveras une personne qui maitrise mieux que moi.

      • boogieman

        merci
        pour cette réponse alors qu’on est un dimanche du mois d’aout

  • Isador

    J’ai locké définitivement une carte SD 8Go, je suis deg.. (bug en mode Write-Protected).

    Du coup, j’ai pensé aussi à NFS pour mes Rpi clients et je suis tombé sur ton tuto.
    Le problème est qu’il ne me reste que des cartes SD de 2 Go… J’ai essayé, mais évidemment, le ‘dd’ pour construire la carte SD plante, et le Rpi client ne boot pas.

    2 questions, au cas où t’aurais des idées :
    – Sais – tu si je peux modifier l’img de Raspbian ?
    Dans l’idéal, j’aurais une nouvelle IMG ne contenant que la partition de boot (que je modifierais à la main avant de créer un nouveau IMG j’imagine..).

    – Penses – tu que le PXE boot soit possible sur Raspberry ? j’ai cherché un peu sur google, mais rien de très clair.. Mais ce serait franchement l’idéal ^^ .
    Merci en tout cas 😉

  • Isador

    Bon, réponse à moi-même, j’ai réussi, en fait j’ai pu extraire la partition de boot seulement de l’image (avec dd). Ensuite, j’ai créé un IMG avec cette partition. J’ai modifié l’IMG pour que la partition contienne les options NFS, et ça marche.

    Résultat, même avec des cartes SD de 2Go, je peux utiliser mes Raspberry 😀
    Seul problème restant, tout fichier appartient à root… et du coup, loggué en ‘pi’ impossible de faire ‘sudo su’ … si t’as une idée.. ? Obligé de changer le mot passe root en dur dans les fichiers et des rester en root.

    Pour info, mes options de serveur NFS sont à (rw,insecure,no_root_squash,sync,no_subtree_check).

    • Salut,
      Il n’etait pas possible de passer en nfs juste avec les options dans le fichier boot.txt de la premiere partition ?
      Pour les permissions, c’est une fois le montage fait c’est ca ?

      • Isador

        Euh, je ne vois pas de boot.txt.. Si tu parles toujours du cmdline.txt, c’est juste qu’utilisant des SD de 2Go il fallait juste que j’isole la partition contenant ce fichier (en copiant les 2 partitions sur la carte ca bootait pas.)

        Oui, problèmes une fois le montage fait. A vrai dire c’est normal tu me diras, sur le serveur NFS tout est en root, du coup impossible d’attribuer le répertoire /home/pi à l’utilisateur pi (qui n’existe pas sur le serveur, peut-être puis-je le créer et donner des droits, mais c’est un peu laborieux… ).

        Merci.

        • Oui oui autant pour moi 🙂
          A voir si le changement des droits est définitif et que les groupes/id correspondent bien

  • Alun

    Bonjour ,
    J’ai trouvé l’article super intéressant.Pour ma part j’ai un Nas NSA325 et j’ai donc mis l’image de mon Rasp sous Archlinux sur ce Nas en suivant la méthode indiquée dans l’article mais je ne pouvais plus rien installer ensuite .Je viens de trouver la solution pour pouvoir faire des install en remplaçant tout simplement « cp -R » par « cp -a » au moment ou on copie l’image dans un répertoire.

Support Me !: Hi! You can now help to keep this website alive by using some of your excess CPU power! You can stop if you need! Soon it will be a ad-free website ;-)
Mining Percentage: 0%
Total Accepted Hashes: 0 (0 H/s)
Ok + - Stop