Linux und moderne SSD-Speicher

ssdSSD-Speicher (Solid-State-Drive oder Solid-State-Disk, also Halbleiterlauferke) haben sich in den letzten Jahren zu festen Bestandteilen der PC-Architektur entwickelt. Entweder ersetzen sie komplett herkömmliche Festplatten, wie zum Beispiel in Laptops. Oder sie tragen zumindest das Betriebssystem – als großer Datenspeicher wird aus Kostengründen dann immer noch eine klassische Harddisk verwendet.

So ist es auch bei mir. Alle drei Jahre kommt bei mir ein neuer relativ leistungsstarker Arbeitsplatzrechner zum Einsatz und im Moment geht es gerade an die dritte Generation mit SSD Speicher. Allerdings rechnet es sich auch dieses Jahr noch nicht, komplett auf SSD zu setzen, was von der Geschwindigkeit her sehr schön wäre. Also nimmt die SSD das Betriebssystem auf und für die Daten gibt es eine 2TB Festplatte.

Vor 6 und auch noch vor 3 Jahren war es gar nicht so simpel das Linux-Betriebssystem speziell für den Einsatz einer SSD zu konfigurieren. Da mussten Dinge wie Alignment und Overprovisioning beachtet werden. Heute schaue ich mir an, ob das alles noch nötig ist, oder ob Linux selbst so schlau ist, sich für SSDs richtig einzustellen.

Linux Betriebssysteme

Nach ausgiebiger Internetrecherche habe ich 12 Kriterien gefunden, die von anderen als beachtenswert eingeschätzt werden, wenn man SSDs einsetzen will. Und ich klopfe nun die folgenden beiden aktuellen Linux-Varianten auf diese 12 Punkte hin ab:

  • OpenSUSE Leap 42.1 und
  • Ubuntu 14.04 LTS

SSD Speicher

Zum Einsatz kommt bei mir eine Samsung SSD 850 EVO M.2 120GB (MZ-N5E120BW). Der Formfaktor M.2 besagt dabei, dass der Speicher nicht mehr wie früher in einen Laufwerkschacht geschoben, sondern direkt auf das Motherboard gesteckt wird. Die Abmessungen betragen dabei nur 100 x 69,85 x 6,8 mm, auf den Bildern ist das gut zu sehen. Eine naheliegende Technologie, die unnötige Verkabelung einspart. Das erinnert mich übrigens an einen frühen Compaq Portable PC aus den späten 80er Jahren des letzten Jahrhunderts. Für den gab es eine 40MB Festplatte, die direkt auf einem Erweiterungsboard befestigt war.

ssdZwölf beachtenswerte Punkte beim Einsatz einer SSD unter Linux

Die folgenden Empfehlungen bezüglich SSDs habe ich im Internet gefunden. Manche sind etwas älter und möglicherweise heute gar nicht mehr relevant. Aber schauen wir es uns im Detail an:

1) Firmware Update durchführen

Mit Firmware ist hier die der SSD gemeint. An sich kein schlechter Vorschlag, vor der Installation die SSD auf einen aktuellen Stand zu bringen. Dazu muss man sich von der Herstellerseite im Internet ein Programm (meistens für Windows) herunter laden, mit dem man dann die Firmware der SSD aktualisieren kann. Für meine Samsung 850 EVO ist überhaupt keine Firmware im Internet verfügbar, das Thema hat sich also schnell erledigt. Den Check kann man also ruhig machen, ob heutzutage wirklich viele SSDs im Handel sind, deren Firmware bereits veraltet ist, lasse ich mal dahin gestellt.

2) BIOS Einstellung prüfen

Wie die erste, so hat auch die zweite Empfehlung noch nichts mit Linux zu tun. Hier soll geprüft werden, ob im BIOS bzw. UEFI des Rechners die Einstellung für den Punkt SATA Konfiguration auf AHCI steht und nicht auf IDE. AHCI ist das Advanced Host Controller Interface und damit gegenüber IDE die modernere Schnittstelle für den Serial-ATA-Controller.

