ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.

Installation auf Flashmedien

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/Tango/media-flash.png Dieser Artikel soll einen kurzen Überblick verschaffen, wie eine SD-Karte für optimale Geschwindigeit vorzubereiten ist, um darauf ein Ubuntu-/Linuxsystem optimal zu betreiben. Der Artikel selber versteht sich als Vorbereitung für die Installation auf externen Speichermedien.

Da Linux standardmäßig für die Nutzung auf klassischen Festplatten optimiert ist, soll dieser Artikel dabei helfen, Zugriffszeiten und Schreibzugriffe zu reduzieren bzw. zu optimieren. Während bei einer normalen Festplatte bei Änderungen einer Datei nur die zu ändernden Daten neu geschrieben bzw. erweitert werden, müssen bei einer SD-Karte ganze Bereiche ausgelesen und neu geschrieben werden. Dieses mag bei großen Dateien unwichtig sein (ob nun 1004 MiB statt 1000 MiB neu geschrieben werden), aber wenn viele kleine Dateien geschrieben werden müssen (z. B. 3 Logdateien á 4 KiB = 12 KiB oder 3 × 4 MiB = 12 MiB) die verteilt auf der SD-Karte liegen, führt dieses zu erheblichen Geschwindigkeitseinbrüchen beim Schreibvorgang. Um dieses zu verhindern, kann das Speichermedium dahingehend optimiert werden, Schreibvorgänge vorzuhalten und erst ab einer gewissen Größe diese, sozusagen "in einem Rutsch", abzuarbeiten.

Es empfiehlt sich, die SD-Karte nicht während der Installation, sondern bereits im Vorfeld entsprechend zu optimieren. Die benötigten Daten zur optimalen Partitionierung liefert das Tool Flashbench {en}, welches erst kompiliert bzw. installiert werden muss.

Hinweis:

Da Speicherkarten bzw. -Sticks grundsätzlich, bis auf extrem teure Sonderausführungen, sehr langsam sind im Vergleich zu Festplatten, empfiehlt es sich immer, dass ein Lubuntu bzw. Xubuntu als Grundsystem für die Installation genutzt wird, da diese Systeme bereits für Benutzung auf leistungsschwacher Hardware ausgelegt sind. Außerdem empfiehlt sich mindestens eine SD-Karte der Geschwindigkeitskategorie Class 6 oder höher!

Hinweis:

Im Folgenden ist /DEV/SD_KARTE immer durch den tatsächlichen Datenträger zu ersetzen und /dev/SD_KARTE1, /dev/SD_KARTE2, usw. durch verschiedene Partitionen darauf (siehe auch Systeminformationen ermitteln).

Flashbench Installation

Aus Quellcode kompilieren

Für das Kompilieren wird folgendes Metapaket installiert[1]:

  • build-essential

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install build-essential 

sudo aptitude install build-essential 

Jetzt muss die aktuelle Version von Flashbench {dl} heruntergeladen und anschließend des Archiv entpackt [2] werden.

Nun wird ein Terminal geöffnet und in das entpackte Verzeichnis gewechselt (XYZ ist entsprechend der Version anzupassen). Das Programm wird durch Eingabe des Befehles make kompiliert [3][4]:

cd flashbench-XYZ
make 

Nun stehen im selben Verzeichnis 2 neue (flashbench + erase), ausführbare Dateien zu Verfügung:

-rw-rw-r-- 1 user user 18092 Aug 10 00:10 COPYING
-rw-rw-r-- 1 user user  2872 Aug 10 00:10 dev.c
-rw-rw-r-- 1 user user   521 Aug 10 00:10 dev.h
-rw-rw-r-- 1 user user 15968 Aug 10 00:13 dev.o
-rwxrwxr-x 1 user user 13004 Aug 10 00:13 erase
-rw-rw-r-- 1 user user   679 Aug 10 00:10 erase.c
-rw-rw-r-- 1 user user 11208 Aug 10 00:13 erase.o
-rwxrwxr-x 1 user user 98129 Aug 10 00:13 flashbench
-rw-rw-r-- 1 user user 22024 Aug 10 00:10 flashbench.c
-rw-rw-r-- 1 user user 86176 Aug 10 00:13 flashbench.o
-rw-rw-r-- 1 user user   364 Aug 10 00:10 Makefile
-rw-rw-r-- 1 user user  5085 Aug 10 00:10 README
-rw-rw-r-- 1 user user 17196 Aug 10 00:10 vm.c
-rw-rw-r-- 1 user user  1576 Aug 10 00:10 vm.h
-rw-rw-r-- 1 user user 68288 Aug 10 00:13 vm.o

