Minska problemen med trasiga SD kort

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!