Raspberry Pi – BTSync installeren

Btsync is de software die we gaan gebruiken om beide Pi’s met elkaar te syncen. Of eigenlijk syncen we de backup. Btsync heeft een eigen repository waarvan we de software kunnen installeren. Raspbian heeft de deze repository niet standaard aan boord, dus moeten we deze zelf toevoegen. Alle repositories van een linux debian installatie zijn vermeld in de folder /etc/apt/sources.list.d/. Hierin staan .list bestanden waarin links staan naar repositories. Om de btsync repository bekend te maken binnen onze installatie maken we dus een bestand btsync.list aan in die map. Doe dat met dit commando:

$ sudo sh -c 'echo "deb http://linux-packages.getsync.com/btsync/deb btsync non-free" > /etc/apt/sources.list.d/btsync.list'

Met dit command stuur (echo) je als het ware een tekst naar een bestand. Hier stuur je dus de link van de repository naar het bestand btsync.list in de map /etc/apt/sources.list.d/. Om packages te kunnen installeren van deze repository (ook wel repo genoemd) heb je een sleutel nodig. Met deze sleutel kun je controleren of de packages die gedownload worden ook daadwerkelijk de packages zijn die je wilt hebben. Download en installeer deze sleutel:

$ wget -qO - http://linux-packages.getsync.com/btsync/key.asc | sudo apt-key add -

In dit commando wordt er gebruik gemaakt van piping. Met piping is het mogelijk de output van het ene commando te gebruiken in het daarop volgende. Met wget downloaden we een key, en vervolgens gebruiken we die in het commando achter de |, het toevoegen van die key. Om de nieuwe repo te gebruiken moeten we eerst apt-get updaten:

$ sudo apt-get update

Alle beschikbare repo’s worden geinventariseerd zodat apg-get weet welke packages er allemaal beschikbaar zijn. Vervolgens installeren we btsync.

$ sudo apt-get install btsync

Nadat de installatie afgerond is werkt btsync direct. Helaas kunnen we niet direct bij de web-gui komen. Deze is namelijk ingesteld om alleen maar verkeer vanaf de Pi zelf te accepteren. Aangezien wij de web-gui vanaf een andere machine zullen benaderen moeten we deze configuratie aanpassen. Open het configuratie bestand van btsync om deze te bewerken:

$ sudo nano /etc/btsync/config.json

Je zult daar onderstaande regel zien staan.

"listen" : "127.0.0.1:8888"

Pas deze aan naar:

"listen" : "ip.adres.vande.pi:8888"

Sla de wijziging op en sluit het bestand met ctrl-x, y en Enter. Zoals meestal moeten we de service herstarten als we wijzigingen in de configuratie aanbrengen. Pas als de service opnieuw gestart wordt wordt het nieuwe adres van kracht.

$ sudo service btsync restart

Als je nu in de webbrowser op je eigen machine dat adres ingeeft zul je zien dat de web-gui van btsync opstart. In het scherm wat getoond wordt zul je een schermnaam moeten opgegeven. Daarna laad het scherm van btsync. Voor de veiligheid is het goed om direct een gebruiker en wachtwoord op de web-gui te zetten. Dit kan via de instellingen in de rechter bovenhoek.

Vanaf dit punt wordt de configuratie anders voor elke Pi. Als je alle stappen tot nu toe op 1 Pi hebt uitgevoerd, dan is nu het moment om op de 2e Pi ook alle stappen tot dit moment uit te voeren. In de volgende stap gaan we de backup oplossing werkend maken en gaan we ervan uit dat beide Pi’s een werkende btsync installatie hebben.

Raspberry Pi – Gebruik HD via netwerk

Nu we de externe HD aan de Pi hebben gekoppeld gaan we deze beschikbaar maken vanaf het netwerk. Dit doen we in deze handleiding met behulp van Samba. Samba wordt op de Pi vaak gebruikt om schijven die aan de Pi hangen te delen via het netwerk. Om te beginnen loggen we in op de Pi en installeren we Samba. Samba bestaat uit 2 packages. samba en samba-common-bin. Om Samba te installeren gebruik je het commando:

$ sudo apt-get install samba samba-common-bin

