Externe Festplatte statt SD Karte an Raspi, Odroid & Co.

Einrichtung zum booten von Festplatte

Jeder Benutzer von Raspi, Odroid usw. kennt es: die SD Karten haben eine sehr überschaubare Lebenszeit.

Aber warum ist das so ? Es gibt zwei wesentliche Ursachen:

1. Begrenzte Anzahl vom Schreibzyklen

die Speicherzellen einer SD Karte lassen sich im Durchschnitt 10.000x , bei teuren Typen auch öfters beschreiben, danach ist die Speicherzelle defekt. Bei einem Betriebssystem wie zB Linux hat man nur sehr begrenzte Kontrolle darüber wie oft irgendwo etwas geschrieben wird. Auch wenn man für vielbenutzte Anwendungen Ram-Disks anlegt, so wird dennoch häufig auf die SD Karte geschrieben.

Bei mir hat noch keine länger als 1 Jahr durchgehalten, die meisten kürzer.

Trotzdem ist das nicht die wichtigste Ursache für Defekte, es gibt noch eine weitaus wichtigere:

2. Schreiben in großen Blöcken

Viele SD Karten haben Blockgrößen von 512 Byte.

Schreibt man auch nur ein einziges Byte auf die SD-Karte, so wird trotzdem immer ein voller Block geschrieben. Es werden einfach laufend Speicherzellen unnötig beschrieben.

Das hat zwei unangenehme Ergebnisse:

a) die oben beschriebene maximale Anzahl von Schreibzyklen ist viel früher erreicht als man denkt. Bis zu 512x weniger Schreibzyklen verträgt die SD Karte dadurch

b) ein Fehler beim Schreiben auf die SD Karte (z.B. durch Ausfall der Stromversorgung) verursacht immer mindestens 512 fehlerhafte Bytes, meist ein Vielfaches davon. Das ist der Grund warum bei vorzeitigem Abschalten der Stromversorgung (ohne Herunterzufahren) das Betriebssystem auf der SD Karte sehr leicht kaputt gehen kann.

 

Folgender Artikel hat drei Abschnitte (nur auf Odroid getestet, die Hinweise zum Raspi sind nur eine Vermutung wie es dort sein könnte):

* Zunächst wird der Hintergrund erklärt weil es immer hilfreich ist wenn man versteht was man tut.
* Und als zweites wird die Umstellung auf Festplatte in der Praxis gezeigt.
* Und schließlich noch Hinweise zur Stromversorgung.

Grundlagen zum Verständnis (noch keine Umstellungsarbeiten):

Festplatte statt SD-Karte:

als elegante Lösung dieses Problems benutzt man eine Festplatte anstelle der SD Karte. 2,5"-Festplatten sind sehr preiswert und brauchen nicht viel Strom.

Festplatten sind erheblich robuster als SD Karten, haben keine maximale Anzahl von Schreibzyklen und können auch bei Ausfall der Stromversorgung fast immer automatisch restauriert werden.

Partitionen:

wer sich ein z.B. Ubuntu Image auf einer SD Karte schon mal genauer angesehen hat weiß, dass es zwei Partitionen enthält:

* eine kleine (ein paar 100MB) Partition, diese enthält den Bootloader
* eine große (Rest der SD Karte), diese enthält das komplette Betriebssystem.

der Bootvorgang:

die ARM Prozessoren unserer kleinen Computer können von allen möglichen Quellen booten, was per Hardware festverdrahtet voreingestellt ist. Bei Odroid Raspi usw. ist es so eingestellt, dass nach dem Einschalten von SD Karte gebootet wird. Das ganze läuft so ab:

* Einschalten
* die CPU prüft ihre Eingangsleitungen und erkennt damit von wo gebootet werden soll, das ist bei uns festverdrahtet die SD Karte
* es wird also als erstes der Bootloader von der ersten, kleinen, Partition der SD Karte geladen und dieser gestartet
* dieser Bootloader hat eine Konfigurationsdatei "boot.ini". Dort steht was er tun soll. Vor allem steht hier, wo das Betriebssystem zu finden ist. Standardmäßig befindet sich dieses auf der zweiten Partition der SD Karte.
*der Bootloader lädt also das Betriebssystem von der 2. Partition der SD Karte und übergibt dann die Kontrolle an das Betriebssystem

der Bootloader befindet sich immer, zwangsweise, auf der ersten Partition der SD Karte, das kann auch nicht geändert werden. Selbst wenn wir eine Festplatte benutzen, der Botloader bleibt trotzdem auf SD-Karte. Die SD-Karte muss also immer im Rechner verbleiben. Sie wird allerdings nur für den Bootvorgang benutzt. Da hierbei nie auf die Karte geschrieben wird ist das problemlos und schadet der SD-Karte nicht.

Betriebssystem (z.B. Ubuntu) auf Festplatte:

das Betriebssystem und die Anwendungen sind das was die SD Karten kaputt macht. Dieses wollen wir also auf Festplatte auslagern. Es handelt sich hier um die komplette 2.Partition (die große) von der SD-Karte. Wir kopieren den Inhalt der Partiton 2 also komplett auf die Festplatte.

