Raspberry Pi draaien vanaf USB-stick

Door het vele schrijven op de SD-kaart kan het voor komen dat op een gegeven moment de Raspberry Pi niet meer wil starten.
De SD-kaart is dan corrupt (of bevat corrupte data). Ik heb dit zelf al een aantal keren meegemaakt en dan kan je de Raspberry Pi weer opnieuw installeren.

Gelukkig is het mogelijk om de Raspberry Pi te laten draaien vanaf een USB-stick, wat vele malen stabieler is. De SD-kaart is dan alleen nog maar nodig om op te starten, maar er vinden geen schrijfacties meer op plaats.

Hieronder zal ik beschrijven hoe simpel de data van de huidige SD-kaart kan kopiëren naar een USB-stick en de Raspberry Pi ook hiervan te laten draaien.

Er zijn wel een aantal voorwaarden (waarmee ik het in ieder geval voor elkaar heb gekregen):

  • Een USB-stick (ik gebruik er één van 8Gb)
  • Een (verse) installatie van Wheezy Raspbian image

Als eerste sluiten we de USB-stick aan op de Raspberry Pi.

Met lsusb kunnen we zien of de USB-stick wordt herkend.

pi@raspberrypi ~ $ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 13fe:1f23 Kingston Technology Company Inc. 

Voer daarna het commando tail /var/log/messages uit, om te zien of het device wordt herkend (kan ook met het commando dmesg).

pi@raspberrypi ~ $ tail /var/log/messages
Mar 28 22:03:23 raspberrypi kernel: [2815912.144457] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Mar 28 22:03:23 raspberrypi kernel: [2815912.144473] usb 1-1.3: Product: -power
Mar 28 22:03:23 raspberrypi kernel: [2815912.144486] usb 1-1.3: Manufacturer: silicon
Mar 28 22:03:23 raspberrypi kernel: [2815912.144499] usb 1-1.3: SerialNumber: E692060043C1
Mar 28 22:03:23 raspberrypi kernel: [2815912.147662] scsi0 : usb-storage 1-1.3:1.0
Mar 28 22:03:24 raspberrypi kernel: [2815913.145563] scsi 0:0:0:0: Direct-Access     silicon  -power           0.00 PQ: 0 ANSI: 0 CCS
Mar 28 22:03:24 raspberrypi kernel: [2815913.425642] sd 0:0:0:0: [sda] 15654912 512-byte logical blocks: (8.01 GB/7.46 GiB)
Mar 28 22:03:24 raspberrypi kernel: [2815913.426497] sd 0:0:0:0: [sda] Write Protect is off
Mar 28 22:03:24 raspberrypi kernel: [2815913.433293]  sda: sda1
Mar 28 22:03:24 raspberrypi kernel: [2815913.438412] sd 0:0:0:0: [sda] Attached SCSI removable disk

Zoals je kan zien wordt de USB-stick herkend als /dev/sda

Nu gaan de USB-stick partitioneren.
Voer het commando sudo fdisk /dev/sda uit.
Gebruikt “p” om te kijken of er al een partitie aanwezig is.

pi@raspberrypi ~ $ sudo fdisk /dev/sda

Command (m for help): p

Disk /dev/sda: 8015 MB, 8015314944 bytes
43 heads, 42 sectors/track, 8668 cylinders, total 15654912 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: 0x9729041c

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        8064    15654911     7823424    b  W95 FAT32

Zoals je kan zien is er een Windows partitie aanwezig (W95 FAT32)
Deze gaan we verwijderen met “d”.

Command (m for help): d
Selected partition 1

LET OP: Alle data van de USB-stick zal nu verwijderd worden.

Met “n” kan er vervolgens een nieuwe partitie aangemaakt worden.
Kies voor een primary partitie (met “p” of Enter).
Druk daarna nog een aantal keer op Enter om de standaard instellingen toe te passen.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
Using default value 1
First sector (2048-15654911, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-15654911, default 15654911): 
Using default value 15654911

Met “w” wordt de partitie weggeschreven op de USB-stick.

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

Calling ioctl() to re-read partition table.
Syncing disks.

