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…