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:

{code lang:bash hidden:false}

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

{/code} 

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:

{code lang:bash hidden:false}

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

{/code} 

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).

{code lang:bash hidden:false}

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

{/code} 

Jetzt müssen wir das komplette root Verzeichnis des Pi’s kopieren.

{code lang:bash hidden:false}

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

{/code} 

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:

{code lang:bash hidden:false}

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

 {/code} 

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. 

{code lang:bash hidden:false}

root=/dev/nfs rootfstype=nfs

 {/code} 

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

{code lang:bash hidden:false}

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

 {/code} 

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.

{code lang:bash hidden:false}

nfsroot=<nfs-server-ip>:/Datengrab/raspi_root,udp,vers=3 smsc95xx.turbo_mode=N ip=<raspberrypiip>:<nfsserverip>:<defaultgateway>:<networkmask>:rpi:eth0:off

 {/code} 

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

{code lang:bash hidden:false}

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

 {/code} 

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:

{code lang:bash hidden:false}

echo „Swap einbinden“
sleep 3
losetup /dev/loop0 /var/swap
mkswap /dev/loop0
swapon /dev/loop0

 {/code} 

Ein bisschen Tuning schadet nicht

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

{code lang:bash hidden:false}

ASYNCMOUNTNFS=no 

{/code} 

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

{code lang:bash hidden:false}

vm.min_free_kbytes=12288

{/code} 

Wenn dir das Projekt gefällt, habe ich natürlich nichts gegen eine kleine Spende.

 

Von heckmic

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.