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.

Show/Hidden bash code

View source
 
 
unzip *wheezy*.zip
 
 
 

 

Nun m√ľssen wir die SD Karte¬†bootf√§hig machen. SD Karte einstecken und

Show/Hidden bash code

View source
 
 
dmesg
 
 
 

...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.

Show/Hidden bash code

View source
 
 
for i in $(mount | grep ^"/dev/mmcblk0" | awk '{print $1}'); do sudo umount $i; done
 
 
 

 

Jetzt muss noch die SD Karte gelöscht werden.

Show/Hidden bash code

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

 

Nun m√ľssen wir das Raspian Image mit fdsik untersuchen.

Show/Hidden bash code

View source
 
 
sudo fdisk -l *wheezy*.img
 
 
 

 

In der nun folgenden Ausgabe sieht man zwei Partitionen:

Show/Hidden bash code

View source
 
 
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
 
 
 

 

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.

Show/Hidden bash code

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

 

Nun noch die Partitionierung der SD Karte korrigieren:

 Show/Hidden bash code

View source
 
 
 sudo parted /dev/mmcblk0 rm 2
 
 
 

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).

Show/Hidden bash code

View source
 
 
sudo mount /dev/mmcblk0p1 /mnt 
 
 
 

 

Bootparameter anpassen:

Show/Hidden bash code

View source
 
 
sudo vi /mnt/cmdline.txt
 
 
 

 

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

Show/Hidden bash code

View source
 
 
sudo umount /mnt
 
 
 

 

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

Show/Hidden bash code

View source
 
 
dmesg
 
 
 

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

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

Show/Hidden bash code

View source
 
 
for i in $(mount | grep ^"/dev/sdb" | awk '{print $1}'); do sudo umount $i; done
 
 
 

 

Festplatte komplett löschen:

Show/Hidden bash code

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

und dann das Image auf die Festplatte schreiben:

Show/Hidden bash code

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

 

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.

Show/Hidden bash code

View source
 
 
sudo parted /dev/sdb
 
unit chs
 
print
 
 
 

 

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! 

Show/Hidden bash code

View source
 
 
rm2
 
 
 

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.

 

Show/Hidden bash code

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

 

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:

Show/Hidden bash code

View source
 
 
sudo e2fsck -f /dev/sdb2
 
 
 

Und dann vergößern:

Show/Hidden bash code

View source
 
 
sudo resize2fs /dev/sdb2
 
 
 

 

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.

 

 

 

 

Kommentare   

0 #3 xxlde24 2017-02-16 21:39
ein hallo in die Runde ;-)

ich möchte eine SSD ans Rasbpi anschließen. Das HDD Gehäuse hat aber keinen eigenen Stromanschluss!
Ist das trotzdem machbar oder was sollte ich beachten?
Dem Administrator melden
0 #2 Conti 2016-02-04 11:51
M√∂chte mich bedanken f√ľr das Tutorial.
Der dd auf die Festplatte habe ich nicht verstanden. M√ľsste jetzt nicht nur *.img2 kopiert werden? Ansonsten habe ich doch das ganze Image auf der Platte?

Gr√ľsse, Conti
Dem Administrator melden
0 #1 Stephan 2016-02-01 19:45
Danke f√ľr das tutorial. Bei der Gr√∂√üen√§nderung der Festplatte ist dir ein kleiner Fehler unterlaufen, da hat sich ein Zahlendreher eingeschlichen.

Gruß, Stephan
Dem Administrator melden

Kommentar schreiben

Sicherheitscode
Aktualisieren