Raspberry PI von USB Festplatte booten

Vorwort:

Der Raspberri PI (kurz Raspi) hat keine Festplatte und bootet sein System (hier Raspian) von einer SD Karte. Das mag für viele Anwendungen OK sein, 

aber für einen 24/7 Linux-Betrieb ist eine SD Karte ungeeignet. Ich möchte hier eine Lösung vorstellen, die die SD Karte zwar nicht komplett überflüssig

macht, aber zumindest die Verwendung auf den Bootvorgang beschränkt. Danach läuft Raspian auf einer USB Festplatte, oder wer mag auch auf einem

USB Stick (das ist nicht viel besser als SD, aber zu Testzwecken natürlich auch machbar).

Vorraussetzung:

Linux oder OSX  um die Konfiguration durchzuführen.

Aktives USB Hub oder Festplatte mit eigener Stromversorgung.

Anmerkung:

Dieses How-To kann auch für vorhandene Installationen auf SD Karte verwendet werden. Statt das Raspian Image herunter zu laden, erstellst du dir einfach mit dd oder

unter Windows ein eigenes Abbild der kompletten SD Karte und verwendest es genauso weiter wie den Download.

So gehts:

Raspian herunterladen und entpacken oder wie oben erwähnt vorhandene SD Karte imagen.

{code lang:bash hidden:false}

unzip *wheezy*.zip

{/code} 

Nun müssen wir die SD Karte bootfähig machen. SD Karte einstecken und

{code lang:bash hidden:false}

dmesg

{/code} 

…eintippen und schon müsste man sehen wie das Gerät / die SD im Kernel adressiert wird.

In meinem Fall /dev/mmcblk0

Wenn der PC in den die SD eingelegt wurde einen Automount durchführt, also das Dateisystem der Karte einhängt, muss dieses wieder unmouted werden.

{code lang:bash hidden:false}

for i in $(mount | grep ^“/dev/mmcblk0″ | awk ‚{print $1}‘); do sudo umount $i; done

{/code} 

Jetzt muss noch die SD Karte gelöscht werden.

{code lang:bash hidden:false}

sudo dd if=/dev/zero of=/dev/mmcblk0 bs=1 seek=446 count=64

{/code} 

Nun müssen wir das Raspian Image mit fdsik untersuchen.

{code lang:bash hidden:false}

sudo fdisk -l *wheezy*.img

{/code} 

In der nun folgenden Ausgabe sieht man zwei Partitionen:

{code lang:bash hidden:false}

Gerät boot. Anfang Ende Blöcke Id System
wheezy-raspbian.img1    8192     122879     57344     c    W95 FAT32 (LBA)
wheezy-raspbian.img2    122880     3788799     1832960    83 Linux

{/code} 

Hier sieht man nun die Bootpartition (W95 FAT32) mit Start und Endblock (122879).

Wir rechnen also auf den Endblock +1 drauf und erhalten 122880.

Nun muss die Bootpartition auf die SD Karte übertragen werden.

{code lang:bash hidden:false}

 sudo dd if=wheezy-raspbian.img of=/dev/mmcblk0 bs=512 count=122880

{/code} 

Nun noch die Partitionierung der SD Karte korrigieren:

 {code lang:bash hidden:false}

 sudo parted /dev/mmcblk0 rm 2

{/code} 

und die Installation der Boot Partition ist abgeschlossen.

Jetzt müssen wir Raspian beibringen das Root Dateisystem auf der USB Festplatte zu suchen.

Dazu müssen wir die SD Karte einbinden (mounten).

{code lang:bash hidden:false}

sudo mount /dev/mmcblk0p1 /mnt 

{/code} 

Bootparameter anpassen:

{code lang:bash hidden:false}

sudo vi /mnt/cmdline.txt

{/code} 

In der Zeile steht ein Parameter root=/dev/mmcblk0p2. Diesen einfach auf root=/dev/sda2 ändern und die SD Karte unmounten.

