Boot via SD-Karte, aber alles weitere auf USB-Stick. Schont die interne Lebensdauer der kleinen MicroSD Karte. USB-Stick mounten und die Größe anpassen… Habe ich an dem RaspberryPi 1, 2 und 3 getestet…

Leider kann der Raspberry Pi nie direkt vom USB Stick booten – das Boot-Device ist immer die SD-Karte. Allerdings kann man den Bootstring leicht abändern, so dass man schnell auf den USB Stick schalten und von dort den restlichen Boot-Vorgang fortsetzen kann.

Warum will ich denn von einem externen USB Stick booten? Die interne SD Karte hält nicht sehr lange. Besonders wenn man eine Datenbank (mySQL) und eine

Webseite auf dem Raspberry Pi laufen hat. Dann ist nach 24Std. | 7 Tage die Woche bereits in 5 Monaten Schicht im Schacht und die SD Karte fliegt in den Datenhimmel. Das will ich natürlich nicht. Weiterer Vorteil ist es, das man besser an den Stick rankommt als an die SD Karte. Wenn der Raspi in einem Gehäuse verbaut ist und dieser sich im Schaltschrank für eine SmartSun Homesteuerung befindet, dann kommt man eh nie an die Karte mehr… zumindest nicht mal so eben..

Als erstes Installiert Ihr das Standard Image von der Raspberry Site: https://www.raspberrypi.org/downloads/raspbian/

Ich habe das Debian Lite genommen. Das entpackt Ihr auf die SD Karte mit dem Win32 Disk Imager.

Wenn Ihr dann alles eingerichtet habt ( Netzwerk, Name etc.. ) könnt ihr von der SD Karte wieder ein Image machen und das dann auf einen USB Stick gleicher oder größerer Größe kopieren.

Anschließend wieder mit USB Stick und der SD Karte booten und via SSH auf den Raspi:

pi@bootimage:~ $ sudo fdisk -l
Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        8192  131071  122880   60M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      131072 2658303 2527232  1.2G 83 Linux

Disk /dev/sda: 3.8 GiB, 4022337024 bytes, 7856127 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6f92008e

Device     Boot  Start     End Sectors  Size Id Type
/dev/sda1         8192  131071  122880   60M  c W95 FAT32 (LBA)
/dev/sda2       131072 7634943 7503872  3.6G 83 Linux

Jetzt den USB Stick mounten:

pi@bootimage:~ $ sudo mount /dev/sda2 /mnt
pi@bootimage:~ $ sudo nano /mnt/etc/fstab
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
Ändern in
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/sda2  /               ext4    defaults,noatime  0       1

Jetzt wieder unmounten:

pi@bootimage:~ $ sudo umount /dev/sda2

Hier trägst Du nun den „Bootstring“ ein..

pi@bootimage:~ $ sudo nano /boot/cmdline.txt
änder nun
root=/dev/mmcblk0p2
in
root=/dev/sda2

und dann einfach mit
pi@bootimage:~ $ sudo init 6
das System neu starten – falls der USB-Stick eine LED hat können Sie schon am „flackern“ sehen dass der boot-Vorgang nun über den USB Stick läuft.
Die Boot-Partition der SD-Karte bleibt auf /boot gemountet.

Jetzt wollen wir die Größe des USB Sticks entprechend anpassen.

pi@SmartSun:~ $ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        3661568 1192416   2291944  35% /
devtmpfs          494048       0    494048   0% /dev
tmpfs             498368       0    498368   0% /dev/shm

Größe des USB Sticks ( hier ein 3,7 GB ) anpassen:

pi@smartsun:~ $ sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p ## (für print)
Disk /dev/sda: 3.7 GiB, 4005560320 bytes, 7823360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6f92008e

Device            Boot  Start     End Sectors  Size Id Type
/dev/sda1         8192  131071  122880   60M  c W95 FAT32 (LBA)
/dev/sda2       131072 2658303 2527232  1.2G 83 Linux

## Startsektor von P#2 merken (sollte 131072 sein)

Command (m for help): d ## (für delete)
Partition number (1,2, default 2): 2 ## Partition Nummer 2
Partition 2 has been deleted.

Command (m for help): n ## (für new)
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p ## (für primary)
Partition number (2-4, default 2): 2 ## Partition Nummer 2

First sector: <gemerkt von vorhin, hier: 131072)

## hier den vorher gemerkten Wert eingeben, NICHT den Vorschlag übernehmen

First sector (2048-7823359, default 2048): 131072

Last sector: ## Jetzt Vorschlag übernehmen  
Last sector, +sectors or +size{K,M,G,T,P} (131072-7823359, default 7823359):

Created a new partition 2 of type 'Linux' and of size 3.7 GiB.

Command (m for help): p ## (für print)
Disk /dev/sda: 3.7 GiB, 4005560320 bytes, 7823360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6f92008e

Device     Boot  Start     End Sectors  Size Id Type
/dev/sda1         8192  131071  122880   60M  c W95 FAT32 (LBA)
/dev/sda2       131072 7823359 7692288  3.7G 83 Linux

Command (m for help): w  ## (write)
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

pi@raspberrypi:~ $ sudo reboot

pi@raspberrypi:~ $ sudo resize2fs /dev/sda2

Anschließend bereinigen wir das Image noch ein wenig:
pi@raspberrypi:~ $ sudo apt-get purge minecraft-pi wolfram-engine sonic-pi scratch -y
pi@raspberrypi:~ $ sudo apt-get clean
pi@raspberrypi:~ $ sudo rm -f /var/log/{*.gz,*.[0-9]}
pi@raspberrypi:~ $ sudo apt-get autoclean
pi@raspberrypi:~ $ sudo apt-get autoremove

Das Ergebnis: vorher bei /dev/root ca. 1,21 GB ( 1210960 kB) danach 3,66 GB ( 3661568 kB ). Ich habe also hier einen 4GB USB Stick als externen Stick verwendet…