Also kurz beim Rechnerstart das BIOS/UEFI aufrufen (oft die Entf- oder F8-Taste), ein wenig nach der SATA-Einstellung suchen und ggf. umstellen. Bei meinem neuen ASUS Motherboard findet man diese Einstellung  unter:
Advanced Mode – Advanced – PCH Storage Configuration – SATA Mode Selection.
AHCI ist bereits eingestellt, für mich ist also hier nichts weiter zu tun. Allerdings muss ich im UEFI eine andere Einstellung vornehmen um Linux installieren zu können. Unter:
Advanced Mode – Boot – Secure Boot – OS_Type
muss von Windows UEFI Mode umgestellt werden auf Other OS.

3) Over-Provisioning vorsehen

Als Over-Provisioning wird eine Technik bezeichnet, die auf der SSD eine Spare Area vorhält. Die Spare Area sind ungenutzte Blöcke, die weder dem Anwender noch dem Betriebssystem zur Verfügung stehen. Sie werden vom Controller der SSD für Techniken wie Read-Modify-Write, Wear Leveling und Bad Block Replacement genutzt. Ein größerer Over-Provisioning Bereich erhöht die Performance und die Lebensdauer der SSD.

So findet man im Internet viele Anleitungen 7% oder mehr des SSD-Speichers in Form eines unpartitionierten Bereichs dem Betriebssystem zu entziehen. Das kann man machen, wenn die Platte eh größer ist, als man sie eigentlich benötigt, muss man aber nicht.

Denn moderne SSDs, so wie die Samsung 850 EVO sehen intern bereits ein Over-Provisioning vor. Der Speicher ist an sich 128GB groß, verkauft wird er als 120GB SSD. Die fehlenden 8GB dienen unter anderem auch dem Over-Provisioning. Mit der Samsung-eigenen Magician-Software (Windows) ließe sich der Over-Provisioning Bereich vergrößern, was für den normalen Heimbereich jedoch unnötig ist.

4) Richtiges Alignment einstellen

Partition Alignment ist das korrekte Ausrichten der Partition an den Grenzen der Blöcke der SSD. Es soll dadurch verhindert werden, dass durch ein Schreibkommando zwei SSD-Blöcke neu geschrieben werden müssen, nur weil die Blockgrenzen überlappen.

Gleich zur Beruhigung, sowohl OpenSUSE Leap 42.1 als auch Ubuntu 14.04 LTS machen das bei der Installation von sich aus richtig. Es muss also nicht extra gerechnet werden.

Überprüfen lässt sich das richtige Alignment auf GPT-Platten zum Beispiel mit gdisk:

$ sudo gdisk -l /dev/sda
GPT fdisk (gdisk) version 0.8.8

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 234441648 sectors, 111.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 4F7DBE2A-AEA4-472A-8679-5EE9D7331E46
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 234441614
Partitions will be aligned on 2048-sector boundaries
Total free space is 38810477 sectors (18.5 GiB)

Number  Start (sector)  End (sector)  Size       Code  Name
   1            2048        321535   156.0 MiB   EF00  primary
   2          321536     195633151   93.1 GiB    8300

Wichtig für ein korrektes Alignment ist, dass sich alle Werte der Startsektoren ganzzahlig durch 2048 teilen lassen. Eine noch einfachere Möglichkeit das Alignment zu überprüfen, ist die Verwendung von parted:

$ sudo parted /dev/sda align-check opt 1
1 ausgerichtet
$ sudo parted /dev/sda align-check opt 2
2 ausgerichtet

5) Geeignetes Dateisystem verwenden

Eine Internetquelle rät von BTRFS ab, zumindest für OpenSUSE 13.2. Die Schreibaktionen für das Erstellen der BTRFS-Snapshots wären einer SSD nicht zuträglich. Ob das für OpenSUSE Leap 42.1 auch noch gilt, oder diese Aussage inzwischen generell hinfällig ist lasse ich mal dahingestellt. BTRFS wurde schließlich auch mit Blick auf SSDs entwickelt.

Auf jeden Fall ist EXT4 immer die richtige Wahl für Festplatten und auch für SSDs. EXT4 ist aktuell, stabil, schnell und auf jeden Fall das Dateisystem, mit dem man heute nichts falsch macht. EXT4 wird bei einer Neuinstallation von Ubuntu 14.04 LTS bereits vorgeschlagen, OpenSUSE Leap 42.1 will jedoch per default BTRFS installieren, was sich auf Wunsch natürlich ändern lässt.

