BLOG

Computer & Software => LINUX => Thema gestartet von: Jo am 2011-10-21 | 12:57:03

Titel: SSD Optimierung
Beitrag von: Jo am 2011-10-21 | 12:57:03
Update: 2019-März
bei SSD setzte ich btrfs (https://wiki.ubuntuusers.de/Installieren_auf_Btrfs-Dateisystem/) (better fs) als Dateisystem ein, damit ist das Journaling nicht so umfangreich


SSD (solid state drives) Optimierung unter LINUX
Eine SSD lässt sich ausgezeichnet unter aktuelle LINUX-Distributionen mit dem Dateisystem ext4 oder btrfs betreiben und macht euren PC Beine.

Quelle: wiki.ubuntuusers.de/SSD (https://wiki.ubuntuusers.de/SSD)

WICHTIG:

HINWEIS:
Da ext4 und btrfs ausgeklügelte Schreibstrategien und Datenträgeraufteilungen verwenden, um Fragmentierung zu vermeiden, sei hier nochmal darauf hingewiesen: Besonders auf LINUX-Desktop-Systemen ist Fragmentierung kein wirkliches Problem und eine Defragmentierung ist hier in der Regel nicht notwendig. Selbst bei älteren rotierenden Festplatten habe ich LINUX noch NIE defragmentiert.

TRIM (https://de.wikipedia.org/wiki/TRIM) ist ein Befehl zur Markierung ungenutzter oder ungültiger Datenblöcke auf Speichermedien zum Zweck der späteren Wiederbeschreibung und wird seit dem Kernel 2.6.33 untestützt. Der Trim-Befehl wird seit Ubuntu 14.04 (Mint 17) per Cron-Job einmal pro Woche automatisch gestartet. Allerdings nur auf SSDs von Samsung und Intel. Dafür ist das Script "/etc/cron.weekly/fstrim" verantwortlich.

Um zu überprüfen, ob eure SSD (nicht NVMe SSD!) die TRIM-Funktion unterstützt, nutzt man den folgenden Befehl per Terminal:
sudo hdparm -I /dev/sda | grep -i TRIM Bei meiner Samsung 840 Pro sieht das dann so aus:
    *    Data Set Management TRIM supported (limit 8 blocks)
    *    Deterministic read ZEROs after TRIM
Ein Stern (*) vor der Ausgabe, zeigt dass die Option verfügbar ist.

Manuell trimmen per Terminal:
sudo fstrim -v /oder nur home
sudo fstrim -v /home


Update: Ein sofortiges Trim (Online Discard) über den Parameter "discard" in den Mount-Optionen der Datei "/etc/fstab" ist inzwischen nicht mehr empfehlenswert, da das bei einigen SSDs zu Leistungsnachteilen führt.

Nichtsdestotrotz sollte man die Datei fstab (https://wiki.ubuntuusers.de/fstab/) manuell per:
VISUAL=gedit sudoedit /etc/fstaboder wenn KDE:
VISUAL=kate sudoedit /etc/fstabanpassen, so dass sie dann z.B. wie folgt aussieht - wenn Dateisystem ext4, root auf sda1 und home auf sda2 liegt:
# root on /dev/sda1
UUID=EIGENE_FESTPLATTE / ext4 noatime,commit=30,errors=remount-ro 0 1
# /home on /dev/sda2
UUID=EIGENE_FESTPLATTE /home ext4 noatime,commit=30,errors=remount-ro 0 2
# swap on /dev/sda3
UUID=EIGENE_FESTPLATTE none swap sw 0 0
# dynamic RAMDisk
tmpfs /tmp tmpfs defaults,noatime,size=20%,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime,size=5%,mode=0777 0 0
(noatime -> Dateizugriffszeiten nicht speichern | commit=30 -> Dateisystemtabelle wird nur alle 30 Sekunden auf Festplatte geschrieben)

Beispiel NVMe SSD

# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=EIGENE_FESTPLATTE  /boot/efi       vfat    umask=0077      0       1
# swap was on /dev/nvme0n1p2 during installation
UUID=EIGENE_FESTPLATTE none            swap    sw              0       0
# / was on /dev/nvme0n1p3 during installation
UUID=EIGENE_FESTPLATTE /               btrfs   defaults,subvol=@ 0       1
# /home was on /dev/nvme0n1p4 during installation
UUID=EIGENE_FESTPLATTE /home           btrfs   defaults,subvol=@home 0       2
# dynamic RAMDisk
tmpfs /tmp tmpfs defaults,noatime,size=20%,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime,size=5%,mode=0777 0 0
(noatime = Dateizugriffszeiten nicht speichern)


Die UUID einer Partition lässt sich mit blkid lesen, z.B. Festplatte 1, primäre Partition 1 (bei mir ist das root):
sudo blkid /dev/sda1und Festplatte 1, primäre Partition 2 (bei mir ist das home):
sudo blkid /dev/sda2und Festplatte 1, primäre Partition 3 (bei mir ist das swap):
sudo blkid /dev/sda3
wenn NVMe SSD wie im oberen Beispiel:
sudo blkid /dev/nvme0n1p1sudo blkid /dev/nvme0n1p2sudo blkid /dev/nvme0n1p3sudo blkid /dev/nvme0n1p4

Der LINUX-Kernel stellt  tmpfs (https://de.wikipedia.org/wiki/Tmpfs) bereit. Tmpfs unterscheidet sich von einer LINUX Ramdisk insofern, als Speicher dynamisch alloziert wird und weniger genutzte Seiten in einen Swap-Bereich ausgelagert werden können.
(die /tmp Verzeichnisse benutzen ein Sticky Bit, daher das "mode=1777")

Die Logs lege ich nicht ins Ram, da sonst mein Apache den Start verweigert.
Grund: "/var/log/apache2" fehlt nach dem Startup. Also entweder das Startskript patchen oder es sein lassen. Davon abgesehen würde ich Logfiles ungern auf eine Ramdisk legen, da diese beim Neustart gelöscht werden.
Hinweis: Ab dem Kernel 2.6.35 werden /var/run und /var/lock automatisch ins RAM ausgelagert.

Einstellung der swap und tmpfs nach Neustart prüfen, z.B.:
df -htmpfs          794M  1,2M  792M  1% /tmp
tmpfs          199M    0  199M  0% /var/tmp

Hinweis: ohne SWAP-Speicher könnte es trotz genug Arbeitsspeicher zu Problemen kommen




Firefox Cache ins RAM verlegen
(gilt auch für auch Firefox-ESR und Pale Moon)

Browser starten und in der Adressleiste about:config eingeben.

Dann irgendwo auf dem leeren Bildschirm im Browser, unter about:config,
einen Rechtsklick ausführen und auf "Neu" klicken. Hier einen neuen String mit dem Namen browser.cache.disk.parent_directory und dem Wert /tmp erstellen. Das muss für jeden User wiederholt werden.


SMART Werte von NVMe SSD auslesen (z.B. Samsung 970 PRO)
sudo apt install nvme-clilisten
sudo nvme listInfos lesen
sudo nvme --smart-log /dev/nvme0n1


.xsession-errors deaktivieren (wer das nicht braucht)
Wenn ihr MINT 17, 18 oder 19 benutzt, geht das ohne Skript per "MDM Login Manager", dort könnt ihr unter "Optionen", die Sitzungsausgabe (.xsession-errors) begrenzen und filtern (siehe Bild).

Wenn nicht, legt eine ausführbare del-xsession-errors.sh Datei mit folgenden Inhalt an:
#!/bin/sh
# löscht ~/.xsession-errors beim starten
rm -f ~/.xsession-errors
dann diese Datei in euren Autostart kopieren, bei KDEneon wäre das der Ordner: /home/USER/.config/autostart/
Unter Systemeinstellungen -> Starten und Beenden -> Autostart,  könnt ihr das Skript dann hinzufügen (siehe Bild).

Oder noch einfacher das unveränderliche Attribut auf die Datei zu setzen, wodurch verhindert wird das ein Prozess etwas darauf schreibt:
rm -f ~/.xsession-errors
touch ~/.xsession-errors
sudo chattr +i ~/.xsession-errors

Die unveränderbar gemachte Datei wieder veränderbar machen (für den Fall das die Datei für eine Fehlersuche benötigt wird):
sudo chattr -i ~/.xsession-errors

PS:
Infos zu Windows 7 oder 8.x und SSD (habe das so in meiner VirtualBox mit Win 7 gemacht): Defragmentierung, Superfetch und Prefetch deaktivieren (https://www.pc-magazin.de/ratgeber/windows-8-1-ssd-einstellungen-optimal-windows-7-1991009.html)