Synology: Wie mounte ich eine RAM-Disk?


Synology RAM-Disk

Nicht nur CPU und RAM können Engpässe bei der Leistung von Software sein. Besonders das Lesen und Schreiben auf die Festplatte ist zum Beispiel für Minecraft-Server ein großer Flaschenhals. Wenn das der Fall ist, kann man auch zum Äußersten greifen: Ein Laufwerk im Arbeitsspeicher des Computers. Allerdings sind bei Stromausfall auch sofort alle Daten weg. Ich zeige euch, wie man es richtig macht.

Zwei Tasks für zwei Shell-Scripte

Zuerst braucht ihr sehr viel RAM in eurem Synology NAS. Die meisten kommen mit 4 GB bei euch an aber können bis 32 GB erweitert werden. Unterstützt wird das von Synology offiziell übrigens nicht. Ich habe DDR3 RAM gekauft, den man hier günstig kaufen kann. Ich bin nun bei 16 GB angekommen. Genug RAM ist wichtig, denn der belegte Platz wird nachher fehlen.

mount-ramdisk.sh

#!/bin/sh
mount -t tmpfs -o size=25% ramdisk /volume1/public/ramdisk
sleep 1
rsync -ahW --no-compress  /volume1/public/ramdisk-local/  volume1/public/ramdisk/

Legt dieses Script in euer Home-Verzeichnis. Wenn ihr nicht wisst, was das heißt, hört hier auf zu lesen und denkt ernsthaft über eine SSD für eurer Synology NAS nach.

Ich habe ein sogenannten „Gemeinsamen Ordner“ namens „ramdisk“ angelegt. In das mounten wir die RAM-Disk. Danach warten wir vorsichtshalber eine Sekunde. Mit rsync holen wir uns das auf der Festplatte liegende lokale Backup der RAM-Disk. Denn diese ist bei jedem Neustarten 100%ig leer.

Die Prozentanzahl bei „size“ kann auch ein absoluter Wert wie „4GB“ sein. Für das Beispiel wollte ich nur nicht euer NAS lahmlegen wenn man genau 4 GB RAM hat und das dann synchronisiert.

Der Aufgabenplaner

Anschließend führt man dieses Script beim Bootvorgang aus. Dazu legt man einen Task wie folgt an:

  1. Aufgabenplaner
  2. Erstellen
  3. Ausgelöster Task (Triggered Task)
  4. Hochfahren

Der Benutzer muss „root“ sein, der das Script ausführt. Unter „Befehl ausführen“ referenziert ihr nun das Script im Home-Verzeichnis:

bash /var/services/homes/username/mount-ramdisk.sh

sync-ramdisk.sh

Nun brauchen wir ein Script, dass jede Minute den Inhalt der RAM-Disk auf die Festplatte persistiert:

#!/bin/sh
# run me as a scheduled task every minute as the same use the files belong to
rsync -ahW --no-compress --delete /volume1/public/ramdisk/ /volume1/public/ramdisk-local/

Den Task legt ihr an wie den „Ausgelösten Task“. Nur als „geplante Aufgabe“ („scheduled task“) die ihr jede Minute plant.

df | grep "ramdisk"

Die Scripte sind auf github zu finden und ich freue mich jederzeit über Anpassungen, Erweiterungen und Tipps.

Backup vorher testen!

Testet das Script sync-ramdisk.sh bevor ihr nach 3 Wochen merkt, dass nach einem Neustart alles weg ist. Wenn Du sensible Daten darin speicherst, dann ist eine NAS SSD besser geeignet.

Unterschiede zwischen Festplatte, SSD und RAM

Warum eine RAM-Disk? Weil selbst eine SSD ist nicht so schnell ist wie Arbeitsspeicher. Aber der Nachteil des RAMs: Wenn der Strom weg ist, sind alle Daten weg. Wer also mit Bleifuss auf der Performance-Überholspur fahren will, der sollte minütlich die Daten auf die Festplatte oder einer für das NAS geeigneten SSD sichern.

FestplatteSSDDRAM
160 MB/s550 MB/s16000 MB/s

Diese Tabelle ist sehr vereinfacht und vernachlässigt Aspekte wie Zugriffszeiten, Größenverhältnis, Stromverbrauch und natürlich die angesprochene Persistenz.

