Raspberry Pi "auf USB Stick" umstellen

SD Karten die im Raspberry Pi als “Festplatten” verwendet werden zeichnen sich durch eine kurze Lebensdauer bei häufigen Schreibzugriffen aus. Was “kurz” im Einzelfall bedeuten kann weiß ich noch nicht. Es gibt aber die Möglichkeit den Hauptteil des Betriebssystems auf einen USB Datenträger zu verlagern. Dann wird die SD Karte nur noch kurz zum Booten verwendet und der Rest findet auf dem USB Datenträger statt.

Hier die Dokumentation der bei mir erfolgreichen Schritte die im wesentlichen von dieser Erklärung übernommen worden sind.

Unter welchem Namen ist der USB Stick im Raspberry Pi registriert?

#dmesg
....
....

[2554855.886854] usb 1-1.3: n new high-speed USB device number 5 using dwc_otg
[2554855.988411] usb 1-1.3: New USB device found, idVendor=0781, idProduct=5572
[2554855.988449] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[2554855.988499] usb 1-1.3: Product: Cruzer Switch
[2554855.988518] usb 1-1.3: Manufacturer: SanDisk
[2554855.988535] usb 1-1.3: SerialNumber: 4C532000040914100541
[2554855.990296] usb-storage 1-1.3:1.0: USB Mass Storage device detected
[2554855.990674] scsi0 : usb-storage 1-1.3:1.0
[2554856.988561] scsi 0:0:0:0: Direct-Access     SanDisk  Cruzer Switch    1.26 PQ: 0 ANSI: 6
[2554856.993958] sd 0:0:0:0: [sda] 62530624 512-byte logical blocks: (32.0 GB/29.8 GiB)
[2554856.996190] sd 0:0:0:0: [sda] Write Protect is off
[2554856.996233] sd 0:0:0:0: [sda] Mode Sense: 43 00 00 00
[2554857.000782] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[2554857.023009]  sda: sda1
[2554857.028734] sd 0:0:0:0: [sda] Attached SCSI disk

Aha, also “sda” heißt die “Festplatte”. Nun mit fdisk eine neue Partition einrichten. Mit “p” sieht man welche Partitionen eingerichtet sind. Diese Windows Partition brauchen wir nicht mehr und wandeln sie einfach in eine Linux Partition um. Man könnte auch löschen und neu anlegen. “t” fragt uns nach dem Typ und “83” ist eine Linux Partition. Mit “w” wird das ganze final auf den USB Stick geschrieben.

#fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 32.0 GB, 32015679488 bytes
255 heads, 63 sectors/track, 3892 cylinders, total 62530624 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
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1              32    62530623    31265296    c  W95 FAT32 (LBA)

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83
Changed system type of partition 1 to 83 (Linux)

Command (m for help): p

....
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1              32    62530623    31265296   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: If you have created or modified any DOS 6.x partitions, please see the fdisk manual page for additional information.
Syncing disks.

Dann noch formatieren:

#mke2fs -t ext4 -L rootfs /dev/sda1
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=rootfs
OS type: Linux
....
....
Writing inode tables: done    
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   

Und nachdem wir diese neue Partition “gemounted” haben können wir auch damit etwas anfangen

#mount /dev/sda1 /mnt

Und? Ist schon alles da?

#df -h
Filesystem                              Size  Used Avail Use% Mounted on
rootfs                                  3.6G  3.4G     0 100% /
/dev/root                               3.6G  3.4G     0 100% /
devtmpfs                                211M     0  211M   0% /dev
tmpfs                                    44M  296K   44M   1% /run
tmpfs                                   5.0M     0  5.0M   0% /run/lock
tmpfs                                    88M     0   88M   0% /run/shm
/dev/mmcblk0p1                           56M   19M   38M  34% /boot
/dev/sda1                                30G   44M   28G   1% /mnt

So, jetzt kopieren wir alles auf den neuen USB Stick. Dazu verwenden wir das Programm rsync und installieren es noch wenn noch nicht geschehen.

#apt-get install rsync
#sudo rsync -axv / /mnt

Nun sagen wir dem Raspberry Pi das er ab sofort nicht mehr von der SD Karte sondern vom USB Stick booten soll. Nicht erschrecken - in der Datei ist nur eine lange Zeile enthalten.

Nach einem Backup tauschen wir die “normale” Bootpartition “root=/dev/mmcblk0p2” gegen die neue Partition aus “root=/dev/sda1”

#cp /boot/cmdline.txt /boot/cmdline.orig
#nano /boot/cmdline.txt
    dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait

Und dann auch noch den USB Stick als Root Filesystem einbinden und die alte mit einem “#” auskommentieren.

#nano /mnt/etc/fstab
   proc            /proc           proc    defaults          0       0
  /dev/sda1       /               ext4    defaults,noatime  0       1
  /dev/mmcblk0p1  /boot           vfat    defaults          0       2
  #/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

Neu booten und freuen ;-)

Und nach einem Neustart sollte es dann so aussehen

#df -h
Filesystem                              Size  Used Avail Use% Mounted on
rootfs                                   30G  3.5G   25G  13% /
/dev/root                                30G  3.5G   25G  13% /
devtmpfs                                211M     0  211M   0% /dev
tmpfs                                    44M  272K   44M   1% /run
tmpfs                                   5.0M     0  5.0M   0% /run/lock
tmpfs                                    88M     0   88M   0% /run/shm
/dev/mmcblk0p1                           56M   19M   38M  34% /boot