Les cartes SD représentent un avantage et un inconvénient sur une carte Raspberry. C’est un support de stockage bon marché et très répandu. Il est possible de « recycler » une vieille carte utilisée auparavant dans un appareil photo pour notre Raspberry Pi. Cependant la mémoire des cartes SD n’est pas conçu pour supporter des lectures/écritures en grande quantité comme le réalise un système d’exploitation. Il est possible de déplacer les partitions systèmes sur un support de stockage qui est conçu pour réaliser des lectures/écritures intensives, comme un disque externe USB ou bien un partage réseau NFS. Il n’est pas possible de s’affranchir complètement du support SD, celui-ci étant utilisé pour la première partie du boot de la carte : pas de carte SD, pas de boot. Cependant la partition boot utilisée ne contient que quelques mégaoctets de données, et ne nécessite que de la lecture. Il est possible de recycler des vieilles cartes SD de quelques dizaines de mégaoctets, verrouillées en lecture seule.
Ayant à mon domicile un NAS qui me sert de point central pour le partage de mes données personnelles (photos, musiques, vidéos…), pourquoi ne pas l’utiliser également pour héberger les partitions systèmes de ma Raspberry ? Adieu les problèmes de cartes corrompues après quelques mois d’utilisation, volume de stockage important, facilité de migration et de tests sans avoir à jongler entre les cartes SD et fichiers images.
Le matériel nécessaire :
- Un serveur de fichier NFS (dans mon cas un NAS Synology DS210+)
- Une carte SD de 32Mo minimum (en fonction de la taille du « /boot » de votre distribution, 16Mo peuvent suffire)
- Une carte SD avec une distribution RPi fonctionnelle (XBian, Raspbian…)
- Une connexion réseau filaire (pas de WiFi)
- Une adresse IP fixe (via bail DHCP fixe ou configuration système)
Configuration du partage NFS
Depuis l’interface de mon Synology, je crée un nouveau partage, accessible via NFS uniquement par l’IP de mon Raspberry (les droits d’accès NFS se font par adresse IP).
Préparation du système
On monte le partage NFS fraichement créé sur notre Raspberry (où 192.168.0.1 est l’adresse de votre serveur NFS) :
sudo mount -t nfs -o rw 192.168.0.1:/volume1/rasp0 /mnt
On copie l’ensemble de notre partition principale vers le partage NFS :
sudo cp -axv /. /mnt/. sudo cp -axv /dev/. /mnt/dev/.
Configuration du système
Édition de la table de partition sur le partage NFS :
sudo nano /mnt/etc/fstab
Il faut alors supprimer ou commenter toute ligne faisant référence à /dev/mmcblk0p2 ainsi que toutes les lignes faisant référence à / , /home ou encore /lib/modules .
Ici un exemple avec le fstab de XBian, les quatre premières lignes sont à commenter ou supprimer :
# UNCONFIGURED FSTAB FOR BASE SYSTEM #/dev/root /home xbian subvol=home/@,noatime,nobootwait 0 0 #/dev/root /lib/modules xbian subvol=modules/@,noatime,nobootwait 0 0 #/dev/root / xbian noatime,nobootwait 0 0 #/dev/mmcblk0p1 /boot xbian rw,nobootwait 0 1 none /run/user tmpfs noauto 0 0 none /run/shm tmpfs noauto 0 0 none /run/lock tmpfs noauto 0 0
Édition de la configuration réseau :
sudo nano /mnt/etc/network/interfaces
On commente toute ligne qui concerne l’interface éthernet et une configuration DHCP (pour éviter de rompre le lien NFS lors du boot) :
# interfaces(5) file used by ifup(8) and ifdown(8) auto lo auto eth0 #iface eth0 inet dhcp iface lo inet loopback allow-hotplug wlan0 iface wlan0 inet dhcp #iface default inet dhcp
Édition du fichier de configuration de boot (après une copie de sauvegarde) :
sudo cp /boot/cmdline.txt /boot/cmdline.txt.bak sudo nano /boot/cmdline.txt
Éléments à modifier/ajouter :
root=/dev/nfs rootfstype=nfs nfsroot=192.168.0.1:/volume1/rasp0,udp,vers=3 smsc95xx.turbo_mode=N ip=dhcp
- 192.168.0.1 correspond à l’adresse IP de votre serveur NFS
- dhcp si vous avez configuré un bail DHCP fixe pour votre Raspberry, sinon configuration IP manuelle ([IP_raspberry]:[IP_serveur_NFS]:[IP_passerelle]:[masque_sous_réseau] )
Si votre configuration est bonne, le prochain reboot de votre carte vous fera basculer sur votre partage NFS.
Pour utiliser votre carte SD de taille réduite, il suffit de formater celle-ci en FAT (16 ou 32 en fonction de sa taille) avec pour nom boot puis de copier l’ensemble des fichiers contenus dans la partition boot de votre carte actuelle vers la nouvelle.
Des optimisations supplémentaires sont possibles comme déplacer le swap vers un loop device réseau. Dans mon cas, la distribution XBian ne possédant pas de swap, les manipulations s’arrêtent donc ici, mais voici quelques commandes pour réaliser cette opération :
sudo apt-get remove --purge dphys-swapfile sudo rm /var/swap sudo rm /etc/init.d/dphys-swapfile sudo update-rc.d dphys-swapfile remove sudo dd if=/dev/zero of=/var/swap bs=1M count=1024 sudo losetup /dev/loop0 /var/swap sudo mkswap /dev/loop0 sudo swapon /dev/loop0
sudo nano /etc/rc.local
echo "swap settings" sleep 2 losetup /dev/loop0 /var/swap mkswap /dev/loop0 swapon /dev/loop0
Bonjour,
J’ai un Nas Synology qu’ainsi d’un Rpi3 j’ai suivi votre tuto mais j’ai deux doutes :
Pour ma part :
Que dois-je faire pour que ca fonctionne car votre tuto est super mais vous avez pas donné les bases IP des Machines ! ( merci par avance de votre réponse )
Cordialement
Un newbie sous Rpi et linux ( faut bien un debut …… )
Bonjour,
J’ai donné des indications sur l’adressage IP de mon réseau au fil de ce tutoriel.
Concernant la règle à configurer sur le NAS, c’est bien évidemment l’IP du Rpi (qui sera le client NFS) qu’il faut indiquer.
Pour résumer mon adressage IP :
Sous Raspberry lors de la modification du
cmdline.txt
le paramètrenfsroot=192.168.0.1:/volume1/rasp0
correspond donc à l’adresse IP du NAS.Puis en fonction du paramétrage IP de votre Raspberry :
ip=dhcp
ip=[IP_raspberry]:[IP_serveur_NFS]:[IP_passerelle]:[masque_sous_réseau]
soit dans votre casip=192.168.1.249:192.168.1.100:192.168.1.1:255.255.255.0
Bonjour,
Je lis avec grand plaisir votre tuto !!
Cependant, je rencontre un problème lors de la copie sur mon NAS (synology DS214se)
Quand j’execute la commnde :
sudo cp -axv /. /mnt/.
Il m’indique « cp: impossible de préserver l’appartenance …….. argument invalide »
Est-ce grave docteur ? 🙂
Il est possible que cela crée des problèmes ultérieurs si les fichiers n’ont pas conservés leur appartenance. Le paramètre « squash » (pas de mappage) est correctement configuré sur le NAS ?
Oui, la configuration côté NAS est correct :
root@Cloud:/etc# cat exports
/volume1/clone_disque 192.168.0.0/16(ro,async,no_wdelay,insecure,root_squash,insecure_locks,sec=sys,anonuid=1025,anongid=100)
/volume1/RaspBerry_MediaCenter 192.168.0.252(rw,async,no_wdelay,insecure,no_root_squash,insecure_locks,sec=sys,anonuid=1025,anongid=100)
/volume1/RaspBerry_Surveillance 192.168.0.254(rw,async,no_wdelay,crossmnt,insecure,no_root_squash,insecure_locks,sec=sys,anonuid=1025,anongid=100)
Et en effet, ca ne fonctionne pas avec ce message d’erreur, le système ne boot pas… Auriez vous une solution ?
De plus je ne pense pas à un problème de droit car l’erreur est « argument invalide »
Merci d’avance pour votre aide 🙂
En essayant directement depuis le compte « root » (avec un petit « sudo su ») en supprimant le sudo avant la commande ?
Bonjour,
1. J’ai le même message, y a t’il une solution pour la copie ?
2. J’ai une autre question concernant le fichier cmdline.txt, on doit indiquer : root=/dev/nfs mais dans /dev je n’ai pas nfs. Est-ce normal ?
3. Je suppose que s’il était présent (/dev/nsf), on devrait le rajouter dans le fstab comme (/dev/mmcblk0p2) ?
Merci
Le problème est le même 🙁
Salut et merci pour ton tuto et d’ailleurs tous les autres (j’en ai suivi un bon paquet !)
Pour celui là, j’ai eu une erreur au démarrage du montage en NFS sur le Rpi.
En gros, le monitoring du Rpi des montages NFS avec rpc.statd était pas lancé. Ila fallu le lancer manuellement avec :
/etc/init.d/rpcbind start
j’ai aussi demarré :
/etc/init.d/nfslock start
Est-ce que tu as pu rencontrer ce genre de probleme ? Et surtout est-ce que tu as du modifier le fichier d’initialisation pour les lancer au démarrage, sachant que le montage NFS arrive en tout premier lieu…
Bref.
Je sais pas sous quelle distrib tu as fait ça, moi je l’ai lancé sous le dernier Rasbian Jessie (téléchargé il y a qq minutes)
Voilà 🙂
Merci encore pour toutes tes cruciales infos.
++
Salut, merci pour les compliments sur le site.
J’ai fait ces manipulations sur la distribution XBian il y a pas mal de temps déjà. Je n’avais pas eu à lancer manuellement un quelconque service pour réaliser mon montage NFS.
Merci pour ces précisions pour ceux qui tenteront l’aventure avec la dernière Raspbian Jessie.
De rien 😉
En effet, je me suis rendu compte un tout petit moment après que la manip datait de l’année dernière… Je crois que quelqu’un l’a envoyé sur le Journal du Hacker récemment 😉
J’essayerai de mettre ici un complément si je trouve que ca demarre pas au lancement 😉
++
Bonsoir,
Merci pour ce tuto qui a fonctionné pour moi à un détail près
J’ai du effectuer la modification suivante (ajout du rw) pour que tout soit OK :
root=/dev/nfs rootfstype=nfs rw nfsroot=192.168.0.1:/volume1/rasp0,udp,vers=3 smsc95xx.turbo_mode=N ip=dhcp
En effet, sans ceci, j’avais des « Read only » sur le file system.
Merci pour le retour d’expérience ! En espérant que cela puisse aider d’autres internautes dans la même situation.
Bonjour,
je suis sur un bananapi 2 (OS Debian GNU/Linux 8 \n \l)
Mon problème est que dans le rep. /boot/ j’ai 3 fichiers:config-3.4.111-bananian, System.map-3.4.111-bananian, vmlinuz-3.4.111-bananian. mais pas de fichier cmdline.txt.
et je là je bloque!
Une âme charitable ?
Bonjour,
Aucun moyen de t’aider de notre côté vu que nous travaillons exclusivement avec des Raspberry Pi et le système Raspbian officiel.
Il existe peut-être des divergences de composants entre les deux cartes qui modifient le comportement du système lors du boot ce qui explique éventuellement l’absence de fichier « cmdline.txt ».
Merci de ta réponse Manu,
j’ai trouvé un fichier cmdline dans /proc mais impossible de le sauvegarder « Input/Output error ».
je gratte et répondrai ici si je trouve.
Bonne nuit!
Et le fichier « config-3.4.111-bananian », que contient-il ?
il contient ça:
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm 3.4.111 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_GENERIC_GPIO=y
# CONFIG_ARCH_USES_GETTIMEOFFSET is not set
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_KTIME_SCALAR=y
CONFIG_HAVE_PROC_CPU=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_LOCKBREAK=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_ARCH_HAS_CPUFREQ=y
CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ZONE_DMA=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_ARM_PATCH_PHYS_VIRT=y
CONFIG_NEED_MACH_IO_H=y
CONFIG_NEED_MACH_MEMORY_H=y
CONFIG_GENERIC_BUG=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_HAVE_IRQ_WORK=y
CONFIG_IRQ_WORK=y
#
# General setup
#
CONFIG_EXPERIMENTAL=y
...
rien de bien interressant!
a chaque fois que j'enregistre \proc\cmdline, il est aussitot réécrit.
Super ce tuto, merci beaucoup.
Pour ma part, j’ai essayé de faire ça sur mon RPi3 avec OSMC installé.
Quelques remarques:
– le fichier « sudo nano /mnt/etc/fstab » ne contient pas grand chose pour moi, je n’ai rien eu à commenter:
D’ailleurs en voulant copier le contenu, je remarque que maintenant il est vide! ???
– La commande »
sudo nano /mnt/etc/network/interfaces
1
sudo nano /mnt/etc/network/interfaces » me donne une fichier vide, donc rien a commenter également
Par contre, j’ai voulu rebooter le Pi avec le contenu de la carte, sans faire la copie du /boot pour voir avant.
Et en créant un fichier dans le /home/osmc, je remarque qu’il n’est pas créé sur le serveur NFS.
Comment je peux débugger ce qui ne va pas et savoir où je suis vraiment (sur la carte, sur le NAS?)
Merci de votre aide.
Et super boulot
Je rajouterai qu’il serait bien de proposer un sudo apt-get update et un upgrade avant de faire la manip. Ca ne mange pas de pain ^^