Har du också råkat ut för att dina SD kort “dör”
Jag har ett antal RPi som sitter på olika ställen i huset för att bl a visa status på vårat hemautomatisering system Home Assistant och vårt övervaknings system BlueIris
Då och då, inte allt för ofta men ändå irriterande. Så slutar ett SD kort att fungera för att det blir korrupt.
Det kommer troligen alltid att vara så, men vi kan minska risken.
Jag har gjort det genom att använda min NAS som huvudsaklig lagring för mina RPis. Jag har en Synology DS1815 som jag haft några år. Men det går bra med i stort sett vilken NAS som helst eller en vanlig dator som står igång dygnet runt, eller varför inte bygga en egen NAS av en RPi och USB diskar.
Från RPi3 kan man boota direkt från nätet helt utan SD kort, men jag har några RPi2 och även någon gammal RPi1 B+. Så för att göra det enhetligt har jag använt en metod att bota ROOT via NFS som fungerar på alla dessa modeller även om det innebär att jag måste ha ett SD kort sitta i varje RPi
Det första jag gjorde var att skapa en fildelning på min NAS som jag sedan gav NFS rättigheter till.
Jag loggar in på min DS1815 och väljer kontrollpanelen
När den är öppnad väljer jag Delad Mapp
Och där väljer jag att skapa en ny delad mapp som jag kallar NFS
Här kan man välja att dölja denna delade mapp om man så önskar. Det minskar risken att någon raderar eller skriver över filerna.
När den är skapad dyker det upp en ruta för rättigheter som har några flikar och den vi söker är fliken med NFS rättigheter
Så vi kan skapa NFS rättigheterna för vår nya mapp
Här kan man ange en enkel IP adress och skapa nya rättigheter för varje RPi, men jag har valt att sätta ett helt nät. Och här har jag använt en vanlig hemma router som tilldelar IP adresser mellan 192.168.1.100 – 192.168.1.200 och själva routern har IP adressen 192.168.1.1. Det vill säga att jag har ett nät på 255 adresser mellan 192.168.1.1 – 192.168.1.254 i mitt interna LAN. Ett sådant nät brukar skrivas som 192.168.1.0/24 eller 192.168.1.0/255.255.255.0
Välja att dina RPi har privilegiet att både läsa och skriva. Vi väljer ingen Squash och säkerheten är SYS. Kryssa dessutom i de tre bockrutorna. Klicka OK och vi har ett färdigt NFS Share
Har du något annat fabrikat på din NAS kan du hitta information om hur du sätter upp en NFS Delning antingen i manualen eller genom att söka på din modell och NFS på t ex Google.
Jag har gjort så att jag öppnat filhanteraren i webfönstret för min DS1815 och där skapat en underkatalog på den delade mappen som heter pifs (Pi Filesystem). Där under kommer jag sedan att skapa en mapp för varje RPi som jag vill skall boota från NFS.
Nästa steg är att starta upp din RPi
Jag kör med senaste versionen av Raspian som man kan ladda ner från Raspberrypi.org. Hur du gör för att installera Raspian på ett SD kort kan du också hitta på Raspberrypi.org
och jag föredrar att använda min bärbara dator och öppna en SSH session mot den. Detta oavsett om det är en RPi där jag har ett grafiskt gränssnitt eller inte. Mest för att jag vill göra lika på samtliga. Jag använder oftast Bitvise SSH klient som är gratis
Första steget är att se till att min RPi är uppdaterad. Jag brukar börja med att göra mig till administratör (root) då de flesta kommandon som vi kommer att skriva kommer behöva sudo för att gå att genomföra.
Jag börjar med vanliga
apt-get update
apt-get upgrade
Där efter brukar jag köra
rpi-update
Och det kräver en omstart så vi kör
reboot
När din RPi är uppe igen kommer Bitvise att återansluta till den, men du får öppna ett nytt kommandofönster.
Glöm inte att ge dig själv administratörs rättigheter med
sudo -i
Vi börjar med att montera vår NFS yta under katalogen mnt, det gör vi med kommandot
mount -o nolock -t nfs 192.168.1.10:/volume1/nfs/pifs /mnt
Här är ipadressen 192.168.1.10 adressen till min NAS. På Synology behöver man ange hela sökvägen inkl vilken volym den delade mappen ligger på. Och i vårt fall är det volume1 vilken vi kunde se när vi skapade den delade mappen. Namnet på den delade mappen är nfs och där i har jag sedan skapat en katalog som jag kallar pifs som jag skall använda för att spara filerna för filsystemet på resp RPi. Och sist har vi /mnt som är katalogen där vi vill montera vårt delade mapp.
Nu skall vi skapa en map för just denna RPi och den tänker jag placera i hallen med en monitor som visar övervakningskameror utanför vårt hus. Så jag kallar denna RPi helt enkelt för hallen och skapar en mapp som heter hallen
mkdir -p /mnt/hallen
Om du nu tittar i mappen /mnt så skall där ha skapats en ny katalog. Går du tillbaka till din NAS och använder filhanteraren skall du också se att under den delade mappen nfs i mappen du skapade tidigare som heter pifs så ser du att denna mapp skapats.
Nu skall vi kopiera hela vårt SD kort till denna mapp (/mnt/hallen) det gör vi enklast genom att använda rsync. Men för att vi inte skall få problem med kopieringen så utesluter vi mappen /mnt, som ju annars skulle kopiera sig själv i oändlighet. Kommandot vi använder är
rsync -xa –progress –exclude /mnt / /mnt/hallen
Ha du en äldre version av Raspian eller någon anna linux distribution på din RPi så finns risken att inte rsync är installerad men det installerar vi enkelt med
apt-get install rsync
Och sedan gör vi ett nytt försök att kopiera.
-xa gör att vi gör att vi får med oss eventuella utökade attribut på filerna och de rättigheter som ligger lagrade på filerna.
–progress gör att vi får en bättre överblick över vad som sker när vi kopierar eller synkroniserar som vi faktiskt gör.
–exclude /mnt gör att vi hoppar över den katalogen vid kopieringen.
/ är den katalog vi kopierar från
/mnt/hallen är katalogen vi kopierar till
Det tar en stund att kopiera alla filer!!!
När kopieringen är klar så bör vi skapa en ny mnt katalog under /mnt/hallen då vi ju inte kopierade den.
mkdir -p /mnt/hallen/mnt
NFS gillar inte att man använder den som swap så vi behöver avinstallera dphys vilket vi gör med
apt-get purge dphys-swapfile dphys-config
Och vi behöver stänga av försöket att starta den vid uppstart genom att ange
update-rc.d -f dphys-swapfile remove
Nu är vi nästan klara två filer vi behöver editera i, och jag föredrar att använda editorn nano
nano /mnt/hallen/etc/fstab
Den filen borde se ut något i stil med
proc /proc proc defaults 0 0
PARTUUID=191c9e46-01 /boot vfat defaults 0 2
PARTUUID=191c9e46-02 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
Intressant här är rad nummer 3, den med / ext4 i. Den skall vi sätta ett #-tecken framför. Vilket innebär att den inte kommer att läsas när systemet startar. Den gör annars så vi monterar vårt SD kort som root katalog.
Istället skall vi montera vår NFS mapp som root och det gör vi genom att lägga till följande rad i slutet av filen
192.168.1.10:/volume1/nfs/pifs/hallen / nfs defaults 0 0
Och här är först sökvägen till vår NFS mapp på vår NAS (IP adressen går till vår NAS). Det som inte framgår här är att det skall vara en tab och inte några mallanslag mellan de olika värden som skall anges i filen. Men sedan visar vi att det är / som vi vill montera och att det är en NFS mapp och att det är standard inställningar. Det är två nollor med tab mellan på slutet av raden.
När det är inskrivet så håller vi ner ctrl tangenten och trycker på x. Svara att vi vill spara filen och att det är OK att skriva över den.
Nästa fil vi behöver editera är /boot/cmdline.txt
nano /boot/cmdline.txt
Den filen innehåller en rad och får bara innehålla en rad. Så undvik att lägga till en radbrytning i slutet av den raden. Och den raden är lite olika i olika versioner av Raspian.
Min rad ser ut så här
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=b0add44f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
Och allt står på en rad.
Vi behöver ändra den så den ser ut så här
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/nfs nfsroot=192.168.1.10:/volume1/nfs/pifs/hallen ip=dhcp rootfstype=nfs smsc95xx.turbo_mode=N elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
Allt på en rad!!!
Vi skall alltså ändra flera parametrar och lägga till nfsroot=192.168.1.10:/volume1/nfs/pifs/hallen ip=dhcp mellan root=… och rootfstype=… Vi lägger även till smsc95xx.turbo_mode=N för att undvika problem med nätverkskortet på vissa RPi när vi bootar med NFS.
Kontrollera så allt blev rätt och ändra IP adressen för nfsroot= om du har en annan IP adress till din NAS och det samma gäller om du har en annan sökväg till din NFS mapp.
Nu skall allt vara klart.
Gör en omstart
reboot
När din RPi startat igen öppnar du ett nytt kommando fönster och för att testa allt gått rätt brukar jag skapa en fil i användaren pi:s katalog
echo Test > test.txt
Gå nu till din NAS och öppna den delade mappen nfs/pifs/hallen/home/pi och kolla om du ser en fil som heter test.txt. Om så är fallet så har du nu en RPi som bootar från NFS
Lycka till!