Nur zwei Einstellungen sind erforderlich:

1. Wir müssen dem Bootloader sagen, wo er das Betriebssystem findet, nämlich jetzt auf Festplatte.
2. wir müssen dem Betriebsystem sagen wo es sich befindet, und zwar auf Festplatte

ID-Nummern von SD-Karten, Festplatten usw:

alle Speichermedien (SD-Karten, USB-Sticks, USB-Festplatten usw) haben eine eindeutige Nummer, die UUID. Das ist eine längere Zahlenfolge.

Um die erforderlichen Änderungen machen zu können müssen wir die UUID der neuen Festplatte kennen. Wenn die Festplatte eingesteckt ist, so gibt man in der Konsole den Befehl  blkid  ein, es werden Zeilen für jedes Speichermedium ausgegeben, wir interessieren uns für die Festplatte, welche normalerweise den Devicenamen /dev/sda1 hat:

/dev/sda1: UUID="467ab5c8-d3e8-44d5-aa5c-165b5b8cba3e"

hier steht die UUID der Festplatte.

Jetzt gehts an die Arbeit: Einrichten einer externen Festplatte für das Betriebssystem:

in Fettschrift sind die Befehle welche man in der Konsole eingibt. Die Befehle beziehen sich auf einen Odroid mit Ubuntu und dürften beim Raspi fast identisch sein.

1. externe USB Festplatte anstecken

(ich gehe davon aus, dass die Festplatte bereits partitioniert ist. Wenn nicht, ist das mit fdisk /dev/sda vorher zu machen)

2. Festplatte formatieren:

mkfs.ext4  /dev/sda1

3. die gerade formatierte Festplatte einhängen

mkdir  /tmp/hd
sudo mount  /dev/sda1  /tmp/hd

4. das komplette Betriebssystem von SD-Karte auf die Festplatte kopieren

sudo  rsync  -avx  /   /tmp/hd

(auf manchen Rechnern ist der Befehl rsync noch nicht installiert. In diesem Fall mit  sudo  apt-get  install  rsync  diesen zuerst installieren)

5. die UUID der Festplatte ausdrucken

blkid   |   grep  sda1

6. dem Bootloader sagen, dass er das Betriebssystem von der externen Festplatte laden soll

cd   /media/boot   (hier ist die kleine Bootpartition beim Odroid, Beim raspi heißt dieses Verzeichnis /boot)
cp  boot.ini   boot.ini.backup   (die originale Datei sichern, beim Raspi heißt diese Datei cmdline.txt)

Jetzt die Datei  boot.ini   mit einem Texteditor öffnen (mit sudo), und folgende Zeile suchen:

setenv bootargs "root=UUID=467ab5c8-d3e8-44d5-aa5c-165b5b8cba3e rootwait ro ${condev} no_console_suspend .......

Hier steht die UUID der SD-Karte. Diese ist mit der vorher ausgedruckten UUID der Festplatte zu ersetzen. Bitte sonst nichts ändern ! Und die Datei speichern.

7. dem Betriebssystem auf der Festplatte sagen wo es sich befindet

cd  /tmp/hd/etc
cp  fstab   fstab.backup
  
(originale Datei sichern)

Jetzt die Datei  fstab   mit einem Texteditor öffnen (mit sudo), und folgende Zeile suchen:

UUID=467ab5c8-d3e8-44d5-aa5c-165b5b8cba3e  ......

Hier steht die UUID der SD-Karte. Diese ist mit der vorher ausgedruckten UUID der Festplatte zu ersetzen. Bitte sonst nichts ändern ! Und die Datei speichern.

8. wir sind fertig, jetzt noch die Festplatte aushängen:

sudo  umount  /tmp/hd

9. den Rechner neu starten, er wird jetzt und in Zukunft von Festplatte starten und auch dort laufen.

 

Zurücksetzen auf Betrieb ohne Festplatte:

In Punkt 6 haben wir ein Backup der Datei boot.ini gemacht. Dieses Backup wieder zurückkopieren und neu starten, dann läuft er wieder von SD Karte.

 

Stromversorgung:

externe USB Festplatten werden oft über das USB Kabel mit 5V versorgt. Das schaffen unsere Einplatinen-Rechner nicht. Es gibt folgende Alternativen:

* eine Festplatte mit eigenem Netzteil verwenden. Hier bieten sich z.B. USB Adaptergehäuse mit eigenem Netzteil an wo man eine (alte) 3,5" Platte einbauen kann.

* aktiven USB-Adapter mit eigenem Netzteil benutzen.

Nicht alle aktiven USB Adapter verdienen diesen Namen weil sie recht schwach ausgelegt sind, so wie der von mir benutzte. Ich habe deshalb einen 10.000uF Elko parallel zur 5V Leitung kurz vor der Festplatte an das USB Kabel gelötet (schwarzer und roter Draht). Damit klappt es auch mit meinem Billig-Adapter sehr gut.