Вторник, Януари 05, 2010

Извращения с NFS

Упражнеието: Да се монтира NFS на някакво openwrt, което не е ъпдейтвано от 2+ години, като NFS сървърът се намира в openvz контейнер, което означава още малко извращения.

OpenVZ контейнера е с debian, като работи върху последния кърнъл от OpenVZ. Ето как става врътката.

Влизате на хост машината (тази, която играе ролята на OpenVZ host) и пишете:
modprobe nfs
vzctl set 101 --features "nfs:on" --save
Като 101 тук е примерно id на машината. По принцип това се прави ако искате даденият контейнер да поддържа маунтване на NFS дялове, тоест да е клиент, но както обичат да казват хората "Better safe than sorry". До тук свършва бъзикането по физическият сървър, сега е ред на настройките на виртуалната машина и по-специално - Debian.


За да имате работещ NFS сървър ви трябва пакетите - nfs-user-server, nfs-common portmap, тъй като NFS, който да работи в ядрото няма поддръжка по подразбиране и ще се наложи да пачвате ядрото на физическата машина ако искате NFS да ви работи в kernel space. Също така трябва да имате предвид, че от този user-space daemon не се поддържа версия 4 на NFS. За повече информация тук

Другото което трябва да се промени е startup скрипта на nfs сървъра - /etc/inid/nfs-user-server. Където са старт директивите на rpc.nfsd и rpc.mountd трябва да изглеждат по следният начин:
start-stop-daemon --start --oknodo --quiet --exec /usr/sbin/rpc.nfsd -- -r
start-stop-daemon --start --oknodo --quiet --exec /usr/sbin/rpc.mountd -- -r

Тоест добваено е "-- -r" това се прави с цел да се забрани проверката за device id и е необходимо ако пускате NFS сървър във виртуална машина, базирана на OpenVZ - обяснение защо е така има на горния линк.

След като сте направили всичко до тук остава да пуснете сървъра - /etc/init.d/nfs-user-server start

След което трябва във /etc/exports да опишете папките, които искат да бъдат достъпни през NFS и запомнете, че при всяка промяна на /etc/exports файла, трябва да изпълнявате командата:
kill -HUP пид-на-nfsd

По принцип се използва "exportfs -ra", но тази програмка я има само при nfs-kernel-server.

До тук вече би трябвало да имате работещ NFS сървър. Сега идва време да подготвим и клиента (в случая някакъв малък линксис, върху който работи openwrt).

За целта инсталирайте необходимият пакет - за Kamikaze версията това става чрез следната команда: ipkg install kmod-fs-nfs

След което трябва да заредите следните модули в ядрото:
insmod sunrpc
insmod lockd
insmod nfs
Сега остава само да монтирате отдалечената файлова система: mount -t nfs ip-на-сървъра:/пътя/както/е/описано/в/exports ./локална папка за mount/ -o nolock

Използвам nolock опцията, тъй като userspace nfs сървъра няма поддръжка на locking. Сега трябва да може да оперирате без проблеми с дадения mount. Имайте предвид, че така изградената инфраструктура ще ползва UDP като транспортен протокол, при което са възможни загуби на информация без знанието ви, но за моите конкретни цели постановката върши идеална работа. (Само аз и V. знаем какво коства да се измисли това :> )

PS/1