[Howto] Swap auf externer USB-SSD

  • [NAS Typ:] TS-233 (sollte auch mit anderen 5.0.x-Modellen funktionieren)

    [Firmware:] 5.0.1.x

    [Getestet:] ja


    Nach dem Kauf eines TS-233 hatte ich gemerkt, dass es mit 2 GB RAM eher knapp ausgestattet ist und schon nach dem Booten swappt. Zur Linderung habe ich die Swap-Partition auf eine USB-SSD umgelenkt und möchte meine gesammelten Infos und Erfahrungen in Form dieses kleinen HowTos weitergeben.

    Es sollte auch für ähnliche Systeme mit knapp bemessenen RAM gelten.

    Motivation:

    2GB RAM sind für QTS 5.0 zu knapp bemessen, um ein System mit 2 Platten ohne swappen zu betreiben. (Es verhält sich wie einst "OS/2 Warp", dass auf PCs mit 4MB RAM 'lief' und die Festplatten-LED in eine dauerhaft blinkende "ich brauche mehr RAM"-LED umwidmete;)


    Nutzt man nur SSD, ist das folgende ohne Belang.

    Nutzt man dagegen mindestens eine HDD führt das regelmäßige Swappen zu den üblichen Nachteilen (Performance, regelmäßiges Anspringen der HDD).

    Ziel:

    Das Problem lindern, indem man das Swappen auf eine kleine USB-SSD umlenkt.

    Vorteile:

    Bessere Performance, leiseres System, weniger Plattenzugriffe, evtl. geringerer Stromverbrauch

    Nachteile:

    Materialeinsatz (20€?), USB-Port belegt, zusätzlicher Platzbedarf, ggf. Probleme falls jemand die SSD abzieht.

    Zutaten:

    Linux-Grundkenntnisse.

    Ein oder zwei USB-SSD, möglichst mit USB3-Aschluss. Ob QTS UASP unterstützt, weiß ich nicht.

    Aber selbst am USB2-Anschluss wäre eine SSD schneller beim Swappen als eine HDD, s. Ready-Boost von Windows.

    Vorgehen:

    Auf besagter SSD erstellt man z.B. unter Linux mit gparted eine Swap-Partition und vergibt ein Label, z.B. ssdswap1. Wer will kann auch zwei SSD nutzen (Dual-Channel-Betrieb;) jede Partition muss dann ein eindeutiges Label erhalten.

    (Finde ich einfacher, als es direkt auf der Shell-Ebene der NAS umzusetzen. Anleitungen, wie man eine SSD partitioniert, gibt es genug.)


    Die Swap-Partition wird mit höherer Priorität als die QTS-Swaps eingebunden.

    Damit beim Ausfall der USB-SSD trotzdem noch geswappt werden kann, werden diese weiterhin eingebunden. Die 16GB große Swap-Datei wird allerdings nicht mehr genutzt.


    Wird beim Booten die Swappartition nicht gefunden, wird auch nichts geändert.

    Damit es nach einem Neustart erhalten bleibt, muss ein Skript in die autorun.sh eingetragen werden.

    Alternativen:

    Nutzen einer Swapdatei statt einer Partition. Da sie dann in einem 'Nutzdatenverzeichnis' liegt, fand ich des weniger schön.

    Kauf eines Systems mit mehr RAM ;)

    Details:

    Die SSD an den USB3-Anschluss des NAS anschließen.


    In der Weboberfläche wird beim Icon "Verbundene externe Geräte" die Swap-Partition mit einem Ausrufezeichen angezeigt, weil es kein normales Dateisystem ist. Bei "Speicher & Snapshots / Speicher / Externer Speicher" werden Swap-Partitionen ebenfalls als "Nicht initialisiert / Unbekannt" angezeigt. Beides kann ignoriert werden.


    Wenn andere Dateisysteme auf der SSD sind, werden sie von QTS standardmäßig im Netz angezeigt. Falls unverwünscht, kann das unter "Systemsteuerung / Berechtigung / Freigabeordner" vehindert werden:

    Bei der "Freigabe" auf "Eigenschaften bearbeiten" gehen und die letzten beiden Optionen (ABSE, ABE) aktivieren und auf "Berechtigungen für Freigabeordner" gehen und dort 'Zugriffsverweigerung' auswählen.


    Per SSH an die NAS einloggen.

    Nachsehen, welche Swaps von QTS angelegt wurden. Bei meinem System sind es drei:

    Code
    $ cat /proc/swaps
    Filename                Type        Size        Used        Priority
    /dev/md256                              partition    530108        2064        -2
    /dev/md322                              partition    7235132        0        -3
    /share/CACHEDEV1_DATA/.swap/qnap_swap   file        16777212    0        -4


    Mit diesen Werten das u.a. Skript anpassen falls sie abweichen.


    a)

    Bei QTSSWAP1, QTSSWAP2, QTSSWAP3 die vorhandenen Swaps eintragen

    (Falls nur zwei oder vier genutzt werden, entsprechend anpassen.)


    b)

    Bei SSDSWAP1 das Label der erstellen Swappartition eintragen.

    Kann auf Nachfrage auch eine Version des Skriptes für 2 Swappartitionen liefern.

    Wer will kann auch die Prio anpassen (z.B. weil eine Swap-Partition langsamer ist).


    Das Skript auf dem System unter /share/homes/<admin-user>/change_swap.sh ablegen, Berechtigungen anpassen

    $ chmod 700 ./change_swap.sh

    und testweise aufrufen.

    $ ./change_swap.sh

    Die Logdatei /var/log/change_swap.log kontrollieren, ob alles geklappt hat.


    Falls ja:

    Skript in den autostart aufnehmen, dazu die Befehle in den Kommentaren am Ende des Skriptes ausführen:


    Code
    $ sudo /etc/init.d/init_disk.sh mount_flash_config
    $ sudo vi /tmp/nasconfig_tmp/autorun.sh
    # jetzt den inhalt das Skriptes per copy&paste einfügen
    # :wq
    $ chmod +x /tmp/nasconfig_tmp/autorun.sh
    $ sudo /etc/init.d/init_disk.sh umount_flash_config

    In der Weboberfläche bei "Systemsteuerung / System / Hardware / Allgemein" den Haken bei "Benutzerdefiniere Prozesse [..] autorun.sh" setzen.


    Neustart, per SSH einlogen, Swap kontrollieren; liefert bei mir:

    Code
    $ cat /proc/swaps
    Filename                Type        Size        Used        Priority
    /dev/md256                              partition    530108        0        -2
    /dev/md322                              partition    7235132        0        -3
    /dev/sdc8                               partition    9687036        19096        2


    Logdatei kontrollieren /var/log/change_swap.log; Beispiel:


    Hier das Skript.

    Fragen, Anmerkungen usw. sind gerne willkommen.

    Habe im Forum hoffentlich die passende Ecke für diesen Beitrag gefunden und nicht zu viel falsch gemacht.

    Möge er hilfreich sein :)

    2 Mal editiert, zuletzt von Alex0516 () aus folgendem Grund: kleine Korrekturen

  • Das kann ich sagen, wenn ich das nächste kleine FW-Update eingespielt habe;)
    Das Skript muss natürlich angepasst werden, wenn QTS weitere oder andere 'Swaps' nutzt, also vielleicht beim Umstieg auf 6.0. Wobei die 'Swap-Architektur' mit drei unterschiedlich großen Bereichen ja schon sehr nach 'historisch gewachsen & nicht aufgeräumt' ausschaut.


    Die nötigen Details hierzu habe ich aus verschiedenen, teilweise älteren Threads im deutschen und englischen Forum zusammengesucht. Das Thema hatte also auch andere beschäftigt. War eine kleine, nette Bastelei (zum 'Stundenlohn' schweige ich besser).

  • Es verhält sich wie einst "OS/2 Warp", dass auf PCs mit 4GB RAM 'lief'

    Na das wäre dann wohl ab wie... :) Hier sollte wohl 4 MB stehen. Musste selbst nochmals bei meinem Text zurück und GB durch MB ersetzen. MB ist heute einfach keine Maßeinheit mehr, bestenfalls für Cache.


    Interessante Idee und Anleitung. Grundsätzlichen ist Swapping nicht erwünscht, da einfach zu langsam. Aber wenn schon, dann definitiv besser auf SSD oder noch besser M.2 NVMe. Glück hat der, der noch M.2 nachrüsten kann, entweder per internem M.2 Slot oder PCIe Karte.

    Aber eigentlich gefällt mir dieser Lösungsansatz am besten: :D

    Kauf eines Systems mit mehr RAM ;)

    Leider auch der teuerste Ansatz.


    Genau genommen sollte man Systeme mit 2 GB und weniger gar nicht mehr kaufen und verkaufen erst recht nicht mehr.


    Ach ja übrigens:

    Willkommen im :qclub:

  • Na das wäre dann wohl ab wie... :) Hier sollte wohl 4 MB stehen. Musste selbst nochmals bei meinem Text zurück und GB durch MB ersetzen. MB ist heute einfach keine Maßeinheit mehr, bestenfalls für Cache.

    Ups, peinlich, danke für den Hinweis! Gleich korrigiert.

    Genau genommen sollte man Systeme mit 2 GB und weniger gar nicht mehr kaufen und verkaufen erst recht nicht mehr.


    Ach ja übrigens:

    Willkommen im :qclub:

    Danke & ja, ich habe auch gedacht mein Trecker humpelt als ich gesehen hatte, dass das 'nackte' System 200MB Swap belegte ohne dass ich irgendwas groß installiert oder gemacht hatte. 22 GB Swap bei 2 GB RAM finde ich arg unausgeglichen. Vor'm Kauf dachte ich noch, mit 2GB steht es viel besser da als die anderen kleinen Systeme mit 512MB oder 1GB, die auch angeboten werden. Aber das ist ein anderes Thema.

  • QTS ist inzwischen reichlich umfangreich an Funktionen, Diensten und Apps geworden und benötigt entsprechend auch ein Mehr an RAM. Mit 2 GB RAM darf genau genommen so gut wie nichts zusätzlich zum System laufen haben. Aber wer will dies schon. Unter 8 GB würde ich nicht mehr kaufen. Und nur Geräte die auch noch mit mehr RAM aufgerüstet werden können. Man weiß ja schließlich nie, was man alles noch mit dem NAS in Zukunft machen möchte.

  • Mir gefällt der Beitrag. Danke hierfür :beer:


    Ich stelle selbst bei meiner recht dicken QNAP mit 64GB RAM fest, dass sie ohne Not immer wieder die lahmen HDDs den beiden SSDs oder gar NVMes vorzieht... Warum auch immer. Zumal mein System hier selten mehr als 50% RAM-Load sieht. Muss mit der globalen Swappines - Einstellung in QTS zusammenhängen. Oder an RAM-Limitierten Docker-Containern, die dann meinen swappen zu müssen, anstatt einfach neuzustarten, wenn sie out of mem laufen. Allerdings versteh ich trotzdem nicht, warum dann manchmal die QTS-Angelegten Swap-Spaces auf den SSDs leer sind, aber die HDDs schon gut verwendet werden. Jetzt könnte man sagen: Eh egal! Aber NEIN! ist es nicht! Hab die letzten 5 Tage meine 3x 10TB Ironwolfs gegen 4x 20TB Toshiba Cloud Scales getauscht. Dadurch war das RAID 5 ständig im Rebuild/Resync und hat die HDDs gut beschäftigt. Da schon 4-5GB in den SWAP-Partions der HDDs waren, wurde das ganze System extremst laggy. Grafana, Influx, SQLDB. Alles furchtbar zäh, obwohl das eigentlich alles auf dem NVMe RAID laufen sollte und keine nennenswerte CPU-Load zu sehen war. QTS läuft auch auf SSDs. Aber der IOWait ist eben ein Hund und wenn dann auch ausgelagerte Daten wieder ewig auf sich warten lassen, machts das auch nicht besser.

    Finde es ja echt bescheiden, dass so performancerelevante Tweakeinstellungen nicht in der UI eingestellt werden können.