2013. november 22.

Raspberry Pi futtatása külső HDD-ről

Ez a mini szerver egy SD kártyáról üzemel. Hátránya, hogy olcsóbb kártyán nagyon lassú a rendszer, és a kártya a sok írástól és olvasástól könnyem megsérül. Így jártam én is, a gyárilag a Raspberry Pi-jal együtt vett 8SD ADATA Class10 formázhatatlanra sérült. Amíg a garanciát intézem, betettem egy másik SD-t, ami Maxwell, szintén Class10, de jóval olcsóbb. Ennek a véletlen elérése rettenetes. Ezzel a mysql műveletek többszörösét vették igénybe, mint kellene. Hát akkor gyorsítsunk a dolgokon!

Ezért előkerestem egy leírást a neten, mely azzal foglalkozik, hogy hogyan futtassuk a rendszert boot után külső USB meghajtóról:
Onnan kezdem, hogy már van egy belakott rendszerem a Raspberry Pi-n, a nulláról telepítésre nem térek ki.

Egy üres Samsung S1 Mini ütésálló tokba szerelt külső 120GB HDD-t dugtam az USB porton lévő USB HUB-ra. Az USB HUB külső tápos, így nem terheli a RPi-t a HDD. Ez fontos!

Megkerestem, melyik drive a HDD:
  • sudo su
  • fdisk -l
Nálam a "/dev/sda" lett az. Módosítottam a partíciós táblát:

  • fdisk /dev/sda

A partíciótörléshez az "n" kell. Ha több van, az összeset törölni kell. A "p" listázza a partíciókat. Hármat hoztam létre: 16GB root partíció, 2GB swap partíció, és a többi egyéb adatoknak.

A root partíció létrehozása "n" gombbal indul, majd "p", majd "1", majd az első szektorhoz "Enter", majd "+16GB" és "Enter".

A swap partíció létrehozása "n" gombbal indul, majd "p", majd "2", majd az első szektorhoz "Enter", majd "+2GB" és "Enter", majd "t" és "2" és "82" választja ki a partíció típusát.

Az adat partíció létrehozása "n" gombbal indul, majd "p", majd "3", majd az első szektorhoz "Enter", majd "Enter" a maradék hely kihasználásához.

A végén a "p" listázza az új partíciókat. A "w" kiírja a változtatásokat végleg a HDD-re.

Az adat partíciót ext4-re formáztam, ez eltart egy ideig, várni kellett. Az első partíciót nem kell formázni, mert másolni kell rá. Szóval előbb az adat, majd a swap formázása:

  • mkfs.ext4 /dev/sda3
  • mkswap /dev/sda2

Ezt követően az SD második "mmcblk0p2" jelű partícióját átmásoltam a HDD első partíciójára. Ez elég sokáig tart. De előtte leállítottam minden lényeges szervizt, mely az SD-t túrhatja. Arra is figyelni kell, hogy kintről ne akarjon semmi hozzáférni.

  • service cron stop
  • service mysql stop
  • ...
Aztán az időigényes másolás:


  • dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=32M conv=noerror,sync

Utána hibaellenőrzés jött, és volt egy átméretezési hiba, amit az "y" után javított:

  • e2fsck -f /dev/sda1

A fájlrendszer átméretezése jött:

  • resize2fs /dev/sda1

Készítettem egy másolatot az alábbi boot konfigurációs fájlról:

  • cp /boot/cmdline.txt /boot/cmdline.orig

Utána szerkesztésre megnyitottam ("vi" vagy "nano"):

  • nano /boot/cmdline.txt

Módosítottam a "/dev/mmcblk0p2" részt "/dev/sda1" részre, majd mentés és kilépés a szerkesztésből.

A mount konfigurációt is módosítani kellett:

  • mount /dev/sda1 /mnt
  • nano /mnt/etc/fstab

Átírtam a "/dev/mmcblk0p2" részt  "/dev/sda1" részre. Utána hozzáadtam a "/dev/sda2" részt, mint swap, tehát új sorba:

  • /dev/sda2  none  swap  sw  0  0

... majd mentés és kilépés a szerkesztésből.

Nekem nem volt az SD terhelés elkerülése végett már swap, de ha lett volna, akkor le kellett volna állítani:

  • rm /etc/rc2.d/ S02dphys-swapfile

Utána újraindítás óvatosan:

  • sync
  • reboot

Ha valamiért nem bootol a HDD, akkor visszaállítható a régi rendszer, ha az SD-t egy másik gépbe dugva a "/boot/cmdline.orig" fájlt visszanevezzük "/boot/cmdline.txt" névre.

Egyes gépeken lassan veszi észre a rendszer az USB-t. Ott be kell állítani egy kis késleltetést a "/boot/cmdline.txt" fájlban a "bootdelay" és "rootdelay" opciókkal.

Az alábbi RPi-Monitor CPU terhelés grafikon mutatja az egérmutatóig a 3 óránként indított Tiny Tiny RSS szerver 110 darab feed szinkronizálásának kínlódását. Ez a folyamat rövidebb kellene legyen, nem 1,5 órás. Az egérmutató előtt közvetlen állítottam le a szervizeket, és ment a másolás, majd az átállás (lyuk), és utána elindult a HDD-ről az RPi. Eleve sokkal kisebb lett a CPU Load, úgy hogy a Cron nem 3 óránként, hanem 15 percenként indult. Persze, nekem elég lesz óránként is az RSS szinkron...