(NFS (Network File System اساساً برای به اشتراک گذاری فایلها و پوشهها بین سیستمهای Linux/Unix به وسیلهی Sun Microsystems در سال ۱۹۸۰ توسعه یافته شده است.NFS اجازه میدهد فایل سیستمهای محلی خود را بر روی یک شبکه و میزبانهای راه دور برای تعامل ، به عنوانی که آنها به صورت محلی در یک سیستم مشابه سوار شدهاند ،سوار کنید.با کمک NFS ،ما میتوانیم اشتراک فایل بین سیستم یونیکس به لینوکس و سیستم لینوکس به یونیکس را راه اندازی کنیم.
مزایای NFS
- NFS اجازهی دسترسی محلی به فایلهای از راه دور را میدهد.
- NFS از معماری سرویس گیرنده / سرویس دهنده استاندارد برای به اشتراک گذاری فایل بین همهی ماشینهای مبتنی بر *nix ،استفاده میکند.
- با NFS ،هیچ نیازی نیست که روی هر دو ماشین ،سیستمعامل مشابه اجرا شده باشد.
- با کمک NFS ما میتوانیم راه حلهای ذخیرهسازی مرکزی را پیکربندی کنیم.
- کاربران میتواننند اطلاعات خود را بدون توجه به موقعیت فیزیکی ،دریافت کنند.
- هیچ refresh دستی برای فایلهای جدید نیاز نمیشود.
- نسخهی جدیدتر از NFS همچنین ACL و مانت ریشهی کاذب را پشتیبانی میکند.
- میتوان با Firewallها و Kerberos آن را امنتر کرد.
سرویسهای NFS
یک سیستم V-launched service ،است.بسته سرور NFS شامل سه سرویس گنجانده شده در بستههای portmap وnfs-utils میباشد.
- Portmap :
فراخوانیهای portmap توسط سیستمهای دیگر برای اصلاح سرویس RPC ساخته شده است (با NFSv4 لازم نیست). - Nfs:
این ،درخواستهای به اشتراک گذاری فایل از راه دور را به درخواستهای روی فایل سیستم محلی ،ترجمه میکند. - rpc.mountd:
این سرویس مسئول نصب و پیاده کردن سیستم های فایل است.
فایل های مهم برای پیکربندی NFS
- /etc/exports :
این فایل اصلی پیکربندی NFS است ،همهی فایلهای exporte شده و دایرکتوریها در سرور NFS در این فایل تعریف میشوند. - /etc/fstab :
برای مانت کردن یک دایرکتوری NFS ،روی سیستم خود ،ما احتیاج به ساختن یک ورودی در /etc/fstab داریم. - /etc/sysconfig/nfs :
فایل پیکربندی NFS ، برای کنترل ،روی آنچه که پورت rpc و سرویسهای دیگر که در حال شنیدن هستند.
راهاندازی و پیکربندی NFS Mount روی لینوکس سرور
برای راه اندازی مانتهای NFS ،ما حداقل به دو ماشین Linux/Unix احتیاج خواهیم داشت.در این آموزش من از دو سرور استفاده خواهم کرد.
NFS سرور: nfsserver.example.com با IP 192.168.0.100
NFS کلاینت: nfsclient.example.com با IP 192.168.0.101
نصب NFS Server و NFS Client
ما به نصب بستههای NFS روی NFS Server و همچنین NFS Client نیاز داریم.ما میتوانیم از طریق نصاب بستهها “yum” (Red Hat Linux) و “(apt-get” (Debian and Ubuntu ،نصب کنیم.
[[email protected] ~]# yum install nfs-utils nfs-utils-lib [[email protected] ~]# yum install portmap (not required with NFSv4)
[[email protected] ~]# apt-get install nfs-utils nfs-utils-lib
حالا سرویسها را روی هر دوتا سیستم start کنید.
[[email protected] ~]# /etc/init.d/portmap start [[email protected] ~]# /etc/init.d/nfs start [[email protected] ~]# chkconfig --level 35 portmap on [[email protected] ~]# chkconfig --level 35 nfs on
بعداز نصب بستهها و start سرویسها در هر دو ماشین ،ما احتیاج به پیکربندی هردو ماشین برای اشتراک گذاری فایل داریم.
راه اندازی سرور NFS
اول ما سرور NFS را پیکربندی میکنیم.
پیکربندی دایرکتوری Export
برای به اشتراک گذاری یک دایرکتوری با NFS ،ما احتیاج به ساختن یک ورودی در فایل پیکربندی “/etc/exports” داریم.در اینجا ما یک فایل به نام “nfsshare” در پارتیشن “/” برای به اشتراگ کذاری با client ایجاد میکنیم.شما همچنین میتوانید یک دایرکتوری در حال حاضر موجود ،را با NFS به اشتراک بگذارید.
[[email protected] ~]# mkdir /nfsshare
در حال حاضر ما احتیاج داریم که یک ورودی در “/etc/exports” بسازیم و سرویسها را برای به قابل اشتراک گذاشتن دایرکتوری در شبکه ،restart کنیم.
[[email protected] ~]# vi /etc/exports /nfsshare 192.168.0.101(rw,sync,no_root_squash)
در مثال بالا ،یک دایرکتوری در پارتیشن / به نام “nfsshare” که به اشتراک گذاری شده با IP کلاینت “۱۹۲٫۱۶۸٫۰٫۱۰۱” با دسترسی خواندن و نوشتن (rw) ، وجود دارد.شما همچنین میتوانید از نام میزبان hostname کلاینت در محل IP در مثال بالا استفاده کنید.
آپشنهای NFS:
برخی دیگر از آپشنهایی که ما میتوانیم در فایل “/etc/exports” برای به اشتراگ گذاری فایل استفاده کنیم ،به شرح زیر است:
- ro:
با کمک این آپشن ما میتوانیم دسترسی فقط خواندنی را برای فایلهای به اشتراگ گذاری شده فراهم کنیم.به این ترتیب client فقط قادر به خواندن است. - rw:
این آپشن اجازه میدهد تا client هم دسترسی خواندن و نوشتن را با هم ،داخل پوشهی به اشتراک گذاشته شده داشته باشد. - Sync:
سرور NFS پاسخی به درخواستها نخواهد داد قبل از اینکه تغییرات ساخته شده توسط درخواست قبلی روی دیسک نوشته شده باشد.به عبارت دیگر ،پاسخ به client ها بعداز آنکه داده در حافظهی پایدار ذخیره شده باشد.این پیشفرض است. - no_subtree_check:
این آپشن از چک شدن زیر درخت (subtree) جلوگیری میکند.وقتی یک دایرکتوری به اشتراک گذاشته شده ،یک زیرشاخهای از فایل سیستم بزرگتر باشد ،NFS از هر دایرکتوری بالاتر از آن ،به منظور تأیید مجوز و جزئیات آن اسکن انجام میدهد.غیر فعال کردن چک زیر درخت ممکن است باعث افزایش قابلیت اطمینان NFS شود اما امنیت را کاهش میدهد. - no_root_squash:
این عبارت اجازه میدهد به پوشهی تعیین شده متصل شود.
برای آپشنهای بیشتر با “/etc/exports“ ،پیشنهاد میشود صفحهی man برای export را مشاهده کنید.
راهاندازی کلاینت NFS
بعد از پیکربندی سرور NFS ،ما نیاز به مانت کردن پوشهی به اشتراک گذاشته شده یا پارتیشن در کلاینت داریم.
مانت کردن پوشهی به اشتراک گذاشته شده روی کلاینت NFS
الان در کلاینت NFS ،ما نیاز به مانت کردن آن دایرکتوری روی سرور برای دسترسی به آن به صورت محلی داریم.برای انجام این کار ،ابتدا ما احتیاج داریم shareهای موجود روی سرور راه دور یا سرور NFS را پیدا کنیم.
[[email protected] ~]# showmount -e 192.168.0.100 Export list for 192.168.0.100: /nfsshare 192.168.0.101
دستور بالا نشان میدهد که دایرکتوری به نام “nfsshare” در “۱۹۲٫۱۶۸٫۰٫۱۰۰” بر روی سرور شما به اشتراک گذاشته شده است ،موجود است.
مانت کردن پوشهی به اشتراک گذاشته شده
برای مانت کردن دایرکتوری NFS ،فقط لازم دستور زیر را پیگیری کنید:
[[email protected] ~]# mount -t nfs 192.168.0.100:/nfsshare /mnt/nfsshare
در دستور بالا دایرکتوری به اشتراک گذاشته شده در “/mnt/nfsshare” روی کلاینت سوار خواهد شد.شما با دستور زیر میتوانید آن را بررسی کنید.
[[email protected] ~]# 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)
در دستور مانت بالا دایرکتوری به اشتراک گذاشتهی NFS روی کلاینت NFS به صورت موقتی مانت شده است ،برای مانت کردن دایرکتوری NFS به صورت دائمی روی سیستم خود ،نیاز به ایجاد کردن یک ورودی در “/etc/fstab“ دارید.
[[email protected] ~]# nano /etc/fstab
مانند زیر این خط جدید را به آن فایل اضافه کنید.
۱۹۲٫۱۶۸٫۰٫۱۰۰:/nfsshare /mnt nfs defauls 0 0
آزمایش کارکرد NFS
ما میتوانیم سرور NFS نصب شدهی خود را با ایجاد یک فایل تست در روی سرور و چک کردن در دسترس بودن آن در سمت کلاینت NFS یا بالعکس آزمایش کنیم.
در سرور NFS
من یک فایل به نام “nfstest.txt“ در دایرکتوری به اشتراک گذاری شده ساختم.
[[email protected] ~]# cat > /nfsshare/nfstest.txt This is a test file to test the working of NFS server setup.
در کلاینت NFS
به دایرکتوری به اشتراک گذاری شده در کلاینت بروید و شما بدون انجام refresh دستی یا restart کردن سرویس میتوانید فایل به اشتراک گذاری شده را پیدا کنید.
[[email protected]]# ll /mnt/nfsshare total 4 -rw-r--r-- 1 root root 61 Sep 21 21:44 nfstest.txt [email protected] ~]# cat /mnt/nfsshare/nfstest.txt This is a test file to test the working of NFS server setup.
حذف مانت NFS
اگر شما میخواهید دایرکتوری به اشتراک گذاری شده را از روی سرور خود بعد از اتمام کار خود unmount کنید ،شما به راحتی میتوانید یک دایرکتوری بخصوص را unmount کنید البته با دستور “umount”.مثال زیر را ببینید.
[email protected] ~]# umount /mnt/nfsshare
شما میتوانید مانتهایی که حذف شدهاند را به وسیلهی نگاه انداختن مجدد در فایل سیستم ، ببینید.
[[email protected] ~]# df -h -F nfs
شما خواهید دید که این دایرکتوری به اشتراک گذاشته به هیچ وجه در دسترس نیست.
دستورات مهم برای NFS
برخی از دستورات مهم برای NFS:
- showmount -e :
نمایش share های در دسترس روی ماشین محلی - showmount -e server-ip or hostname :
لیست shareهای در دسترس در سرور از راه دور ( remote ) - showmount -d :
لیست تمام زیر دایرکتوریها (sub directorie ) - exportfs -v :
نمایش یک لیست از فایل های share شده و آپشنهای روی یک سرور - exportfs -a :
Export همهی shareهای لیست شده در /etc/exports ، با توجه به نام - exportfs -u :
Unexport همهی shareهای لیست شده در /etc/exports ،با توجه به نام - exportfs -r :
تازه کردن (Refresh) لیست سرور پس از تغییر /etc/exports
این فقط یک شروع بود.من با آپشنها و ویژگیهای بیشتری از NFS در مقالههای بعدی خواهم آمد.تا آن زمان با tazik.ir برای آموزشهای هیجان انگیز تر و جالبتر در تماس باشید.منتظر نظرات و پیشنهادهای شما در قسمت نظرات هستم.
cheers!