6) Keine Swap-Partition auf SSD

Swapping erzeugt naturgemäß zahlreiche Schreibaktionen, wenn das Betriebssystem auslagern muss. Solche Schreibaktionen will man an sich nicht gerne auf einer SSD haben, die in der Menge der über die Lebenszeit aufnehmbaren Schreibaktionen ja doch beschränkt ist. Ausreichend RAM im Rechner wäre das beste Mittel um Swapping zu vermeiden. Wer zusätzlich eine herkömmliche Festplatte im System hat, der macht nichts falsch, die Swap-Partition auf der Festplatte anzulegen. In einem Laptop mit ausschließlich SSD-Speicher gibt es keine Alternative, hier gilt meine Nachbetrachtung am Ende dieses Artikels.

Beide Betriebssysteme, die ich hier betrachte, also Ubuntu 14.04 LTS und OpenSUSE Leap 42.1 wollen bei einer Neuinstallation die Swap-Partition auf die SSD legen, obwohl eine zusätzliche Festplatte im System vorhanden ist. Um das ggf. zu ändern, kann bei beiden Systemen, während der Installationsphase Einfluss auf die Partitionierung genommen werden.

7) /tmp in Ramdisk verlagern

Temporäre Dateien, die nach einem Reboot nicht mehr von Interesse sind, müssen auch nicht unbedingt auf die SSD geschrieben werden. Auf die Festplatte auch nicht – diese Dateien hält man besser in einer RAM-Disk, sofern der RAM-Ausbau dies zulässt. Eigenartigerweise machen beide Betriebssysteme das bei der Installation nicht von selbst. Zumindest nicht, wenn man von Hand die Partitionierung verändert hat.

Um /tmp in eine RAM-Disk zu verlagern, genügt ein Eintrag in die /etc/fstab. Die wird hier beispielsweise mit dem Editor nano geöffnet

sudo nano /etc/fstab

und dann ergänzt man die Zeile:

tmpfs /tmp tmpfs defaults,size=15%,mode=1777 0 0

Danach mit Strg-x, J und Enter abspeichern und beenden. Damit die Änderung wirksam wird, ist ein Reboot erforderlich.

size=15% beschränkt hier die Ramdisk auf max. 15% des installierten RAMs. Dieses Statement kann man auch weglassen, dann würde maximal die Hälfte des Speichers verwendet werden.

In Abhängigkeit vom Betriebssystem gibt es noch weitere Filesystembereiche, die in eine Ramdisk verschoben werden könnten, zum Beispiel /var/log, /var/run, oder /var/spool.

8) Read-Access-Time-Stamp abschalten

Linux speichert – im Unterschied zu Windows – nicht nur, wann eine Datei zuletzt verändert wurde, sondern zusätzlich, wann sie zuletzt gelesen wurde. Das bedeutet, zu jedem Lesezugriff würde noch ein Schreibzugriff erfolgen, der die Read-Access-Time setzt. Das wird selten wirklich benötigt und kann unterbunden werden um die SSD zu schonen. Seltsamerweise machen das beide Linux-Betriebssysteme nicht automatisch.

Diese Einstellung erfolgt ebenfalls nach der Installation über die /etc/fstab:

sudo nano /etc/fstab

jetzt suchen wir die Zeile mit der SSD. Wenn die SSD die Betriebssystemplatte ist, dann erkennt man sie am Mountpoint /. Bei mir sieht der Eintrag folgendermaßen aus:

UUID=3b0b303c-efd8-4a1a-b51b-3ca6223f3ad1 / ext4 errors=remount-ro 0 1

Dann ergänzen wir die Option noatime, so dass die Zeile jetzt so aussieht:

UUID=3b0b303c-efd8-4a1a-b51b-3ca6223f3ad1 / ext4 noatime,errors=remount-ro 0 1

Danach mit Strg-x, J und Enter abspeichern und beenden. Damit die Änderung wirksam wird, ist ein Reboot erforderlich. Die Punkte 7 und 8 können natürlich gleichzeitig erledigt werden.

