Raspberry Pi 4: boot from usb

Fissítés: azóta már megjelent hivatalos support, tehát a lenti leírásom már outdated. Használható, de az sd kártyák instabilitása miatt megfontolandó már nem annyira használni. 🙂

A helyzet a következő.

Raspberry Pi 4-en jelen pillanatban stable firmware-el még nem elérhető usb boot. Ez azt jelenti, hogy csak microSD kártyát bedugva képes üzemelni a bankkártya méretű kis számítógép.

Probléma lehet még továbbá az is, hogy ha kifogyunk a memóriából akkor a rendszer elkezd akadni, megállni és – mivel nem tud, nem lehet mindent kilőni – kb a használhatatlanságig lassul. Nyilván ezt a problémát lehet orvosolni azzal, hogy egy nagyobb memóriával rendelkező Raspi4-et veszel, de ha esetleg abból is kifogynál még mindig van cserehely (swap) ahova az oprendszer a memóriából a nem használt dolgokat ki tudja lapozni.

Igen ám, a probléma viszont ott kezdődik, hogy a kis gépecske alapesetben sd kártyáról üzemel ami nem a gyors/sok írás-olvasásra lett kitalálva, magyarán szólva a gépünk marhára lassú lesz az SD kártya miatt.

Ezért (és a nagyobb tárkapacitásért) érdemesebb venni egy SSD-t és egy usb 3.0-s sata átalakítót és a Raspbian-t átköltöztetni rá.

Jelen leírásomban nem azt mutatom be, hogy hogyan tud abszolút SD kártya nélkül üzemelni a bébi, hanem azt, hogy egy már meglévő alap, buta, lassú sd kártya mellé hogyan lehet ssd-re átköltöztetni és belakni a teljes alaprendszert.

Összetevők

  • minimum 8G-os sd kártya
  • sata csatolós SSD
  • sata-usb 3.0 átalakító, vagy beépítőkeret 2.5″-os meghajtóhoz
    nem szükséges külső táposat venni, az ssd-t és lényegében a legtöbb hdd-t is képes a rpi üzembiztosan a saját hivatalos tápegységével meghajtani

Alaprendszer telepítése

Töltsd le az aktuális legújabb Raspbian-t (ez egyébként a 10-es Debian-nal egyenértékű), írd ki az sd kártyára, dugd be a raspi-ba, hálózatot is adj neki, indítsd el, hagyd, hogy összeszedje magát.

Ha megvan

sudo su

raspi-config 

paranccsal az Interfacing Options alatt engedélyezd az ssh-t. Ezek után már monitor nélkül egy másik számítógépről is rácsatlakozhatsz PuTTY-ot használva.

Előkészítés

Miután már él az ssh kapcsolat az összerakott usb-s ssd-t csatlakoztasd a raspi kék színű aljzatához. A kék színű aljzat a 3.0-s csatoló.

Konzolon (putty) csekkold le, hogy látja-e az ssd-t a raspi:

fdisk -l

/dev/sda-ként meg kellene jelenjen.

Ha nem egy lsusb paranccsal nézd meg biztosan megfelelő-e a csatlakozás, ellenőrizd a kábeleket, nézd meg pc-re dugva az ssd-t, hogy okés-e vagy sem.

Ha az fdisk-ben látható a /dev/sda akkor nyert ügyed van, mehetünk tovább.

A másolást megelőzően le kell formáznunk az ssd-t, figyelj oda, nehogy fontos adatokat tárolj rajta!

fdisk /dev/sda
> o
> n
> p
> enter, enter, enter
> p
(ezután kellene láss /dev/sda1-et)
> w

mkfs.ext4 /dev/sda1

Nyitottunk egy új partíciós táblát, létrehoztunk egy partíciót, majd ext4-re formáztuk.

Költözés

mkdir /mnt/ssd

mount /dev/sda1 /mnt/ssd

rsync --exclude="mnt" --exclude="lost+found" --exclude="sys" --exclude="proc" --exclude="cdrom" --exclude="media" --exclude="swapfile" -aP / /mnt/ssd/

mkdir /mnt/ssd/{mnt,proc,sys} 

Megtörtént az ssd felcsatolása, és a gyökér fájlrendszer tükrözése. Fontos, hogy e művelet közben semmi mást ne csináljon a raspi. Igazából élő rendszeren nem is egészséges ilyet csinálni, mert inkonzisztencia léphet fel a másolt/cél fájlrendszerben, de mivel egy zsír új rendszerről van szó nagy kár nem történhet, max újrakezdjük.

Ha sikeresen lefutott a másolás akkor rá kell vennünk a raspi-t, hogy a gyökér fájlrendszert ne az sd kártyán keresse hanem a csatlakoztatott usb meghajtón.

Kérdezzük le először is az ssd-n lévő partuuid-ját:

blkid /dev/sda1

Ilyesmi fog fogadni:

/dev/sda1: UUID="b1b85e84-6440-4b65-8dd7-35ee51314143" TYPE="ext4" PARTUUID="3ea0d1f6-01"

Ebből nekünk a PARTUUID fog kelleni, másoljuk ki az értékét valahova jegyzettömbbe.

Ezután jön az a rész, hogy megmondjuk a raspi-nak, hogy ez a partuuid lesz az ő root-ja a jövőben.

nano /etc/fstab

Illetve

nano /mnt/ssd/etc/fstab

helyeken keressük meg azt a sort ahol a második „oszlop” csak egy „/”

Itt a PARTUUID= utáni értéket módosítsuk az ssd partuuid-jára, majd

nano /boot/cmdline.txt

Itt egyetlen sort találsz, keresd meg benne a root=PARTUUID=… részt, itt is módosítsd az értéket az ssd-d id-jára. Ha ezzel is megvagyunk akkor kb végeztünk is, nézzük meg sikerrel jártunk-e:

df -h

Ha a „Mounted on” oszlopot figyeljük és megkeressük a /-t akkor az „Avail” oszlopban látható az sd kártyánk mérete. A rendszer ekkor még nem ssd-t használja.

Indítsuk újra a raspi-t:

reboot

Bejelentkezést követően ismét nézzük meg a csatolt lemezeket és tadam:

root@winben:/home/winben# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       880G   21G  815G   3% /
devtmpfs        358M     0  358M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M   31M  456M   7% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   53M  200M  21% /boot
tmpfs            98M     0   98M   0% /run/user/1001
root@winben:/home/winben#

Ha az Avail oszlopban látható az ssd nagyobb kapacitása sikerrel jártunk.

Swap beállítása

Alapból 100Mb default cserehely/swap van egy raspbian-on beállítva, ez pont elég ahhoz, hogy az alkalmazások elinduljanak és közben ne egye meg az sd kártyát, de nekünk egy gyors ssd-nk lett, így már lehet nagyban gondolkozni.

fallocate -l 16G /swapfile
chmod 600 /swapfile 
mkswap /swapfile 
swapon /swapfile 

Készítettünk egy 16GB méretű cserehelyet az ssd-n és kvázi fel is csatoltuk. Nézzünk rá sikerrel jártunk-e:

 swapon --show 

vagy

htop

vagy

 free -h 

Ha látható a létrehozott 16G-s swapfile felcsatolva sikeres volt a létrehozás.

Viszont ahhoz, hogy újraindítás után is használja a rendszer fel kell vennünk fstab-ba:

 echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab 

Mostantól újraindítást követően is nyomonkövethető lesz htop-ban mennyi ramot és mennyi swapot/cserehelyet használ a bébi.

Enjoy!