{code lang:bash hidden:false}

sudo umount /mnt

{/code} 

Nun ist die SD Karte komplett fertig und einsatzbereit. Bei der Festplatte, die das Rootsystem beinhalten wird gegen wir ähnlich vor.

Festplatte anstecken und mit

{code lang:bash hidden:false}

dmesg

{/code} 

den Gerätenamen in Erfahrung bringen. In meinem Fall /dev/sdb

Um einem eventuellen Automount etgegen zu wirken, hier noch der Unmount:

{code lang:bash hidden:false}

for i in $(mount | grep ^“/dev/sdb“ | awk ‚{print $1}‘); do sudo umount $i; done

{/code} 

Festplatte komplett löschen:

{code lang:bash hidden:false}

sudo dd if=/dev/zero of=/dev/sdb bs=1 seek=446 count=64

{/code} 

und dann das Image auf die Festplatte schreiben:

{code lang:bash hidden:false}

sudo dd if=*wheezy-raspbian.img of=/dev/sdb

{/code} 

Nun befindet sich auf das Root Dateisystem auf der USB Festplatte und das System ist nun startfähig. ABER: Die USB Festplatte wird noch nicht voll genutzt.

Du hast hier mehrere Möglichkeiten fortzufahren.

1. Du kannst das System booten und einen neue Partition mit dem Rest der Festplatte anlegen und in einem Verzeichnis deiner Wahl mounten. Das Root Dateisystem bleibt also

bei der Ursprünglichen Größe, oder

2. Du vergrößerst das Root Dateisystem und hast alles auf einer Partition. Damit kannst du den kompletten Speicher der Platte auch für das Root FS nutzen.

Ich mache hier mit Möglichkeit 2 weiter.

{code lang:bash hidden:false}

sudo parted /dev/sdb

unit chs

print

{/code} 

Die Ausgabe sieht dann so ähnlich aus: 

Using /dev/sdb
Welcome to GNU Parted! Type ‚help‘ to view a list of commands.
(parted) print
Model: ATA WDC WD20EZRX-00D (scsi)
Disk /dev/sdb: 38913,80,62
BIOS cylinder,head,sector geometry: 38913,255,63.  Each cylinder is 8225kB.
Partition Table: loop

Number    Start              End                               File system   Flags

1               0,130,2         7,165,29       primary    fat16             LBA
2               7,165,30     235,214,42   primary    ext4       

Die für uns wichtigen Werte habe ich FETT dargestellt.

Nun löschen wir die zweite Partition um sie dann neu in richtiger Größe anzulegen. Die Bits auf der Platte bleiben davon verschont und unser vorher kopiertes Root FS bleibt erhalten! 

{code lang:bash hidden:false}

rm2

{/code} 

Jetzt wird die Partition mit passender Größe angelegt. Voher noch etwas Mathe:

Unsere Festplatte hat 38913,255,63 (Cylinder, Heads, Sektoren) und wir müssen von jedem Wert -1 abziehen. 

In meinem Fall kommt dabei also 38192,254,62 heraus.

{code lang:bash hidden:false}

mkpart primary 7,165,30 38192,254,62

{/code} 

Mit quit kannst du nun parted verlassen.

Die Partition hat nun die richtige Größe. Das Dateisystem darauf aber noch nicht. Bevor wir auch diese Größe anpassen ist ein Filesystemcheck nicht verkehrt:

{code lang:bash hidden:false}

sudo e2fsck -f /dev/sdb2

{/code} 

Und dann vergößern:

{code lang:bash hidden:false}

sudo resize2fs /dev/sdb2

{/code} 

Und nun: USB Platte an den Raspi und booten!

Das Swapfile kann man nun auch von der USB Platte verwenden und hat so keine Schreibzugriffe mehr auf die SD Karte. Eine Festplatte lebt wesentlich länger!

Wenn dir das Projekt gefällt, habe ich natürlich nichts gegen eine kleine Spende.

 

Von heckmic

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.