PPA

Es wird ein inoffizielles PPA [5] zur Verfügung gestellt, über welches Flashbench installiert [1] werden kann.

Adresszeile zum Hinzufügen des PPAs:

  • ppa:lasall/flashbench

Hinweis!

Zusätzliche Fremdquellen können das System gefährden.


Ein PPA unterstützt nicht zwangsläufig alle Ubuntu-Versionen. Weitere Informationen bietet die Wiki/Vorlagen/PPA/ppa.png PPA-Beschreibung vom Benutzer/Team lasall.

Damit Pakete aus dem PPA genutzt werden können, müssen die Paketquellen neu eingelesen werden.

Mit Flashbench die Erasureblockgröße ermitteln

Mit Flashbench {en} kann schnell und sicher die Erasureblockgröße von Flashmedien ermittelt werden. Je nachdem, ob Flashbench nur kompiliert oder richtig installiert wurde, werden folgende Befehle zum Starten benötigt [3]:

  • Flashbench nach Kompiliervorgang im Quellverzeichnis ausführen:

    sudo ./flashbench -a /dev/SD_KARTE  --blocksize=1024 
  • Flashbench nach Installation ausführen:

    sudo flashbench -a /dev/SD_KARTE  --blocksize=1024 

(verkürzte) Ausgabe Flashbench
align pre on post diff
8 MiB 8388608 724µs 1.04ms 768µs 299µs
4 MiB 4194304 741µs 1.08ms 788µs 317µs
2 MiB 2097152 745µs 950µs 811µs 171µs
1 MiB 1048576 745µs 945µs 807µs 169µs

Die Ausgabe ist auf einen "Sprung" in der letzten Spalte (diff) abzusuchen; (normalerweise zw. 2 MiB und 16 MiB). In diesem Beispiel sieht man zwischen 2 MiB und 4 MiB einen plötzlichen Anstieg der Differenzzeiten von 171µs auf 317µs. Dieses ist die sogenannte Erasureblockgröße (in diesem Falle 4 MiB), mit der ab hier gerechnet wird.

Hinweis:

Was ist der Erasureblock? Als Erasureblock wird der Block bezeichnet, welcher bei allen Flashmedien komplett ausgelesen und neu geschrieben werden muss, um Daten auf einem Flashmedium zu ändern. Hinkendes Beispiel: Um einen "Plattfuß" am PKW zu beheben, müssen alle 4 Reifen (4 MiB-Block) ab- und wieder angeschraubt werden, obwohl eigentlich nur ein Reifen (1 Bit) gewechselt werden muss.

Werte

Kurze Übersicht der Werte, mit denen im weiteren Verlauf gearbeitet wird:

Ermittelte Werte
Erasureblocksize 4 MiB gemessen mit Flashbench
SD-Karten Pagesize 8 KiB Standardwert von SD-Karten
Blocksize ext4 4 KiB
stride-Wert ext4 2 2x Blocksize 4KiB = 8 KiB Pagesize
stripe-size ext4 512
optimale Sektorgröße 8192 jede Partion muss auf ein Vielfaches von 8192 beginnen, pro Sektor 512 Byte * 4 MiB Erasuresize = 8192 Sektoren

Partitionieren der SD-Karte

Achtung!

Beim Formatieren des Datenträgers gehen alle darauf befindlichen Daten verloren.