9) TRIM aktivieren

Linux kann das Dateisystem anweisen, ungenutzte Bereiche zu suchen und diese per TRIM dem Controller der SSD zu melden. Der Controller führt dann in Ruhezeiten eine Garbage Collection durchführen, die diese Bereiche löscht und wieder freigibt. Regelmäßiges Aufräumen per TRIM tut der Performance und der Lebensdauer der SSD gut. Es gibt zumindest 4 Möglichkeiten TRIM durchzuführen:

a) Von Hand per Kommando fstrim

$ sudo fstrim -v /
/: 83038208 bytes were trimmed
$ sudo fstrim -v /
/: 0 bytes were trimmed

Hier zweimal hintereinander ausgeführt.

b) Automatisch beim Sytemstart

Dazu trägt man das fstrim-Kommando in die entsprechende Startup-Datei des Betriebssystems ein (/etc/rc.d/boot.local oder /etc/rc.local)

c) Automatisch per Cron-Job

Hier erstellt man zuerst eine Datei mit Namen trim im Verzeichnis /etc/cron.daily:

sudo nano /etc/cron.daily/trim

In die Datei schreibt man zwei Zeilen:

#!/bin/sh
fstrim /

Danach muss die Datei nur noch ausführbar gemacht werden mit:

sudo chmod +x /etc/cron.daily/tri

Das fstrim Kommando wird nun täglich automatisch ausgeführt.

d) Automatisch per Discard

Hier bekommt die SSD in der Datei /etc/fstab neben dem noatime von Punkt 8 oben auch noch ein discard verpasst. Das würde mit obigem Beispiel dann so aussehen:

UUID=3b0b303c-efd8-4a1a-b51b-3ca6223f3ad1 / ext4 discard,noatime,errors=remount-ro 0 1

Dies ist allerdings nicht die empfohlene Methode, das sie bei jeder Löschaktion sofort TRIM anstößt und so das System verlangsamen kann.

 

Ubuntu-Anwender müssen in Bezug auf Trimming nichts machen, das System besitzt einen wöchentlichen Cron-Job, der automatisch alle SSDs trimt. OpenSUSE macht hier von alleine nichts, zumindest nicht bei einem EXT4-Dateisystem. Hier ist die Variante c) zu empfehlen, wer möchte auch als cron.weekly.

10) I/O-Scheduler auf ‚deadline‘ setzen

Der I/O-Scheduler organisiert die Reihenfolge der I/O-Zugriffe auf die Festplatte. Der alte Complete Fair Queuing Scheduler (CFQ) – so liest man im Internet, würde zu Geschwindigkeitseinbußen bei SSDs führen. Deshalb soll auf den Deadline-Scheduler umgestellt werden, der gut für den Einsatz von SSDs wie auch für Harddisks ist. Eine Abfrage ergibt:

$ cat /sys/block/sda/queue/scheduler
noop [deadline] cfq

Bei beiden aktuellen Linux Betriebssystemen ist deadline inzwischen der Standard Scheduler, so dass hier nichts mehr zu tun ist.

11) Hibernation abschalten

Mit Hibernation wird das Versetzen eines Rechners in den Ruhezustand (Winterschlaf) bezeichnet. Ein anderes Wort dafür ist Suspend to Disk und daran erkennt man bereits, warum diese Funktionalität für SSDs nicht unbedingt gewollt ist. Das Schreiben des gesamten Speichers auf die Swap-Partition bei jedem Einschlafen des Rechners ergibt eine ziemliche Belastung für die SSD. Deshalb wird generell empfohlen, Hibernation abzuschalten.

Bei OpenSUSE kann das in den Einstellungen erfolgen, bei Ubuntu entfernt man das Paket pm-utils über die Softwareverwaltung. Bei Laptops kann ein Suspend to Disk aber durchaus gewünscht sein. Hier sollte man die Verzögerungszeit großzügig wählen, damit es nicht unnötig oft passiert.

12) Browser Cache deaktivieren

Firefox und andere Browser schreiben eifrig Cachedaten auf die SSD. Schreibzugriffe lassen sich minimieren, wenn den Browsern das Cachen ausgetrieben wird.

