نحوه تنظیمات NFS Network File System در RHEL/CentOS/Fedora and
مزایای NFS :
NFS دسترسی local به فایل های remote را مهیا میسازد.
NFS معماری استاندارد Client/Server را برای به اشتراک گذاری فایل بین تمام سیستم های linux و unix استفاده میکند.
با استفاده از NFS نیاز نیست که هر دو ماشین سیستم عامل یکسانی را داشته باشند.
با کمک NFS ما میتوانیم راه کارهای centralized storage را انجام دهیم.
کاربران به اطلاعات خود بدون توجه به موقعیت فیزیکی آنها دسترسی دارند.
هیچ Refresh دستی (manual) برای فایل های جدید نیاز نیست.
ورژن های جدیدتری از NFS همچنین acl ,pseudo root mounts پشتیبانی میکند.
میتوان آن را با استفاده از Firewalls و Kerberos امن کرد.
سرویس های NFS :
NFS یک سرویس System V-launched میباشد. پکیج سرور NFS شامل ۳ پکیج میباشد. پکیج portmap و همچنین پکیج های nfs-utils
portmap :
این پکیج ارتباطات ایجاد شده از ماشین های دیگر را به سرویس RPC درست map میکند. (بدون نیاز به NFS v4)
NFS :
این پکیج درخواست های file sharing ریموت (remote) را به درخواست های local ترجمه(Translate) میکند.
rpc.mountd :
این سرویس مسول mount و unmount کردن file system میباشد.
فایل های مهم برای تنظیمات NFS :
etc/export :
این فایل تنظیمات اصلی NFS میباشد و تمام فایل های export شده و دایرکتوری ها در این فایل و در سمت سرور NFS تعریف میشود.
etc/fstab :
برای mount کردن یک پوشه NFS روی سیستم حتی بعد از reboot ما نیاز داریم که در فایل etc/fstab تنظیماتی را صورت دهیم.
etc/sysconfig/nfs :
کانفیگ فایل NFS برای کنترل کردن این که rpc و سرویس های دیگر روی چه پورتی lisening میکنند.
نصب و تنظیم NFS Mounts روی سرور linux :
برای راه اندازی NFS حداقل به ۲ ماشین Linux/Unix نیاز داریم. در این پست من ۲ سرور استفاده میکنم :
NFS Server:
nfsserver.example.com و IP-192.168.0.100
NFS Client :
nfsclient.example.com و IP-192.168.0.101
نصب NFS Server و NFS Client :
در ابتدا باید پکیج های NFS هم در سرور NFS و هم در کلاینت NFS نصب کنیم. میتوانیم با استفاده از YUM (در سیستم عامل های خانواده Red Hat) و apt-get (در سیستم عامل های خانواده Debian) آن را نصب کنیم :
کد PHP:
[root@nfsserver ~]# yum install nfs-utils nfs-utils-lib
[root@nfsserver ~]# yum install portmap (not required with NFSv4)
کد PHP:
[root@nfsserver ~]# apt-get install nfs-utils nfs-utils-lib
اکنون روی هر ۲ ماشین سرویس ها را Start میکنیم :
کد PHP:
[root@nfsserver ~]# /etc/init.d/portmap start
[root@nfsserver ~]# /etc/init.d/nfs start
[root@nfsserver ~]# chkconfig –level ۳۵ portmap on
[root@nfsserver ~]# chkconfig –level ۳۵ nfs on
بعد از نصب پکیج ها و start سرویس ها در هر ۲ ماشین باید ماشین ها را به منظور file sharing کانفیگ کنیم.
تنظیمات NFS Server :
ابتدا NFS Server را تنظیم میکنیم.
تنظیم دایرکتوری Export :
برای به اشتراک گذاشتن یک پوشه با استفاده از NFS ما باید در فایل etc/exports تغییراتی را ایجاد کنیم. در اینجا من پوشه ای با نام nfsshare در پارتیشن / (اسلش) ایجاد میکنم و از آن برای به اشتراک گذاشتن فایل های با سرور کلاینت استفاده خواهم کرد. شما میتوانید حتی یک پوشه موجود روی سیستم تان را با NFS به اشتراک بگذارید :
کد PHP:
[root@nfsserver ~]# mkdir /nfsshare
اکنون نیاز دارید تغییری را در فایل etc/exports داشته باشیم و سپس سرویس را به منظور اعمال تغییرات باید reset کنیم :
کد PHP:
[root@nfsserver ~]# vi /etc/exports
/nfsshare ۱۹۲٫۱۶۸٫۰٫۱۰۱(rw,sync,no_root_squash)
در مثال بالا پوشه nfsshare در پارتیشن / (اسلش) با کلاینت ۱۹۲٫۱۶۸٫۰٫۱۰۱ و با سطح دسترسی read/write یا (rw) به اشتراک گذاشته شده است، شما حتی میتوانید به جای نوشتن ip در مثال بالا hostname را استفاده کنید.
آپشن های NFS :
بعضی از آپشن هایی که میتوانیم در فایل etc/exports استفاده کنیم به قرار زیر میباشد :
ro :
با کمک این گزینه میتوانیم دسترسی read only را برای فایل های share شده لحاظ کنیم. مثلا کلاینت تنها قادر به خواندن است.
rw :
این اپشن به client server اجازه میدهد تا علاوه بر دسترسی read بتواند دسترسی write هم داشته باشد.
sync :
این آپشن درخواست های به پوشه به اشتراک گذاشته شده را تنها به محض اینکه تغییرات لحاظ شوند را تایید میکند.
no_subtree_check :
این آپشن از چک subtree جلوگیری میکند. زمانی که یک پوشه به اشتراک گذاشته شده در حقیقت زیر پوشه ای از یک فایل سیستم بزرگتر باشد NFS از هر دایرکتوری بالای آن scan (اسکنی) را انجام خواهد داد. این اسکن به منظور بررسی سطح دسترسی (permission) و جزییات میباشد.
غیر فعال ساختن چک subtree اگر چه ممکن است reliability را در NFS افزایش دهد اما امنیت (security) را کاهش خواهد داد.
no_root_squash :
با استفاده از این عبارت به root اجازه داده میشود که به پوشه تایین شده متصل شود.
برای آپشن های بیشتر به شما پیشنهاد میشود تا صفحه راهنمای export را بخوانید.
تنظیمات NFS Client :
بعد از تنظیم NFS Server باید دایرکتوری یا پارتیشن به اشتراک گذاشته شده را در سرور کلاینت mount کنیم.
mount کردن پوشه های share شده روی NFS Client :
اکنون در سمت کلاینت ما نیاز داریم که پوشه مورد نظر در سرورمان را برای دسترسی local به آن mount کنیم برای این منظور ابتدا نیاز داریم که بدانیم آن پوشه روی سرور ریموت یا nfs server موجود باشد :
کد PHP:
[root@nfsclient ~]# showmount -e ۱۹۲٫۱۶۸٫۰٫۱۰۰
Export list for ۱۹۲٫۱۶۸٫۰٫۱۰۰:
/nfsshare ۱۹۲٫۱۶۸٫۰٫۱۰۱
دستور بالا نشان میدهد که یک پوشه با نام nfsshare در ۱۹۲٫۱۶۸٫۰٫۱۰۰ برای share با سرور شما موجود است.
Mount Shared NFS Directory :
برای mount کردن پوشه مورد نظر میتوانیم دستور زیر را استفاده کنیم :
کد PHP:
[root@nfsclient ~]# mount -t nfs ۱۹۲٫۱۶۸٫۰٫۱۰۰:/nfsshare /mnt/nfsshare
دستور بالا پوشه مورد نظر را در مسیر mnt/nfsshare روی سرور کلاینت mount میکند. شما میتوانید با استفاده از دستور زیر آن را بررسی کنید :
کد PHP:
[root@nfsclient ~]# mount | grep nfs
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
192.168.0.100:/nfsshare on /mnt type nfs (rw,addr=192.168.0.100)
همانطور که میبینید دستور mount بالا پوشه share شده NFS را به nfsclient مانت (mount) کرده است. برای mount کردن یک پوشه NFS روی سیستم تان به صورت دایمی و حتی بعد از reboot شما باید خطی را در فایل etc/fstab ایجاد کنید :
کد PHP:
[root@nfsclient ~]# vi /etc/fstab
و خط جدید زیر را همانطور که میبینید به انتهای فایل اضافه کنید :
کد PHP:
۱۹۲٫۱۶۸٫۰٫۱۰۰:/nfsshare /mnt nfs defaults ۰ ۰
انجام تست برای اطمینان از کار کردن تنظیمات NFS :
ما میتوانیم سرور NFS مان را با ایجاد یک فایل تست روی سرور و با چک کردن این که آیا در سمت NFS Client فایل موجود است و یا بلعکس آن را تست کنیم.
در سمت nfsserver* :
من فایل متنی جدید با نام nfstest.txt در پوشه share شده ایجاد کردم :
کد PHP:
[root@nfsserver ~]# cat > /nfsshare/nfstest.txt
This is a test file to test the working of NFS server setup.
در سمت nfsclient :
در اینجا به پوشه share شده در client server میرویم و میبینیم که فایل بدون هیچ گونه نیاز به refresh دستی یا restart سرویس موجود است :
کد PHP:
[root@nfsclient]# ll /mnt/nfsshare
total ۴
-rw-r–r– ۱ root root ۶۱ Sep ۲۱ ۲۱:۴۴ nfstest.txt
root@nfsclient ~]# cat /mnt/nfsshare/nfstest.txt
This is a test file to test the working of NFS server setup.
جذف NFS Mount :
اگر شما بعد از اتمام file sharing بخواهید پوشه به اشتراک شده را از سرورتان unmount کنید شما میتوانید به آسانی از دستور umount استفاده کنید :
کد PHP:
root@nfsclient ~]# umount /mnt/nfsshare
شما میتوانید ببینید که mount ها حذف شده اند و تنها کافیست دستور زیر را اجرا کنید :
کد PHP:
[root@nfsclient ~]# df -h -F nfs
همانطور که میبینید پوشه های share شده دیگر موجود نیستند.
دستورات مهم برای NFS :
بعضی از دستورات مهم برای NFS به شرح زیر میباشد :
showmount -e :
نمایش share های موجود روی ماشین local تان
showmount -e <server-ip or hostname> :
لیست کردن share های موجود در remote server
showmount -d :
لیست کردن تمام sub directories ها
exportfs -v :
نمایش لیستی از فایل های شیر شده و آپشن ها روی یک سرور
exportfs -a :
export کردن تمامی پوشه های share شده که در فایل etc/exports لیست شده اند. (یا نام داده شده را به صورت مجزا export میگیرد)
exportfs -u :
unexport کردن تمامی پوشه های share شده که در فایل etc/exports لیست شده اند. (یا نام داده شده را به صورت مجزا unexport میگیرد)
exportfs -r :
بعد از تغییر فایل etc/exports لیست سرور را refresh میکند.