Toets y als gevraagd wordt door te gaan. Nadat de installatie afgerond is gaan de Samba configureren.

$ sudo nano /etc/samba/smb.conf

Voeg onder [global] het volgende toe:

[global]
 socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=65535 SO_RCVBUF=65535

Dit zijn instellingen die de samba performance verbeteren. Scroll helemaal naar beneden en voeg de volgende tekst toe:

[backup]               
   path=/data/eigen
   browseable=Yes
   writeable=Yes
   only guest=no
   create mask=0777
   directory mask=0777
   public=no

Met de eerste regel geef je de gedeelde map een netwerk-naam. Met de tweede regel geef je aan waar de map staat die je wilt delen. Met de derde en vierde regel geef je aan dat de map via het netwerk bekeken mag worden en dat er bestanden geplaatst of gewijzigd mogen worden via het netwerk. Met de overige regels geef je aan welke rechten er van toepassing zijn bij het aanmaken van mappen en bestanden en dat er ingelogd dient te worden als je map probeert te benaderen.

Als je klaar bent sla je de wijzigingen op en sluit je het bestand met ctrl-x, y en Enter.

Samba gebruikt zijn eigen rechten. Dat houdt dus in dat het wachtwoord waarmee je inlogt via SSH op de Pi niet dezelfde is als voor Samba. Je moet Samba eerst vertellen dat een gebruiker toegang heeft via samba en daarbij een wachtwoord opgeven. Pas daarna kun je via het netwerk de gedeelde map benaderen. Geef je gebruiker op de Pi nu rechten door middel van het volgende commando:

$ sudo smbpasswd -a [gebruikersnaam]

Voer nu 2 keer het wachtwoord in wat je wilt gebruiken om de map via het netwerk te benaderen. Dit kan hetzelfde wachtwoord zijn wat je gebruikt voor de toegang van de Pi zelf, maar realiseer je dat als je ooit het wachtwoord voor de Pi wijzigt, dat het Samba wachtwoord niet automatisch mee wijzigt. Om de nieuwe instellingen van kracht te laten worden moeten we de Samba service herstarten

$ sudo service samba-ad-dc restart

Nu is de map beschikbaar via het netwerk. Op Windows kun je deze koppelen via de optie “Netwerkverbinding maken” in de Windows explorer. Selecteer de letter die je als stationsletter wil gebruiken en voer als adres \\ipadres.van.de.PI\backup in. Vink “Verbinding maken met andere referenties” aan en klik op Voltooien. Gebruik als gebruikersnaam \[gebruikersnaam] in (inclusief de \) en dan het wachtwoord wat je opgegeven hebt bij het smbpasswd commando.

Voilá, daar is je map. Je zult zien dat je daar nu bestanden en mappen kunt aanmaken en weer openen. Je kunt nu dus bestanden die je op je desktop of laptop hebt staan naar de Pi kopieren, en die zijn vervolgens op het hele netwerk beschikbaar. De volgende stap is het installeren van btsync, de software die voor de synchronisatie zorgt tussen de 2 Pi’s.

Raspberry Pi – Externe HD aansluiten

In deze stap gaan we de externe HD aansluiten, herindelen en klaar maken voor gebruik. Om een disk te kunnen gebruiken sluit je deze natuurlijk eerst aan op de USB-poort van de Pi. Als dit je eerste keer is dat je een disk aansluit op een linux systeem is het handig om alleen deze disk en de USB-stick uit de eerdere stap in de Pi te laten zitten. Dat maakt een en ander wat makkelijker en wordt de kans op fouten wat kleiner. Nadat je disk aangesloten hebt log je in op de Pi via SSH en gaan we eerst kijken of de Pi de disk ziet:

$ blkid

Als je dit commando als gewone gebruiker uitvoert dan krijg je alleen extra disks te zien en niet de USB-stick die wij als filesysteem gebruiken. Zoek naar /dev/sda1 of /dev/sdb1. Als je maar 1 extra disk hebt aangesloten zie je 1 van de twee staan. Als je er toch meerdere disks hebt aangesloten kun je het label gebruiken om uit te vinden welke je moet hebben. In mijn geval moet ik de volgende disk hebben:

/dev/sda1: LABEL="My Book" UUID="A2CA0AEBCA0ABC13" TYPE="ntfs"

Nu gaan we de disk herindelen met het programma gdisk. Mijn schijf heeft een effectieve ruimte van 3.6 Terabyte. Ik ga dus 2 partities aanmaken van 1.8 Terabyte.

$ sudo gdisk /dev/sda

Met de toets “p” kun je een overzicht aanvragen van de huidige indeling. In mijn geval is er 1 partitie. Dit wil ik wijzigen naar 2 partities. Aangezien de eerste alle ruimte in neemt gaan we die eerst verwijderen. Toets “d” om een partitie te verwijderen. Omdat ik maar 1 partitie heb wordt er niet gevraagd welke partitie ik wil verwijderen en wordt direct de eerste partitie verwijderd. Als je nu weer “p” toetst zie je dat er geen partities meer zijn. Nu kunnen we 2 nieuwe partities maken. Toets “n” om een nieuwe partitie aan te maken. Toets dan 2x “Enter” voor het standaard partitie nummer en de standaard eerste sector nummer. Toets dan “+1800G” bij de volgende vraag om een partitie aan te maken van 1.8 Terabyte. Toets nogmaals “Enter” om het standaard formaat te kiezen en klaar. Maak nu nog een partitie aan van 1.8 Terabyte. Als je daarmee klaar bent, toets je “w” en “y” om alle wijzigingen door te voeren.

Nu moeten we de 2 partities klaar gaan maken voor gebruik. Eerst gaan we op elke partitie een filesysteem maken, om daarna het systeem te vertellen op welke plek (pad) we de filesystemen beschikbaar willen hebben. Met het volgende commando maken we het standaard filesysteem van linux aan:

$ sudo mke2fs -t ext4 -L [naam] /dev/sda1

mke2fs is het commando om een filesysteem aan te maken op een partitie. -t ext4 betekent dat we het ext4 type willen gebruiken voor het filesysteem en met -L [naam] geen je een label aan het filesysteem. Tenslotte geef je met /dev/sda1 aan dat je dit op partitie 1 van de /dev/sda disk wilt hebben. Maak ook een filesysteem aan op de 2e partitie met hetzelfde commando, maar dan met een ander label en op partitie /dev/sda2.

Wanneer de Pi start willen we dat onze partities automatisch beschikbaar zijn voor de Pi. Dit gaan we aangeven in hetzelfde bestand als waar we opgegeven hebben wat we als root willen gebruiken tijdens het booten naar een USB-stick: /etc/fstab. Zoals we eerder geleerd hebben is dat het beste te doen door middel van gebruik van de UUID. Gebruik onderstaand commando om alle partities te zien met hun UUID’s en noteer de UUID’s van de /dev/sda1 en /dev/sda2 partities.

$ blkid

