Raspberry Pi von NFS booten

 

Das Betriebssystem des Raspberry Pi's liegt normalerweise auf der SD Karte.

Ich nutze einen Raspberry Pi bereits seit einigen Jahren als Haussteuerung mit FS20 und intertechno Geräten, sowie als Miner.

Dieser Raspberry ist rund um die Uhr in Betrieb und hat schon 3 SD Karten vernichtet. 

Auch wenn man ein regelmäßiges Backup via dd auf den Homeserver / das NAS macht, ist es immer noch nervig die Funktion wieder herzustellen.

Da ich auf meinem Homeserver die Daten sowieso unter anderem via NFS bereitstelle und ein Linux Kernel vom Netzwerk booten kann,

dachte ich mir, das m√ľsste mit dem Pi doch auch gehen! Positiver Nebeneffekt: Speicherplatz satt ;)

Die SD Karte wird somit nur noch zum booten benötigt. Hier wird also nur kurz die /boot Partition gelesen.

Du benötigst also nur einen laufenden NFS Server.

Auf dem NFS Share legst du also einen neuen Ordner an. In meinem Beispiel "raspi_root".

In der /etc/exports des Server legst du folgende Zeile an:

 

Show/Hidden bash code

View source
 
 
# Home PI Root 
/Datengrab/raspi_root IP_DES_PI(rw,sync,no_root_squash,no_subtree_check)
 
 
 
 

 

Hier tr√§gst du nat√ľrlich den Pfad ein den du f√ľr dich gew√§hlt hast.

Dann solltest du den NFS Server restarten. Auf Debian geht das so:

Show/Hidden bash code

View source
 
 
sudo /etc/init.d/nfs-kernel-server reload
 
 
 
 

 

Jetzt geht es auch schon dem Pi an den Kragen.

Wir mounten uns also das gerade erstellte NFS Share nach /mnt (oder wohin du willst).

Show/Hidden bash code

View source
 
 
sudo mount <nfs-server-ip>:/Datengrab/raspi_root /mnt/ 
 
 
 
 

 

Jetzt m√ľssen wir das komplette root Verzeichnis des Pi's kopieren.

Show/Hidden bash code

View source
 
 
 
sudo cp -axv /. /mnt/.
sudo cp -axv /dev/. /mnt/dev/.
 
 
 
 
 
 

Ein guter Zeitpunkt Kaffee zu Kochen, oder die Frau/Freundin nach ihrem Tag zu fragen.

Sollte es hierbei zu Berechtigungsfehlern kommen, stimmen die Rechte im Export Verzeichnis des NFS Servers nicht. 

Sie m√ľssen definitiv¬†(rw,sync,no_root_squash,no_subtree_check) lauten.

 

Jetzt kommt der "kritische" Teil. Du musst die zuk√ľnftige /mnt/etc/fstab des Pi's bearbeiten, die ja auf dem NFS Share liegt.

Am besten kommentierst du die Zeile f√ľr die root Partition mit einer # einfach aus.

Das sieht bei mir dann so aus:

Show/Hidden bash code

View source
 
 
 
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
#/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
tmpfs /tmp tmpfs defaults,noatime,nosuid,size=100m 0 0
tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=30m 0 0
tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=100m 0 0
tmpfs /var/run tmpfs defaults,noatime,nosuid,mode=0755,size=2m 0 0
 
 
 
 

 

Der n√§chste Schritt sollte mindestens 2x kontrolliert werden, da der Raspi bei einem Fehler¬†nicht mehr bootet, dann m√ľsste die SD-Karte

in einen Kartenleser gesteckt werden und das ganze wieder an einem anderen PC korrigiert werden. - Ist auch kein Problem, nervt aber!

Auf dem Pi musst du also die /boot/cmdline.txt bearbeiten. 

Show/Hidden bash code

View source
 
 
 
root=/dev/nfs rootfstype=nfs
 
 
 
 

Hinter dem rootfstype = nfs f√ľgst du dann noch das hier ein:

Show/Hidden bash code

View source
 
 
 
nfsroot=<nfs-server-ip>:/Datengrab/raspi_root,udp,vers=3 smsc95xx.turbo_mode=N ip=dhcp
 
 
 
 

Da ich immer alle IP's via DHCP vergebe und in der Fritzbox dann den Haken setze "Diese IP immer dem Gerät zuordnen" ist man hier schon fertig.

Wer feste IP's vergibt muss die Zeile anpassen.

Show/Hidden bash code

View source
 
 
 
nfsroot=<nfs-server-ip>:/Datengrab/raspi_root,udp,vers=3 smsc95xx.turbo_mode=N ip=<raspberrypi-ip>:<nfs-server-ip>:<default-gateway>:<network-mask>:rpi:eth0:off
 
 
 
 

 

Im Prinzip ist es nun fast geschafft. Nun kannst du einfach rebooten. Und dann verschieben wir noch die Swap-Datei.

Show/Hidden bash code

View source
 
 
 
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
 
 
 
 

 

Hat das geklappt soll der Raspi diese beim Start auch verwenden. Dazu bearbeitest du¬†seine¬†/etc/rc.local und f√ľgst √ľber der letzten Zeile (exit 0) das hier ein:

Show/Hidden bash code

View source
 
 
 
echo "Swap einbinden"
sleep 3
losetup /dev/loop0 /var/swap
mkswap /dev/loop0
swapon /dev/loop0
 
 
 
 

Ein bisschen Tuning schadet nicht

In die /etc/default/rcS schreibst du folgenden Parameter.

Show/Hidden bash code

View source
 
 
 
ASYNCMOUNTNFS=no 
 
 
 
 

Und in der /etc/sysctl.conf passt du die Zeile hier an oder f√ľgst sie hinzu:

Show/Hidden bash code

View source
 
 
 
vm.min_free_kbytes=12288
 
 
 
 

 

 

Wenn dir¬†das Projekt gef√§llt, habe ich nat√ľrlich nichts gegen eine kleine¬†Spende.

 

 

 

Kommentare   

0 #4 Muecke77 2017-02-25 16:29
Gute Anleitung hat funktiniert. Doie IP des nfs servers muss angegeben werden, damit der nfs server sicher gefunden wird. Man könnte auf einen Namen bei "nfsroot=" angeben. Bei mir wurde das root fs zuerst nur read-only engebunden. Daher habe ich "udp,vers=3 rw rootwait" in der cmdline.txt angeben. Dann hat es geklappt.

-Muecke
Dem Administrator melden
0 #3 Wolfgang 2016-11-29 14:59
Hallo Michael,

das booten funktioniert vom NAS, aber das Filesystem ist nur noch lesbar!

Was habe ich falsch gemacht bzw. wie kann ich das reparieren?

Danke im voraus,
Wolfgang
Dem Administrator melden
0 #2 Michael M 2016-10-20 14:23
...das wichtigste wurde im Post gek√ľrzt:
"ip=raspberrypi-ip:nfs-server-ip:default-gateway:network-mask"
Warum noch einmal die "nfs-server-ip" angeben?
Dem Administrator melden
0 #1 Michael M 2016-10-20 09:45
Hallo Michael,
dein Howto hat sofort funktioniert! Überhaupt schöne Homepage. Eine Frage habe ich:
F√ľr eine feste IP des Raspi hast du geschrieben:
nfsroot=:/Datengrab/raspi_root,udp,vers=3 smsc95xx.turbo_mode=N ip=::::rpi:eth0:off
Warum muss ich die noch einmal angeben? Reich die IP, Netmask und Gateway hier nicht?
Gruß
Michael
Dem Administrator melden

Kommentar schreiben

Sicherheitscode
Aktualisieren