Nu de partitie formatteren met het commando sudo mke2fs -t ext4 -L rootfs /dev/sda1.

pi@raspberrypi ~ $ sudo mke2fs -t ext4 -L rootfs /dev/sda1
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=rootfs
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
489600 inodes, 1956608 blocks
97830 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2004877312
60 block groups
32768 blocks per group, 32768 fragments per group
8160 inodes per group
Superblock backups stored on blocks: 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

We gaan de USB-stick mounten, zodat we de data er naar toe kunnen gaan kopiëren.
Dit doen we met het commando sudo mount /dev/sda1 /mnt.

pi@raspberrypi ~ $ sudo mount /dev/sda1 /mnt

Met df -h kunnen we zien wat we hebben gedaan.

pi@raspberrypi ~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          7.4G  1.7G  5.5G  23% /
/dev/root       7.4G  1.7G  5.5G  23% /
devtmpfs         85M     0   85M   0% /dev
tmpfs            19M  232K   19M   2% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            37M     0   37M   0% /run/shm
/dev/mmcblk0p1   56M   19M   38M  33% /boot
/dev/sda1       7.4G  145M  6.9G   3% /mnt

In veel handleidingen op internet wordt gebruik gemaakt van het commando dd om de data te kopiëren, maar dat duurt erg lang.
We kunnen ook rsync gebruiken.

Standaard is rsync niet geïnstalleerd, maar dat kan heel simpel geïnstalleerd worden met sudo apt-get install rsync

pi@raspberrypi ~ $ sudo apt-get install rsync

Vervolgens kopiëren we alles van “/” naar “/mnt” (de USB-stick).
sudo rsync -axv / /mnt

pi@raspberrypi ~ $ sudo rsync -axv / /mnt
sending incremental file list
...

Dit duurt ongeveer 15 minuten.

Normaal start de Raspberry Pi op van de SD-kaart, dus zullen we dit moeten aanpassen naar de USB-stick. Hiervoor dienen we het bestand /boot/cmdline.txt aan te passen.

Voor de zekerheid maken we hier een kopie van:
sudo cp /boot/cmdline.txt /boot/cmdline.orig

sudo cp /boot/cmdline.txt /boot/cmdline.orig

We kunnen het bestand nu gaan aanpassen sudo nano /boot/cmdline.txt.

We veranderen root=/dev/mmcblk0p2 in root=/dev/sda1.
Tevens voegen we aan het eind van de regel rootdelay=5 toe. Dit doen we omdat de USB-stick soms nog niet klaar is, wanneer het OS al wil gaan starten. Door deze pauze van 5 secondes is dit probleem niet. Je kan hier mee experimenteren door het weg te laten of minder tijd in te stellen.

pi@raspberrypi ~ $ cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait rootdelay=5
pi@raspberrypi ~ $

Ook moeten we nog iets aanpassen in de filesystem tabel op de USB-stick.
sudo nano /mnt/etc/fstab

Voeg de volgende regel toe:

/dev/sda1    /   ext4    defaults,noatime  0       1

Zet een # voor de regel van de SD-kaart:

#/dev/mmcblk0p2  /               ext4    defaults,noatime       0       1

Het zal er nu als volgt uit moeten zien:

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
# a swapfile is not a swap partition, so no using swapon|off from here on, use  dphys-swapfile swap[on|off]  for that

Nu kan de Raspberry Pi herstart worden
sudo reboot

Met df -h kan je nu zien hoe het filesystem eruit ziet.

pi@raspberrypi ~ $ df -h
Filesystem                        Size  Used Avail Use% Mounted on
rootfs                            7.4G  1.8G  5.3G  25% /
/dev/root                         7.4G  1.8G  5.3G  25% /
devtmpfs                           85M     0   85M   0% /dev
tmpfs                              19M  232K   19M   2% /run
tmpfs                             5.0M     0  5.0M   0% /run/lock
tmpfs                              37M     0   37M   0% /run/shm
/dev/mmcblk0p1                     56M   19M   38M  33% /boot

Wanneer je eventueel terug wil, kan je dat doen aan de hand van de handleiding die bij de bron staan.

Bron: HOWTO: Move the filesystem to a USB stick

Geef een reactie