Synology ist kein normales Linux

Wer sich mit Linux auskennt würde vielleicht sowas sagen wie:

  • „Nimm doch /dev/shm“
  • „Mounte doch einfach in der fstab eine Disk“
  • „Nutze doch /usr/local/etc/rc.d/“
  • „Bist du irre?! Das ist ja komplett ohne Abfangen von Fehlern geschrieben!“

Alles richtig. Durch den minimalistischen Ansatz bilde ich mir ein, dass man den Zusammenhang besser versteht. So bleibt das Beispiel übersichtlich. Wenn man über manuelle Anpassungen an fstab das Ziel erreichen will, dann könnten durch Updates von DSM diese Änderungen leicht überschrieben werden. Der Weg über Tasks und Scripte im Home-Verzeichnis sollte alle Aktualisierungen überleben.

Anwendungsfall Minecraft-Server

Mein Minecraft-Server ist besonders dankbar für eine schnelle I/O Performance. Wenn die Spieler über die Karte laufen und Blöcke verändern, dann ist die 3,5GB große Karte permanent Lese- und Schreibzugriffen ausgesetzt. Da war die RAM-Disk ein echter Segen. Der Tipp mit der RAM-Disk kam von meinem geschätzten Kollegen Kai Fricke nach einem Fachgespräch über Minecraft-Server.

Ist das was für den Regelbetrieb?

Nein, für mich nicht. Am Ende kenne ich mich dann doch nicht so gut mit den ganzen „Was passiert wenn die RAM-Disk voll läuft“-Fällen aus. Ich will den Minecraft-Server nicht deswegen riskieren. Die nun verbaute SSD ist zwar langsamer aber die schnellen Zugriffszeiten sind gefühlt nicht weit weg von der Lösung mit der RAM-Disk. Außerdem ist Arbeitsspeicher auch nicht geschenkt. SSDs speziell für NAS werden zudem immer interessanter.


Beitrag veröffentlicht

in

von

Kommentare

5 Antworten zu „Synology: Wie mounte ich eine RAM-Disk?“

  1. Avatar von Willi
    Willi

    Mach mal einen Beitrag zu Storj und wie man es auf einem NAS laufen lassen kann.

    1. Avatar von Marc
      Marc

      Storj Docker Image im Repository suchen und installieren. Fertig. Gern geschehen.

  2. Avatar von JTR
    JTR

    Wow RAM Disk, das war so ein Thema um 2000 herum interessant. Seit es SSD gibt braucht man das zum Glück nicht mehr. Aber interessanter Artikel. Allgemein deine Artikel rund um dein NAS gehören zu den interessantesten im Technik Bereich deines Blogs.

  3. Avatar von Jörg
    Jörg

    Moin marcTV,
    danke für deine Mühe und Arbeit die du in das alles steckst, hat mir sehr geholfen und ist gut beschrieben.

    Ich habe allerdings grad den Schockmoment weil meine MC Welt auf den Stand vor dem Umzug in die Ramdisk zurückgesetzt wurde … ich habe nicht die Scripte von Github genutzt sondern die Pfade aus der Anleitung genutzt und habe im sync_ramdisk.sh die Zeile „rsync -ahW –no-compress /volume1/mcserver-nas/ /volume1/ramdisk/“ falsch interpretiert und mir 3 Wochen Arbeit beim Neustart wegen eines Updates zerschossen…
    Im Github lautet die Zeile anders – bitte update doch die Anleitung oder verlink nur die Scripte damit das nicht noch weiteren passiert.

    Bin grad sehr gefrustet und hoffe das widerfährt anderen nicht auch so.

    Trotzdem ganz herzlichen Dank für deine Anleitungen und diese Seite !

    1. Avatar von Marc
      Marc

      Das tut mir echt leid. In der Anleitung hier war alles an einem konkreten Beispiel erklärt und im Git war es recht allgemein. Die Anleitungen waren in sich richtig aber natürlich nicht austauschbar. Ich habe nun alles aus GitHub übernommen und einen dicken Hinweis geschrieben, dass man doch bitte sync-ramdisk.sh einmal vorher testen solle.

      Vielen Dank für den Hinweis!

Schreibe einen Kommentar

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