Nu moeten we aangeven waar de we deze partities (of eigen de filesystemen die er op staan) beschikbaar willen hebben. Het beschikbaar maken van een schijf / partitie in Linux heet mounten. In Windows zie je eigenlijk altijd dat alle partities hun eigen letter hebben. Je kent ze allemaal wel: de C-schijf of de E-schijf, enzovoorts. In Linux werkt dat anders. In linux wordt de hoofd-partitie altijd op / (de root) beschikbaar gemaakt (gemount), en alle overige partities op submappen onder de root. Ik wil mijn partities beschikbaar (gemount) hebben in aparte mappen (genaamd “eigen” en “ander” onder de map /data. Onderstaand zie je dit visueel gemaakt:

/--
  |- boot
  |- data --           
           |- eigen > /dev/sda1
           |- ander > /dev/sda2
  |- etc

Deze mapen bestaan nog niet en zullen we eerst moeten aanmaken. Met het commando mkdir kun je mappen aanmaken in Linux. Elke map moet je afzonderlijk aanmaken. Je kunt dus niet zeggen van: maak de map /data/eigen aan, zonder dat de map /data bestaat. De map /data wordt niet automatisch aangemaakt als deze niet bestaat. Dit is een mooi moment om te leren hoe je toch meerdere commando’s in 1 klap kan uitvoeren. In Linux kun je meerdere commando’s achter elkaar in geven als je ze scheidt met een “;”. Met onderstaand commando maak je de map /data, /data/eigen en /data/ander aan:

$ sudo mkdir /data; sudo mkdir /data/eigen; sudo mkdir /data/ander

Als je nu ls -l /data uitvoert als commando zul je zien je 2 mappen terug krijgt:

total 8
drwxr-xr-x 2 root root 4096 Feb 12 16:02 ander
drwxr-xr-x 2 root root 4096 Feb 12 16:02 eigen

Nu de mappen waar we de partities gemount willen hebben aangemaakt hebben moeten we ons zelf rechten geven. In de output hierboven zie je 2x root staan bij de mappen. Dat betekent dat de eigenaar root en de groep root rechten hebben op deze mappen, en de rest niet. Om ervoor te zorgen dat wij ook rechten hebben, maken wij ons zelf eigenaar van de /data en alle onderliggende mappen. Doe dit met:

$ sudo chown -R [eigen gebruikersnaam]:root /data

Als je nu weer ls -l /data uitvoert zul je zien dat nu je eigen gebruikers naam als eerste (eigenaar) staat. Nu gaan we daadwerkelijk ervoor zorgen dat de partities gemount worden op die mappen. Open /etc/fstab om het te bewerken:

$ sudo nano /etc/fstab

Voeg nu 2 regels toe:

/dev/disk/by-uuid/[uuid van /dev/sda1] /data/eigen ext4 defaults,noatime,nodiratime 0 3
/dev/disk/by-uuid/[uuid van /dev/sda2 /data/ander ext4 defaults,noatime,nodiratime 0 4

Sla het bestand op en sluit het met ctrl-x, y en Enter. De configuratie wordt pas van kracht bij het opstarten van de Pi. Dus herstart de Pi.

$ sudo reboot

Log opnieuw in en controleer of de partities beschikbaar zijn. Je kunt dit checken met het commando df.

$ df -m

In het overzicht wat je te zien krijgt zie je dat onderaan je 2 partities zichtbaar zijn.

/dev/sda1 1857690664 69260 1763233180 1% /data/eigen
/dev/sda2 1857690664 69260 1763233180 1% /data/andere

Well done. Je hebt je harde schijf aangesloten en beschikbaar gemaakt op de Pi. In de volgende stap gaan we de schijf beschikbaar maken vanaf je netwerk door middel van Samba.

Raspberry Pi configureren

De volgende stap is om de Pi te configureren zodat deze optimaal draait voor het doel wat wij in gedachten hebben. Om hiermee te starten log je in en typ je het commando wat de configuratie start van de Pi:

$ sudo raspi-config

Je ziet dat er een programma start en het eerste wat we gaan doen is dat programma zelf updaten. Gebruik de pijltjes toetsen op je toetsenbord om naar de optie Advanced Options te gaan en druk op “Enter”. In het nieuwe menu kies je voor Update. Het updaten begint direct. Nadat dit afgerond is kom je weer terug in het menu.

In een standaard Raspbian installatie staat de Pi standaard ingesteld om op te starten naar een desktop omgeving. Via ssh zie jij die niet, maar die is wel beschikbaar en kost daardoor resources van de processor en intern geheugen (RAM) van de Pi. Deze resources kunnen we op een klein stukje hardware als de Pi goed gebruiken en dus gaan we dit aanpassen. Kies voor Boot Options en kies in het volgende menu voor Console. Done!

Nu gaan ervoor zorgen dat de Pi snapt waar hij is. Kies in het hoofdmenu voor Internationalisation Options en vervolgens Change Locale. Scroll met de pijltjes naar beneden en vink met de spatie de optie en_US.UTF-8 UTF-8 aan. Ga met de toets “Tab” naar <Ok> en druk op “Enter”. Kies vervolgens en_US.UTF-8 UTF-8 als standaard. De Pi voert dan de configuratie uit en je beland weer terug in het hoofdmenu. Kies nu voor Internationalisation Options en vervolgens Change Timezone. Kies nu je regio. Voor ons is dat Europe en in het volgende menu kiezen we Amsterdam. De locatie wordt nu aangepast. Je komt nu weer terug in het hoofdmenu.

De volgende stap is dat we de Pi een kleine boost geven door middel van overklokken. Door de Pi over te klokken laten we de processor en geheugen net even iets sneller werken dan hoe ze geproduceerd zijn. Dit kan een leuke snelheidsverbetering opleveren, maar je loopt het risico dat je te veel overklokt, de Pi te heet wordt en kapot gaat. Wij gaan de Pi 1 stapje harder laten lopen, zonder dat we al te veel risico lopen dat de Pi kapot gaat. Kies in het hoofdmenu voor Overclock en druk op “Enter” als je de waarschuwing krijgt. In het volgende menu kies je voor Modest. Druk weer op “Enter” bij het volgende bericht en je bent weer terug in het hoofdmenu.

Nu gaan we de naam van de Pi aanpassen. Dit is de naam van de machine en de naam waaronder de Pi bekend zal zijn binnen het netwerk. Kies in het hoofdmenu voor Advanced Options en dan voor Hostname. Typ een naam in (gebruik alleen kleine letters) en druk op “Enter”.

Een deel van het geheugen wordt gebruikt door de GPU, de grafische chip van de Pi. Onze Pi zal alleen booten naar de commandline en geen grafische toepassingen draaien. Om zoveel mogelijk geheugen beschikbaar te maken voor de processor gaan we het geheugen gebruik van de GPU beperken. Kies in het hoofdmenu voor Advanced Options en dan voor Memory Split. Toets 16 en dan op “Enter”. Hierdoor krijgt de GPU maar 16MB aan geheugen beschikbaar en is de rest beschikbaar voor de processor.

Ga nu met de Tab-toets naar <Finish> en toets “Enter” op de vraag of je opnieuw wil opstarten. De SSH verbinding wordt nu verbroken en de Pi start opnieuw op. Log opnieuw in.

De “pi” user is standaard aanwezig op de raspbian image, en het wachtwoord is standaard “raspberry”. Elke Pi gebruiker weet dat, maar ook elk persoon die graag eens zou willen kijken op jou Pi weet dat. Er wordt dus altijd geadviseerd om het wachtwoord van de gebruiker “pi” te veranderen. Nu is dat in ons geval niet noodzakelijk. De Pi hangt wel aan het netwerk, maar zo lang het verkeer wat vanaf buitenaf op poort 22 (ssh poort) binnenkomt niet doorgezet wordt naar de Pi is deze niet bereikbaar vanaf het internet. Hierdoor moeten mensen dus ingelogd zijn op jou netwerk, voordat ze bij de Pi kunnen. Voor de volledigheid beveiligen we de Pi ten aanzien van de gebruiker “pi” toch, maar dan net iets beter dan het wijzigen van het wachtwoord.

De beveiliging door middel van een gebruikersnaam EN een wachtwoord krijgt voor een deel kracht doordat het een combinatie is. Je moet EN de gebruikersnaam EN het wachtwoord weten. Op het moment dat je het wachtwoord van de gebruiker “pi” verandert, weten anderen het wachtwoord niet meer. Maar de gebruikersnaam weten ze wel. Het element van de combinatie komt daardoor te vervallen, waardoor het niet eens half zo veilig is. Je raad dus al wat we gaan doen: we veranderen ook de gebruiker. We gaan de gebruiker “pi” geen toegang meer geven via ssh, maken een nieuwe gebruiker aan, met een een nieuw wachtwoord en geven deze gebruiker toegang via ssh.

Toets het volgende commando en vervang [gebruiker] door de naam die je de gebruiker wilt geven. Vervolgens zal de gebruiker aangemaakt worden. Geef een wachtwoord op tijdens het aanmaken en vul de overige gegevens in als je dat leuk vindt.

$ sudo useradd [gebruiker]

Nu de gebruiker aangemaakt is op het systeem voegen we deze nog toe aan twee andere groepen. Doet dat met:

$ sudo usermod -a -G sudo,users [gebruiker]

We hebben de gebruiker nu toegevoegd aan de groepen sudo en users. Log uit:

$ exit

En log weer in met de user die je zojuist aangemaakt hebt. Gebruik het wachtwoord wat je daarbij opgegeven hebt. Nu ben je ingelogd met je nieuwe gebruiker. We gaan nu de “pi” gebruiker toegang ontzeggen via SSH. We gaan het configuratie bestand van SSH openen en wijzigen:

$ sudo nano /etc/ssh/sshd_config

Als je om een wachtwoord gevraagd wordt voor het gebruik van sudo, gebruik dan het wachtwoord van je nieuwe gebruiker. Voeg onderaan de volgende 2 regels toe

# Deny certain users access via SSH
DenyUsers pi

Sluit het bestand en sla het op met CTRL-X, Y en Enter. Herstart de SSH service zodat de nieuwe configuratie weer ingeladen wordt:

$ sudo service sshd herstart

Log weer uit en probeer in te loggen met de gebruiker “pi”. Je krijgt nu access denied. Je hebt nu je Pi beter beveiligd en geoptimaliseerd voor het gebruik als headless server. Nu gaan we de Pi volledig updaten en upgraden en de firmware van de Pi updaten. Log in met je nieuwe gebruiker. Om alle software op de Pi te updaten toets je

$ sudo apt-get update

De Pi gaat nu alle software langs en kijkt of er updates van aanwezig zijn. Nadat de Pi geïnventariseerd heeft welke updates er allemaal zijn, gaan we ook de upgrade uitvoeren.

$ sudo apt-get upgrade

Toets Y bij de vraag of je ermee door wil gaan. Vervolgens worden alle packages gedownload en geïnstalleerd. Dit kan even duren. Dus pak een bak koffie! Als de upgrade klaar is doen we nog 1 ding. We gaan de firmware van de Pi zelf een update geven. Om dat te doen toets je:

$ sudo rpi-update

Nadat deze doorgelopen is kun je de Pi opnieuw opstarten en klaar.

$ sudo reboot

In de volgende stap gaan we de externe HD aansluiten en in gebruik nemen.

Raspberry Pi booten naar USB-stick

De Pi gebruikt een SD-kaart als opslag medium. Helaas is gebleken dat deze wel eens crash gevoelig kunnen zijn, zeker als de stroom ineens wegvalt terwijl er op de SD-kaart informatie wordt weggeschreven. In dat geval zou helemaal opnieuw moeten beginnen, tenzij je een image gemaakt hebt van de SD-kaart nadat je alles geinstalleerd hebt zodat je die kunt terugzetten.

Om de kansen op deze crashes te verkleinen gaan we de Pi laten booten naar een USB-stick. De Pi start altijd met de SD-kaart. Tijdens de opstart cyclus laad de Pi het filesysteem van de tweede partitie die op de SD-kaart staat. Na het opstarten wordt alleen deze partitie nog gebruikt. Wat we gaan doen is de configuratie van deze opstart cyclus aanpassen, zodat de Pi een partitie van de USB-stick laad als filesysteem. Dat zorgt er dus voor dat er na het opstarten alleen nog gebruikt gemaakt wordt van de USB-stick, en niet meer van de SD-kaart.

In het kort doen we de volgende stappen:
      1. De USB-stick aansluiten en gereed maken voor gebruik;
      2. De tweede partitie van de SD-kaart kopieren naar de de USB-stick;
      3. De opstart configuratie aanpassen;     
      4. De Pi herstarten en controleren of deze inderdaad de USB-stick gebruikt.

Ik ga er even vanuit dat de Pi al opgestart is en dat je ingelogd bent via SSH. Voor dat laatste gebruik ik Mobaxterm. Zorg ervoor dat er geen andere opslag apparaten zijn aangesloten op de Pi, anders dan de SD-kaart. Sluit de USB-stick aan op de Pi en voer het volgende commando uit op de commandline:

$ sudo mount

Je krijgt dan een overzicht te zien. Zoek in het overzicht naar /dev/sdaX, waarbij de X voor een cijfer staat. Als je dat ziet staan, en je hebt geen andere opslag apparaten aangesloten, dan weet je dat de USB-stick aangesloten en zichtbaar is voor de Pi. De Pi kent de USB-stick onder de naam /dev/sda. Nu gaan we de USB-stick gereed maken voor gebruikt. LET OP: alles wat op de USB-stick staat gaat hiermee verloren. Eerst installeren we software waarmee we partities kunnen verwijderen en maken op de USB-stick. Zorg dat de Pi is aangesloten op het internet.

$ sudo apt-get install gdisk

Gdisk wordt nu geïnstalleerd. Toets “y” als er gevraagd wordt of je door wilt gaan. Nadat de installatie is afgerond (je krijgt weer je commandline terug) gaan we de USB-stick opnieuw partitioneren.

$ sudo gdisk /dev/sda

Toets daarna “p” om een overzicht te krijgen van welke partities er op de USB-stick staan. Verwijder ze allemaal. Om een partitie te verwijderen toets je “d” en dan “Enter”. Doe dit totdat ze allemaal weg zijn. Daarna gaan we een nieuwe partitie aanmaken. Toets daarvoor “n” en druk op enter voor elke vraag die je krijgt. Daarna zie je dat de partitie wordt aangemaakt. Als dat klaar is toets je “w” om de configuratie op te slaan en het programma af te sluiten.

Herstart de Pi en log opnieuw in wanneer de pi opnieuw opgestart is:

$ sudo reboot

Nadat de Pi opnieuw opgestart is unmounten we de USB-stick, maken we een filesysteem aan op de USB-stick, en mounten we de USB-stick weer:

$ sudo umount /dev/sda
$ sudo mke2fs -t ext4 -L rootfs /dev/sda1
$ sudo mount /dev/sda1 /mnt

Even een korte uitleg. Met het eerste commando koppelen we als het ware de USB-stick af. Jij kunt deze dan niet meer bereiken. Met het volgende commando maken we een filesysteem aan (mke2fs) van het type ext4 (-t ext4) met als label rootfs (-L rootfs) op de partitie /dev/sda1 (/dev/sda1). Met het derde commando koppelen we de USB-stick weer zodat we deze weer kunnen gebruiken. We  geven daarbij op dat we deze willen kunnen benaderen via /mnt.

Nu gaan we ons huidige file systeem (die van de SD-kaart) kopiëren naar de USB-stick. Hiervoor gebruiken we een programma rsync geheten. In ons geval staat deze al op de Pi. Mocht dat toch nog niet het geval zijn dan kun je ze deze installeren met het commando:

$ sudo apt-get install rsync

Voor dat we gaan kopiëren gaan we eerst even er voor zorgen dat er wat minder gekopieerd hoeft te worden. De wolfram engine staat namelijk standaard geinstalleerd op deze image van raspbian en neemt een halve GB aan data in. We gaan deze verwijderen met het volgende commando, toets “y” als er een vraag gesteld wordt:

$ sudo apt-get purge wolfram-engine

Nu gaan we het gehele filesysteem overzetten naar de USB-stick.  Dus vanaf / naar /mnt. Dit kan even duren, dus even geduld!

$ rsync -axv / /mnt

Nu dat gebeurd is moeten we de opstart configuratie gaan aanpassen zodat de Pi het filesysteem van de USB-stick laad en die blijft gebruiken. De opstart configuratie staat in een txt bestand. Dit txt bestand staat in /boot. Om deze te editen gaan we nano gebruiken. Dit is een text-based editor die vaak gebruikt wordt binnen linux om tekst bestanden aan te passen. Normaal gebruik ik vi hiervoor, maar vi gedraagt zich op de raspbian image iets anders dan ik gewend ben binnen linux. Bekijk de inhoud van het bestand met:

$ sudo cat /boot/cmdline.txt

Je zult zien dat dit bestand 1 tekstregel heeft:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

Het gaat ons om de parameter “root=”. Hier geef je op waar de root is. In windows taal geef je hier op waar C:/ is. Nu zie je dat dit naar mmcblk0p2 wijst. Dit is de tweede partitie van de SD-kaart. Die wil je dus aanpassen naar de partitie waar we zojuist het hele filesysteem naar toe gekopieerd hebben. En jij denkt waarschijnlijk al: dat is /dev/sda1, want je hebt zojuist gezegd dat dat de naam is waar de Pi onze USB-stick mee kent. Je hebt gelijk… en toch gaan we dat niet zo doen.

Het punt is: linux wijst deze naam toe aan de USB-stick terwijl deze opstart. De eerste schijf krijgt /dev/sda, als onze externe HD er zo aanhangt krijgt deze /dev/sdb als naam. De volgende zou sdc krijgen. Valt het je op hoe de laatste letter steeds 1 plekje opschuift in het alfabet? Probleem is echter dat Linux deze naamgeving niet altijd in dezelfde volgorde doet. Dus de volgende keer is misschien onze externe HD /dev/sda en onze USB-stick /dev/sdb. Zo lang je 1 USB-stick gebruikt in de Pi kun je rustig /dev/sda1 gebruiken. Maar zodra je er meer dan 1 gebruikt geeft die naam geen zekerheid meer. Gelukkig zijn er meer methodes om aan te geven welke partitie we willen gebruiken. Partities hebben altijd unieke ID’s. De UUID is er 1 en een andere is de PARTUUID. De UUID kunnen we niet gebruiken hier in dit configuratie bestand, maar de PARTUUID wel. Om uit te vinden welke PARTUUID onze partitie op de USB-stick heeft toets je:

$ sudo blkid

Je krijgt nu een lijst van alle opslag media die de Pi heeft met daarachter de PARTUUID. Noteer (of kopieer) de PARTUUID die achter /dev/sda1 staat. Open het bestand /boot/cmdline.txt in nano met:

$ sudo nano /boot/cmdline.txt

Pas “root=/dev/mmcblk0p2” aan naar “root=PARTUUID=[de partuuid die je gekopieerd hebt]”. Verder voegen we aan het eind van de regel nog toe: “rootdelay=5” Dit laatste doen we omdat het soms even kan duren voordat de USB-stick gereed is voor gebruik tijdens het booten. Om te voorkomen dat de Pi dan crasht, laten we deze even maximaal 5 seconden wachten zodat de USB-stick de tijd heeft om zich gereed te maken. Zodra de USB-stick gereed is wordt deze geladen.

Sla het bestand op met “control-x”, “y” en dan “enter”. We zijn nu bijna klaar. De laatste stap die we moeten doen is de configuratie van het nieuwe filesysteem recht trekken. In /etc/fstab kan aangegeven worden hoe je opslagmedia gekoppeld wilt hebben. Nu staat er nog in dat bestand dat de SD-kaart als root(/) geladen dient te worden, maar wij hebben ingesteld dat dat de USB-stick moet zijn. Dus trekken we dat nog even recht in het nieuwe filesysteem. Deze hebben we gekopieerd naar /mnt, dus /etc/fstab wordt dan: /mnt/etc/fstab. We gaan hier de UUID gebruiken van de partitie. Zoek deze weer op met het commando “blkid” en kopieer deze (of noteer het). Open nu het configuratie bestand met:

$ sudo nano /mnt/etc/fstab

Je ziet dan de volgende regel tussen de regels staan:

/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

Hier zie je staan dat /dev/mmcblk0p2 als root(/) gemount wordt. Dit staat nog fout en gaan we corrigeren door de UUID van onze nieuwe partitie op te geven in de plaats van /dev/mmcblk0p2. De regel komt er dan zo uit te zien:

/dev/disk/by-uuid/[UUID die je gekopieerd hebt]        /               ext4    defaults,noatime  0       1

Sla het bestand op met “control-x”, “y” en dan “enter”. Om alles te effectief te laten worden gaan we de pi herstarten.

$ sudo reboot

Als de Pi opnieuw opgestart is en je weer ingelogd gaan we kijken of alles inderdaad zo draait als we opgegeven hebben.

$ sudo mount

Als het goed is zie je nu dat /dev/sda1 als / gemount is. Omdat we nu dus volledig op de USB-stick draaien kun je als ultieme test de SD-kaart uit de pi halen nadat deze opgestart is. Als het goed is draait de Pi nu gewoon verder. Om te testen kun je even kijken hoeveel vrije ruimte je nog op de USB-stick hebt:

$ sudo df -m

Als de Pi inmiddels niet meer reageert, dan is er ergens iets niet goed gegaan tijdens de configuratie en raad ik je aan het opnieuw te doen. Als alles gewoon nog werkt: gefeliciteerd, je Pi draait nu vanaf je USB-stick.