Mit parted steht ein Tool zur Verfügung, dass das manuelle Rechnen für optimales Alignment erspart.

  1. Zuerst wird in den interaktiven Modus für den entsprechenden Datenträger gewechselt:

    sudo parted -a optimal /dev/SD_KARTE 
  2. Anschließend wird eine neue Partitionstabelle erstellt:

    mklabel msdos 
  3. Und dann die Einheit für Ein- und Ausgabeformat auf das besser lesbare MiB gesetzt.

    unit MiB 
  4. Anschließend wird die erste Partition angelegt. STARTWERT und ENDWERT sind dabei Anfangs- und Endwert vom Anfang des Datenträgers gemessen und werden in MiB angegeben. Die Differenz STARTWERT - ENDWERT muss durch den mit flashbench ermittelten Wert teilbar sein.
    Für den Bootloader sollten am Anfang der Platte ca. 2 MiB freigelassen werden.

    mkpart primary ext4 STARTWERT ENDWERT 

    Hinweis:

    Alle weiteren Partitionen werden mit dem selben Befehl (nur angepassten Start- und Endwerten) erstellt.
    Welche Größe die Partitionen haben müssen/sollten und welche Partitionen nötig sind wird im Artikel Partitionierung erklärt.

  5. Anschließend wird von Units auf Sektoren umgestellt:

    unit s 
  6. Nun sollte die Konfiguration überprüft werden:

    print 

    Die Partitionen sollten nun jeweils auf einer ungeraden Zahl enden, damit die nachfolgende Partition auf einem Vielfachen der optimale Sektorgröße (im Beispiel 8192) beginnen kann!

  7. Mit align-check opt N kann geschaut werden, ob die Partition N (natürliche Zahl) korrekt ausgerichtet ist. Ist dies der Fall, sieht man eine Ausgabe der Form:

    1 aligned 

Dateisystem anlegen

Nun müssen die Dateisysteme für die erstellten Partitionen, z.B. für / und /home mit folgendem Befehl, entsprechend den oben gegebenen Werten, angelegt werden:

sudo mkfs.ext4 -O ^has_journal -E stride=2,stripe-width=512 -b 4096 -L SDroot  /dev/SD_KARTE1
sudo mkfs.ext4 -O ^has_journal -E stride=2,stripe-width=512 -b 4096 -L SDhome  /dev/SD_KARTE2 

Erklärung der Parameter:

mkfs.ext4 Parameter
-O ^has_journal kein Journal anlegen
-E Stride=2,stripe-width=512 Stride=2 bedeutet 2x 4096 Byte Blockwidth = 8 KiB
stripe-width=512 ist der Erasurewert -> 512 (*8 KiB Blockwidth=4 MiB Erasuresize)
-b Blockwidth 4096 Byte
-L Name der Partition (optional)

Nun ist die SD-Karte sowohl entsprechend ausgerichtet (Alignment) als auch das Dateisystem entsprechend modifiziert. Das Grundsystem kann nun installiert werden.

Hinweis:

Während der Installation ist darauf zu achten, das als Installationsart "etwas anderes" angeklickt wird und die Partitionen NICHT formatiert werden!

Nach der Installation sollten/können noch einige Parametern geändert werden. Dazu sind die folgenden Dateien mit dem Editor zu bearbeiten:

Datei Ergänzen/Bearbeiten Auswirkung
/etc/sysctl.conf vm.swappiness=0 Auslagerung auf die Swap-Partition maximal hinauszögern
vm.vfs_cache_pressure=50 50% RAM reservieren für das Cachen/Vorhalten von Dateien
vm.dirty_ratio=40 in %, Speicherbelegung für Vordergrund-Schreibcache
vm.dirty_background_ratio=20 in %, Speicherbelegung Hintergrund-Schreibcache
vm.dirty_writeback_centisecs=12000

Achtung!

Datenverlust. Zwingt das System, geplante Schreibvorgänge auf der Festplatte solange vorzuhalten, bis der Wert abgelaufen ist. Problematisch bei plötzlichem Absturz des Systems da möglicherweise die komplette Zeitspanne in den Logdateien fehlt und die Fehlersuche somit wesentlich erschwert wird, bzw. Produktivdaten, welche vorgehalten aber nicht geschrieben wurden, verloren gehen!

Wert in hundertstel Sekunden. In diesem Beispiel werden erst nach 2 Minuten (=12000 Centisecs) Daten aus dem Speicher auf die SD-Karte schreiben
/etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop" (erweitert um elevator=noop, siehe GRUB 2/Konfiguration)
Anschließend GRUB aktualisieren.
Weist den Kernel an, die Schreibverwaltung an den Hypervisor zu übergeben.

Für weitere Optimierungsmöglichkeiten empfiehlt sich ein Blick ins Wiki zum Thema SSD-Festplatten.

ubuntuusers.local › WikiInstallation auf Flashmedien