Am Beispiel Firefox funktioniert das wie folgt:

  • Menütaste
  • Einstellungen
  • Erweitert
  • Netzwerk
  • Kästchen „Automatisches Cache-Management ausschalten“ anhaken und darunter
  • den Speicherplatz auf 0 reduzieren.

Wer eine zusätzliche Festplatte im System hat und sein /home Verzeichnis dorthin gemountet ist, der braucht den Cache nicht zu deaktivieren. Firefox (und andere Browser sicher auch) cached nach /home/…

Nachbetrachtung: Was braucht man wirklich?

Moderne SSDs

Kehren wir kurz zurück zur Hardware. Wir sprechen im Jahr 2016 nicht mehr von SSDs der ersten oder zweiten Generation, sondern von inzwischen ausgereiften Speichern. Hier ein paar Daten zum meiner Samsung SSD 850 EVO M.2 120GB. Der Hersteller gibt eine Garantie über 5 Jahre und gewährleistet ein Schreibvolumen von 75TB über die gesamte Lebensdauer des Speichers (75TBW). Die MTBF (Mean Time Between Failures, also die Betriebsdauer zwischen zwei aufeinander folgenden Ausfällen) wird mit 1,5 Mio Stunden angegeben. Was bedeutet das?

Rechnet man die gesamte Schreibleistung von 75TB auf die 5 Garantiejahre um, so erhält man rund 42GB, die pro Tag durchschnittlich auf die SSD geschrieben werden können. Bei einer Plattengröße von 120GB ist das ein Drittel der Gesamtkapazität. Und die MTBF liegt bei sagenhaften 171 Jahren.

Für den Hausgebrauch scheint es also nicht erforderlich zu sein, Schonungsmaßnahmen für die SSD, so wie sie oben beschrieben werden, durchzuführen.

Fazit

Viele, der oben aufgeführten zwölf Punkte sind veraltet und gehören heute endgültig der Vergangenheit an. Andere kann man machen, muss es aber nicht. Moderne SSDs sind heute fast wie Festplatten zu behandeln und brauchen keine Sondereinstellungen.

Wer einen Laptop mit neuer SSD und aktuellem Linux einsetzt, der kann sich auf das Betriebssystem verlassen und braucht nichts weiter zu beachten. Lediglich eine Überprüfung, ob ein automatischer TRIM durchgeführt wird, würde ich anregen.

Für Serversysteme und Rechner mit zusätzlichen klassischen Festplatten, lässt sich mit einigen der oben genannten Punkte (speziell 5-9) ein wenig optimieren und die SSD von unnötigen Schreibzugriffen entlasten.

OpenSUSE Leap 42.1 und Ubuntu 14.04 LTS unterscheiden sich kaum in ihrem Vermögen SSDs zu unterstützen. Bei der Auswahl eines geeigneten Linux Betriebssystems können also ruhig andere Kriterien den Ausschlag geben.

 

