Ramdisk unter Linux: ramfs oder tmpfs? – Praktischer Anwendungsfall bei Raspberry Pi mit Squid

21 Januar 2014 8 Kommentare Autor: Jürgen (jdo)

Mit einem Raspberry Pi kann man tolle Sachen machen, auch wenn er so ein Winzling ist. Der Mini-Rechner braucht nicht viel Strom und es lässt sich Linux darauf betreiben. Das heißt auch, dass man diesen als Proxy-Server mit Squid betreiben kann. Gerade bei langsameren Internet-Verbindungen oder mobilem Breitband mit Traffix-Limit kann ein Proxy-Cache tatsächlich Bandbreite sparen. Vorausgesetzt ist natürlich, dass oft die selben Seiten aufgerufen werden – und kein https im Spiel ist (auch das wäre theoretisch möglich, muss man allerdings erst aktivieren, hebelt aber irgendwie den Sinn von https aus – gut zu Hause wird das schon OK sein).

Wenn Du Squid unter Raspbian installierst, sudo apt-get install squid, dann findest Du in der Konfigurations-Datei /etc/squid/squid.conf den Parameter cache_dir. Dieser steht per Standard auf 100 16 256. Die erste Zahl gibt dabei den Cache in MByte an. DIe beiden anderen kümmern sich um die Anzahl der erlaubten Verzeichnisse und Unterverzeichnisse. Weiterhin sehen wir, dass der Cache im Verzeichnis /var/spool/squid liegt.

Raspberry Pi: squid.conf

Raspberry Pi: squid.conf

Das gefällt mir aber nicht besonders. Das Raspberry Pi wird bekanntlich mit einer SD-Karte befeuert und Schreibzugriffe auf diese können erstens langsam sein (Je nach Klasse der SD-Karte) und zweitens sind die totalen Schreibzugriffe auf Flash bekanntlich limitiert (wenn auch sehr hoch).

Starte ich Raspbian im headless Modus und auch ohne grafische Oberfläche, kann ich mit free -m sehen, wie viel Arbeitsspeicher mir zur Verfügung steht.

Raspberry Pi: free -m

Raspberry Pi: free -m

Das Raspberry Pi B hat nur 512 MByte Arbeitsspeicher / RAM, aber 303 davon sind frei. Somit könnte ich eigentlich 120 MByte für meinen Squid abzweigen (man sollte zehn Prozent Overhead einrechnen und ich gehe lieber auf Nummer Sicher) und den Cache in die Ramdisk schreiben lassen. Damit schone ich meine SD-Karte. Bei Computern mit SSD wäre das übrigens auch eine Option. Je mehr RAM, desto besser natürlich.

Nun stellt sich aber die Frage, welche Ramdisk man verwenden soll:

ramfs oder tmpfs – was ist der Unterschied?

Um es kurz zu machen: tmpfs ist so etwas wie der Nachfolger von ramfs. Der große Nachteil von ramfs ist, dass ich keien maximale Größe angeben kann. Es darf also wachsen, bis der Arbeitsspeicher aufgefressen ist. tmpfs hingegen kann ich wie eine andere Partition behandeln und es wird mir nach Erreichen der festgelegten Größe ein „Festplatte voll!“ auswerfen und nicht so lange in den Arbeitsspeicher ballern, bis mir das System um die Ohren fliegt.

Bei dem Squid-Szenario wäre das nicht ganz so schlimm, da ich das Limit in der Konfigurations-Datei setze. tmpfs hat den Nachteil, dass es unnötige Pages in den Swap (Swap-Datei) auslagern kann. Bei meiner Raspbian-Installation gibt es allerdings keine Swap-Datei und dann kann tmpfs auch nichts dahin verschieben. Somit entscheide ich mich im Falle Raspberry Pi, Raspbian und Squid für tmpfs, um eine doppelte Absicherung zu haben.

Manuell kannst Du das so testen. Erst einmal erstellst Du zum Beispiel ein Verzeichnis /mnt/ramdisk. Der Mount-Befehl sieht dann zum Beispiel so aus:

mount -t tmpfs -o size=120m none /mnt/ramdisk

Mithilfe von df -h kannst Du dann überprüfen, ob das geklappt hat.

Raspberry Pi: Ramdisk manuell erstellt

Raspberry Pi: Ramdisk manuell erstellt

Danach setzt Du den Pfad in squid.conf auf eben /mnt/ramdisk. Natürlich lässt sich das auch über die Datei /etc/fstab realisieren.

tmpfs /mnt/ramdisk tmpfs nodev,nosuid,noexec,nodiratime,size=120M 0 0

Dann wird die Ramdisk bei jedem Neustart erschaffen.

Raspberry Pi: Ramdisk in fstab hinterlegt

Raspberry Pi: Ramdisk in fstab hinterlegt

Natürlich sind die Inhalte einer Ramdisk verloren, sobald Du den Rechner neu startest oder der Strom ausfällt und so weiter. Bei Cache-Dateien ist mir das allerdings herzlich egal. Dafür schone ich SD-Karte, SDD, Flash-Speicher …

Offizielle Dokumentationen:

Nette Pi-Konstellation

 

Du kannst gerne Deinen Senf zu diesem Beitrag geben: Hier geht es zu den Kommentaren




Schreiben macht durstig! Eine kleine Erfrischung kann daher nie schaden. Wem dieser freie Artikel gefallen hat, der darf mir gerne einen frisch gezapften Hopfen-Tee ausgeben (Paypal - der Spenden-Knopf
oder bitcoin - Adresse: 1NacVNwcLLePUVv8uSafu5Ykdwh8QyDfgK). Ich freue mich über jede noch so kleine Spende. Vielen Dank und Prost!
 Alle Kommentare als Feed abonnieren

8 Kommentare zu “Ramdisk unter Linux: ramfs oder tmpfs? – Praktischer Anwendungsfall bei Raspberry Pi mit Squid”

  1. Martin Zabinski sagt:

    Hi,
    ich kann zwar grad nicht nachgucken ob das Modul im Kernel von Rasbian ist, aber eine alternative wäre ZRAM zu nutzen. Damit hättest du dann kompriemierten RAM Speicher zur Verfügung. Wird zwar normalerweise für SWAP Partitionen verwendet, aber man kann es natürlich auch anders mounten und für sowas verwenden.
    Der geringe Overhead an Rechenleistung sollte zu vernachlässigen sein.

  2. Thomas sagt:

    Ist zram durch die Kompression nicht zu aufwendig für den kleinen arm ? 😉

    • Martin Zabinski sagt:

      wie gesagt ich hab grad keinen Pi zum testen da, aber dennoch würde ich sagen das der damit nur wenig Probleme haben dürfte. ZRAM ist mit einen Intel P3 ja auch nur ein geringes Problem. Du bleibst ja im RAM.

  3. Tux sagt:

    Kleiner Hinweis: Im konkreten Beispiel hat Dein Pi nicht nur 303, sondern sogar noch 348 MB Arbeitsspeicher zur Verfügung! Diese Fehleinschätzung is leider sehr häufig, da Linux nicht nur zwischen freiem und belegten, sondern auch nach »bereits benutzen, damit vielleicht wiederverwertbaren, aber auch jederzeit überschreibbarem« RAM differenziert: linuxatemyram.com/. Dieser Unterschied kann sogar ziemlich krass werden; bei meinem Pi sieht das momentan so aus:

    total used free
    Mem: 374 348 26
    -/+ buffers/cache: 40 334
    Swap: 99 0 99

    Und 26 versus 334 MB frei ist schon ein Unterschied!

  4. claw sagt:

    tmpfs swapt, ramfs nicht. tmpfs ist überhaupt kein Nachfolger es ist nur eine vollkommen andere Implementierung als tmpfs. Somit ist tmpfs weder besser/schlechter als ramfs. Beide haben Vor und Nachteile und für das was du hier beschreibst wäre ramfs eigentlich auch besser geeignet gewesen weil es eben nicht swapt

Antworten