...::: HELLMERS-ONLINE :::...
 
 
  Raspberry Pi » Raspberry Pi über NFS booten

Raspberry Pi über NFS booten

Der Raspberry Pi lässt sich nicht nur von der Micro SD Karte oder einen USB-Stick booten, er kann auch von einer NFS Freigabe auf einen Server gebootet werden. Dies ist besonders bei Anwendungen die gerne und viele Daten in das Filesystem speichern sinnvoll um einen frühzeitigen Ausfall der Micro SD Karte vorzubeugen. Eine Anwendung als Beispiel wäre der Asterisk Server. Lagert man das Root Filesystem jedoch auf eine NFS Freigabe aus so werden diese Daten über das Netzwerk auf dem Server gespeichert. Eine Zusätzliche Samba Freigabe auf den Ordner ermöglicht den einfachen Austausch von Daten oder das hochladen von Installations Paketen die nicht in den Repositories vorhanden sind.

In diesen Abschnitt zeige ich euch wie einfach es ist den Raspberry Pi von einer NFS Freigabe zu booten.

Inhaltsverzeichnis

1. Den Raspberry Pi vorbereiten
2. Den NFS Share vorbereiten
3. Den NFS Share mounten
4. Kopieren des Root Filesystems
5. fstab editieren
6. Modifizieren der Boot Konfiguration
7. Raspberry Pi neustarten
8. Swap erstellen
9. Empfohlene Einstellungen


1. Den Raspberry Pi vorbereiten

Ich gehe davon aus das auf der Micro SD Karte des Raspberry Pi bereits ein Betriebssystem installiert ist und ein SSH Zugang möglich ist. In meiner Beschreibung behandle ich hier explizit das Betriebssystem Raspbian, aber es müsste sich auch auf andere Linux Versionen für den Raspberry Pi übertragen lassen.

Als erstes müssen wir unser Raspbian auf den neuesten Stand bringen. Hierzu geben wir im Terminal folgende Befehle ein:

sudo apt-get update && sudo apt-get upgrade

Hierdurch werden die aktuellsten Pakete herunter geladen und installiert.


Update der Firmware

Mit dem kleinen Tool rpi-update lässt sich die Firmware des Raspberry Pi auf den neuesten Stand halten. Bei meiner Raspbian Version war dieses Tool bereits installiert. Für alle bei denen dieses Tool nicht installiert ist folgt hier die Anleitung zum installieren. Unter Raspbian wird es wie folgt installiert:

sudo apt-get install rpi-update

Unter allen anderen Betriebssystemen wird es wie folgt installiert:

sudo curl -L --output /usr/bin/rpi-update https://raw.githubusercontent.com/Hexxeh/rpi-update/master/rpi-update && sudo chmod +x /usr/bin/rpi-update

Um rpi-update zu starten:

sudo rpi-update

Nachdem die neue Firmware herunter geladen und installiert wurde, muss der Raspberry Pi neu gestartet werden.

2. Den NFS Share vorbereiten

Ich möchte hier nicht darauf eingehen wie man einen NFS Server installiert. Ich möchte hier nur kurz auf die Freigabe Optionen für den NFS Share eingehen. Damit unser Raspberry Pi von dem NFS Share booten und darauf auch arbeiten kann geben wir es wie folgt in der Datei /etc/exports frei:

# Raspberry Root FS
/nfsshares/rpi (rw,sync,no_root_squash,no_subtree_check)


Ersetzt hierbei /nfsshares/rpi gegen das Directory in dem sich eure Freigabe befindet und ersetzt gegen die IP-Adresse eures Raspberry Pi oder gegen das Subnet aus dem der Raspberry Pi auf die Freigabe zugreift.

Nachdem die Freigabe eingerichtet ist muss der NFS Server noch neu gestartet werden. Unter Debian geschieht dies wie folgt:

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

Ab hier geht es auf dem Raspberry Pi weiter.

3. Den NFS Share mounten

Auf dem Raspberry Pi mounten wir mit folgenden Kommando unsere NFS Freigabe (das Verzeichnis /mnt muss dazu bereits existieren):

sudo mount IP-DES-NFS-SERVERS:/nfsshares/rpi /mnt/

4. Kopieren des Root Filesystems

