Neuigkeiten:

Privates MODX und LINUX BLOG, User Registrierung ist deaktiviert! Fragen oder Tipps? Bitte per Matrix: @jolichter:tchncs.de

Hauptmenü

SSD Optimierung

Begonnen von Jo, 2011-10-21 | 12:57:03

« vorheriges - nächstes »

Jo

Update: 2019-März
bei SSD setzte ich btrfs (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

WICHTIG:
  • Verwendet beim Betrieb von SSDs im Bios den AHCI Modus und nicht den IDE Modus
  • Defragmentierung ist sinnlos und würde nur die Lebenszeit der SSD verringern
  • Bei NVMe SSD (z.B. Samsung 970 EVO/PRO) muss UEFI Modus geschaltet werden, Legacy BIOS Mode wird nicht unterstützt

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 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 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
  • Dateisystem FAT32: /boot/efi/ auf nvme0n1p1 (100MB)
  • Dateisystem btrfs: swap auf nvme0n1p2 (8GB wegen tmpfs), root auf auf nvme0n1p3 (30GB) und home auf nvme0n1p4 (restlichen Speicherplatz)

# /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 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