[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:
$ 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:
$ 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:
$ 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:
$ cat /var/log/change_swap.log
Start
2023-05-17T10:39:19+0200
Looking for swap partitions
Changing Swap
2023-05-17T10:39:22+0200
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
2023-05-17T10:39:22+0200
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
/dev/sdc8 partition 9687036 0 2
2023-05-17T10:39:22+0200
Filename Type Size Used Priority
/dev/sdc8 partition 9687036 0 2
/dev/sdc5 partition 2097148 0 2
2023-05-17T10:39:23+0200
Filename Type Size Used Priority
/dev/md256 partition 530108 0 -2
/dev/md322 partition 7235132 0 -3
/dev/sdc8 partition 9687036 0 2
2023-05-17T10:39:23+0200
Done. Bye.
Alles anzeigen
Hier das Skript.
#!/bin/bash
# (C) AD, 2023-05-17 11:59:53
SWAPLOG=/var/log/change_swap.log
QTSSWAP1=/dev/md256
QTSSWAP2=/dev/md322
QTSSWAP3=/share/CACHEDEV1_DATA/.swap/qnap_swap
SSDSWAP1=ssdswap1
PRIOSWAP1=2
logdate()
{
busybox date -Iseconds >> ${SWAPLOG}
}
logmsg()
{
echo $* >> ${SWAPLOG}
}
logswap()
{
logdate
cat /proc/swaps >> ${SWAPLOG}
}
echo Start > ${SWAPLOG}
logdate
logmsg Looking for swap partitions
SWAPDEV1=`blkid -o device -L "${SSDSWAP1}"`
if [ "xx" != "x${SWAPDEV1}x" ]; then
logmsg Changing Swap
logswap
swapon -p ${PRIOSWAP1} ${SWAPDEV1}
logswap
swapoff ${QTSSWAP3} ${QTSSWAP2} ${QTSSWAP1}
logswap
swapon ${QTSSWAP1} ${QTSSWAP2}
logswap
else
logmsg No swaps found.
fi
logdate
logmsg Done. Bye.
# sudo /etc/init.d/init_disk.sh mount_flash_config
# sudo vi /tmp/nasconfig_tmp/autorun.sh
# # chmod +x /tmp/nasconfig_tmp/autorun.sh
# sudo /etc/init.d/init_disk.sh umount_flash_config
Alles anzeigen
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