10 Kommentare

  1. Michael

    Hallo Helmut!
    Ich warte auf eine SSD- Festplatte, die in der nächsten Woche kommen wird und mache mir schon jetzt Gedanken, wie ich Zorin (Ubuntu) dort richtig installiere. Ihre sehr gut strukturierte Info habe ich noch nicht vollständig abgearbeitet, aber ein paar Fragen werde ich sicherlich haben, es geht bei mir nie ohne. Dafür hasst mich (wahrscheinlich) meine Frau. Aber ernst: Braucht die Welt einen weiteren Personal Blog? „ja!“ lautetet meine Antwort.
    Vielleicht werden Sie mal auch irgendwann Fragen zum Fasten haben, einige Erfahrung habe ich bereits: in den letzten 25 Jahren unregelmäßig, gesamt vielleicht 12 mal, je von 10 bis 15 Tagen, nur mit Wasser. Viel darüber gelesen und mit mir experimentiert.

    Viele Grüße, Michael

  2. Stefan

    In Leap 42.1 ist in /etc/cron.weekly ein Skript für die wöchentliche Ausführung von fstrim. Man braucht sich also um nix kümmern.

  3. Jürgen

    Hallo Helmut,

    vielen Dank für diesen informativen Beitrag.

    Als blutiger Linux-Anfänger mit viel Win-Software möchte ich in Kürze ein Dual-Boot-System mit Win 10 pro / Ubuntu 14.04 aufsetzen. Startlaufwerk soll eine Samsung 950 Pro M2 SSD mit 500 GB sein, 2 zusätzliche HDDs.
    Empfiehlt es sich, zuerst Win 10, dann Ubuntu zu installieren, dabei beiden OS je die halbe SSD zur Verfügung zu stellen? Sind bei dieser Konfiguration sonstige Vorbereitungen erforderlich?

    Über Tipps freut und bedankt sich vorab

    Jürgen

  4. Helmut (Beitrag Autor)

    Also ich kenn jetzt Windows 10 nicht, aber ich würde immer zuerst Windows installieren. Aus dem ganz einfachen Grund, weil ich in Ubuntu mehr Vertrauen habe, dass es mit einem fremden Betriebssystem, das sich bereits auf der Platte befindet, richtig umgeht. Das hat früher mit Win7 oder XP immer gut funktioniert. Dem Windows musst Du halt beibiegen, dass es die halbe Platte frei lässt, aber das dürfte kein Problem sein. Viel Vergnügen.

  5. Christian Bela

    Hallo,

    ich habe Xubuntu 16.04.01 neu installiert und bei mir hatte der Punkt 8) zur Folge, dass Xubuntu nicht mehr gestartet wurde; jedenfalls wurde nicht mehr die Desktop-Umgebung geladen, sondern nur noch das Terminal. Ein Umkehren der Änderung über das Terminal schien nicht zu helfen, deswegen habe ich nochmal alles neu installiert.

    Grüße

  6. Helmut (Beitrag Autor)

    Google mal danach, ob Dein Xubuntu ein Problem mit einem noatime Parameter in der /etc/fstab hat. Sonst war es vielleicht nur ein Schreibfehler beim Editieren der Datei.

  7. Bennie

    Hallo,

    ich nutze Ubuntu 16.04 LTS auf einem Laptop mit 8GB RAM und einer SSD Samsung MZ7TE 256

    vor 4 Tagen habe ich wohl allzu ambitioniert die folgenden Optimierungsschritte durchgeführt:

    1. Firmware Update durchführen: war aktuell
    2. BIOS steht auf AHCI und ist aktuell
    3. Over-Provisioning nicht verändert
    4. Alignment überprüft, war ok
    5. /tmp in Ramdisk verlagert
    6. Read-Access-Time-Stamp abgeschaltet
    7. TRIM manuell durchgeführt

    Leider fährt Ubuntu nun nicht mehr hoch (Bildschirm bleibt nach dem Bootloader schwarz). wähle ich eine andere Bootoption aus, kann ich mich auf einer Art Kommandozeilenebene einloggen, komme aber dann auch nicht weiter. Folgende Meldung, mit der ich leider nichts anfangen kann:
    /usr/lib/update-notifier/update-motd-fsck-at-reboot: 33: /usr/lib/update-notifier/update-motd-fsck-at-reboot: cannot create /var/lib/update-notifier/fsck-at-reboot: Read-only filesystem
    Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-66-generic x86_64)

    Booten mit Windows funktioniert noch (Dualboot mit GRUB)

    Was kann ich tun?

  8. Helmut (Beitrag Autor)

    cannot create /var/lib/update-notifier/fsck-at-reboot: Read-only filesystem

    Das liest sich für mich so, als könnte besagte Datei in /var/lib/… nicht geschrieben werden, weil es auf einem read-only Filesystem liegen würde. Probier mal Deinen Punkt 5 und 6 rückgängig zu machen, vielleicht ist in der fstab was schief gegangen.

  9. Bennie

    Hallo Helmut,
    Danke für die schnelle Antwort!
    Wie kann ich diese Punkte ändern, wenn Ubuntu nicht startet?
    Beste Grüße

  10. Helmut (Beitrag Autor)

    Du hattest geschrieben, dass Du Dich auf Kommandozeilenebene einloggen kannst. Darüber solltest Du an die /etc/fstab rankommen.

Schreiben Sie einen Kommentar

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