Който не знае какво е Raspberry Pi да чете първо тук -
http://www.raspberrypi.org/faqs След като първото ми Pi беше колокирано в един дата център и си работи прекрасно от около половин година, натоварено с безценната задача да носи един трафик от тук-там дойде време за Pi номер 2.
Както и първото Pi обаче нямах никакво намерение да си тровя нервите с SD карти. Въпросните карти са много хубаво нещо. Но само до момента в който се омажат. Разбира се, както пише в една книга шанса това да се случи е около 50%. Но пък се случва всеки 8 от 10 случая, когато не си спрете Pi-то като хората. Ако добавите към това и живота им, който според марката е с продължителност почти колкото живота на една муха винарка, то сами разбирате, че трудно можете да оставите нещо по-сериозно върху SD.
При предното ми приключение с SD-та смених точно три докато се откажа и реша проблема веднъж и да се надяваме за винаги.
Решението е сравнително просто - нарича се NFS или Network File System.
За целта ви трябва NFS сървър на друга машина, която няма навика да бъде изключвана, включена е на някой по-издръжлив UPS и т.н. и т.н. Как да си пуснете NFS сървър вероятно ще намерите на доста места в Internet. Не забравяйте да си пуснете и firewall на NFS сървъра, ако ще го ползвате през Internet.
Добрата новина е, че всяко Pi снабдено с Raspbian Wheezy може да ползва NFS root без да се налага да правите разни сложни и непонятни неща.
И така - първо пъхате SD картата, на която сте инсталирали въпросното Wheezy в някой четец на друго PC или директно на NFS сървъра. Ще видите, че има два дяла на въпросната карта:
/dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/mmcblk0p2 122880 15523839 7700480 83 Linux
Първият дял е boot т.е. мястото на което се намира kernel-а, разни бинарни магии и няколко текстови файла.
Файлчето, което ни интересува се нарича
cmdline.txt:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Както се вижда в момента Pi-то ще си търси root от /dev/mmcblk0p2.
Тъй като ние искаме да преместим root-а върху NFS правим следното:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/nfs rootfstype=nfs rootwait smsc95xx.turbo_mode=N nfsroot=SERVER_IP:/rpi_root,tcp,timeo=100,retrans=10,rsize=65536,
wsize=65536,bg,vers=4 ip=IP:SERVER_IP:GW:MASK:rpi:eth0:off
Всичкото това трябва да се намира на
ЕДИН ред във файла.
SERVER_IP е IP адреса на нашият NFS сървър.
/rpi_root е мястото, където след малко ще копирате информацията от SD картата, на NFS сървъра си.
IP е IP адреса на нашето Pi.
GW е gateway на нашето Pi.
MASK е маската на нашето Pi.
smsc95xx.turbo_mode=N поне при първата модификация на Pi, която беше с 256MB RAM стабилизира работата на мрежовата карта, защото иначе плющеше разни чудесии, като я настъпят с трафик.
Разните други параметри като tcp, timeo, retrans, rsize, wsize, vers и т.н. можете да намерите ето тук:
https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt Това горното редче работи за мен през Internet, затова ползвам TCP.
Ако обаче Pi-то ви се намира в локалната мрежа и сте сигурни, че няма да има загуби по мрежата, то можете да спечелите малко скорост, като ползвате UDP.
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/nfs rootfstype=nfs rootwait smsc95xx.turbo_mode=N nfsroot=SERVER_IP:/rpi_root,udp,rsize=65536,wsize=65536,bg,vers=4 ip=IP:SERVER_IP:GW:MASK:rpi:eth0:off
Общо взето просто заменяте tcp с udp.
До тук добре. Сега е ред да копирате всичко от /dev/mmcblk0p2 на NFS сървъра си.
След като го направите е важно да коментирате или да изтриете реда за root от /etc/fstab - редактирате файла директно на NFS сървъра - /put/kum/NFS/rpi_root/etc/fstab:
proc /proc proc defaults 0 0
#/dev/mmcblk0p1 /boot vfat defaults 0 2
#/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that
Както виждате аз съм коментирал и реда за /boot, защото няма голям смисъл да държа /boot монтиран.
След като направите това сте готови да заредите и вашето Pi по NFS. Върнете SD картата в Pi-то, включете го и след малко би трябвало да имате Pi по NFS.
Разбира се, ако искате да имате swap, то трябва да направите още една операция. Това се налага, защото swap файл po NFS работи, но по малко по-различен начин.
След като Pi-то ви зареди логвате се и правите следното:
sudo apt-get remove --purge dphys-swapfile
sudo rm /var/swap
sudo rm /etc/init.d/dphys-swapfile
sudo update-rc.d dphys-swapfile remove
Правите нов swap 1GB - ако искате друга големина променете 1024 на колкото MB искате:
sudo dd if=/dev/zero of=/var/swap bs=1M count=1024
sudo losetup /dev/loop0 /var/swap
sudo mkswap /dev/loop0
sudo swapon /dev/loop0
Активирайте swap-а при всяко зареждане - в /etc/rc.local точно преди exit 0 добавяте:
echo "Setting up loopy/var/swap.."
sleep 2
losetup /dev/loop0 /var/swap
mkswap /dev/loop0
swapon /dev/loop0
Кофтито е, че все пак ви трябва SD карта за да може Pi-то да boot-не, защото не поддържа PXE или други глезотийки, но пък тя се ползва само за четене и дори не е монтирана след това, докато Pi-то работи :)
напиши нов коментар