Mit zwei einfachen Kommandos kopieren wir das Root Filesystem unseres Raspbbery Pi auf unsere NFS Freigabe:

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


Das war einfach. Ab diesen Zeitpunkt befindet sich das Root Filesystem des Raspberry Pi auf unseren Server und wir müssen nur noch den Raspberry Pi so konfigurieren das er von hier bootet.

5. fstab editieren

Jetzt wird der Raspberry Pi so konfiguriert das er nicht mehr die Root Partition der SD Karte mounted. Hierzu editieren wir im ersten Schritt die Datei /etc/fstab die sich in der NFS Freigabe auf dem Server befindet. Von unserem Raspberry Pi erreichen wir sie mit sudo nano /mnt/etc/fstab oder direkt auf unserem Server mit sudo nano /nfsshares/rpi/etc/fstab. In der fstab löschen wir die Zeile welche das Gert /dev/mmcblk0p2 auf ⁄ mounted oder kommentieren diese aus.

6. Modifizieren der Boot Konfiguration

Zum modifizieren der Boot Konfiguration des Raspberry Pi muss die Datei /boot/cmdline.txt, welche sich auf der ersten Partition der SD Karte befindet, geändert werden. Ich gehe hierbei nicht näher auf die einzelnen Änderungen ein, sondern poste hier ein funktionierende Command Line für den Betrieb des Raspberry Pi mit DHCP:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/nfs rootfstype=nfs elevator=deadline rootwait nfsroot=NFS-SERVER-IP:/nfsshares/rpi,udp,vers=3 smsc95xx.turbo_mode=N ip=dhcp

ACHTUNG! Der Inhalt der cmdline.txt darf nur aus einer Zeile bestehen. Sollte dies nicht beachtet werden bootet der Raspberry Pi nicht mehr.

7. Raspberry Pi neustarten

Wenn alles richtig gemacht wurde sollte der Raspberry Pi nach Eingabe von

sudo shutdown -r 0

neustarten und von der NFS Freigabe über das Netzwerk booten.

Ich empfehle die Root Partition auf der SD Karte intakt zu lassen, so kann man mit relativ wenig Aufwand den Raspberry wieder von der SD Karte booten lassen. Man muß dabei aber beachten, das die Root Partition nicht auf den gleichen Stand ist wie die NFS Freigabe.

8. Swap erzeugen

Für gewöhnlich benutzt Raspbian eine Swap Datei auf der SD Karte, was nicht empfehlenswert ist, da dies auf Dauer die SD Karte schädigt. Daher verschieben wir die Swap Datei in ein Loop Device auf unserer NFS Freigabe. Zuerst löschen wir die alte Swap Datei:

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


In den nächsten Schritten erzeugen wir eine neue Swap Datei, erzeugen das Loop Device und aktivieren den neuen Swap:

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


Wir haben jetzt eine 1GB große Swap Datei im Verzeichnis /var erzeugt. Mit dem Befehl free -m kann die neue Swap Datei überpüft werden. Wir erfahren dadurch wieviel Swap Speicher zur Verfügung steht. Um diese Änderung permanent zu machen müssen wir die folgenden Code in die Datei /etc/rc.local vor der Zeile mit dem Inhalt exit 0 eintragen:

echo "Setting up loopy /var/swap/..."
sleep 2
losetup /dev/loop0 /var/swap
mkswap /dev/loop0
swapon /dev/loop0


9. Empfohlene Einstellungen

Im Internet wird empfohlen folgende Einstellungen, die ich euch nicht vorenthalten möchte, vorzunehmen. Zu erst editieren wir die Datei /etc/default/rcS und fügen den Befehl ASYNCMOUNTNFS=no ein. Als zweiten Schritt ändern wir die Datei /etc/sysctl.conf und ändern die Zeile mit dem Eintrag vm.min_free_kbytes wie folgt:

vm.min_free_kbytes = 12288

Dies reserviert 12MB des freien RAM Speichers und schützt zusätzlich vor einer Kernel Panic.


Geschafft! Ab jetzt nutzt unser Raspberry Pi die NFS Freigabe zum booten und arbeiten.
back top
.:   Andre Hellmers - Ottweilerstr. 1 - 28309 Bremen   :.
  www.hellmers-online.info  -   andre@hellmers-online.info