NFS یا Network File System یک پروتکل توزیعشده برای اشتراکگذاری فایلهاست که امکان مانت کردن دایرکتوریهای راهدور روی سرور شما را فراهم میکند. این ابزار به شما اجازه میدهد فضای ذخیرهسازی را در مکانی دیگر مدیریت کنید و از چندین کلاینت به آن دسترسی داشته باشید. NFS راهکاری استاندارد و کارآمد برای دسترسی به منابع اشتراکی در شبکه است، بهویژه در مواردی که نیاز به دسترسی مداوم به فایلها دارید. Block Storage نیز نوعی ذخیرهسازی مبتنی بر شبکه است که معمولاً توسط ارائهدهندگان هاستینگ ارائه میشود و برای اشتراکگذاری باید به سرور متصل شود. در این آموزش، نحوه نصب و پیکربندی NFS Server روی Ubuntu 22.04، ایجاد مانتهای NFS و تنظیم دسترسی کلاینت را توضیح میدهیم.
پیشنیازهای تنظیم NFS Server
برای شروع، موارد زیر را آماده کنید:
- دو سرور Ubuntu 22.04 (یکی بهعنوان host و دیگری بهعنوان client) با کاربر sudo غیرروت و فایروال فعال. اطمینان حاصل کنید که سرورها برای میزبانی و شبکه بهینه شدهاند.
- شبکه خصوصی (در صورت امکان) برای ارتباط امنتر بین سرورها.
- Block Storage متصل به سرور host. مسیر مانت Block Storage را یادداشت کنید (مثلاً /mnt/volume-nyc3-01).
- آدرسهای IP سرورهای host و client (ترجیحاً از شبکه خصوصی).
برای عملکرد بهینه، استفاده از سرورهایی با شبکه 10gbit توصیه میشود تا سرعت و IOPS بهتری داشته باشید.
گام 1: نصب کامپوننتهای موردنیاز
برای تنظیم NFS Server، باید بستههای لازم را روی سرور host و client نصب کنید.
روی سرور Host
روی سرور host، بسته nfs-kernel-server را نصب کنید تا امکان اشتراکگذاری دایرکتوریها فراهم شود. ابتدا بستهها را بهروزرسانی کنید:
sudo apt update sudo apt install nfs-kernel-server
روی سرور Client
روی سرور client، بسته nfs-common را نصب کنید که قابلیتهای NFS را بدون اجزای سرور فراهم میکند:
sudo apt update sudo apt install nfs-common
اکنون هر دو سرور آماده پیکربندی هستند.
گام 2: ایجاد دایرکتوریهای اشتراکی روی Host
برای اشتراکگذاری، یک دایرکتوری روی Block Storage متصلشده به host ایجاد میکنیم. فرض کنید Block Storage شما در مسیر /mnt/volume-nyc3-01 مانت شده است. دایرکتوری اشتراکی به نام nfs ایجاد کنید:
sudo mkdir -p /mnt/volume-nyc3-01/nfs
چون این دایرکتوری با sudo ایجاد شده، مالک آن root است. برای بررسی:
ls -dl /mnt/volume-nyc3-01/nfs/
خروجی شبیه این خواهد بود:
drwxr-xr-x 2 root root 4096 Sep 27 16:19 /mnt/volume-nyc3-01/nfs/
برای امنیت، NFS عملیات root روی کلاینت را به nobody:nogroup تبدیل میکند. بنابراین، مالکیت دایرکتوری را تغییر دهید:
sudo chown nobody:nogroup /mnt/volume-nyc3-01/nfs/
اکنون آماده تنظیم اشتراک این دایرکتوری هستید.
گام 3: پیکربندی NFS Exports روی سرور Host
برای اشتراکگذاری دایرکتوری، فایل پیکربندی NFS را ویرایش کنید. فایل /etc/exports را باز کنید:
sudo nano /etc/exports
خط زیر را برای دایرکتوری اشتراکی اضافه کنید، با جایگزینی client_ip با آدرس IP کلاینت:
/mnt/volume-nyc3-01/nfs/ client_ip(rw,sync,no_subtree_check)
گزینههای استفادهشده:
- rw: امکان خواندن و نوشتن برای کلاینت.
- sync: تغییرات را قبل از پاسخ به دیسک مینویسد (ایمنتر اما کندتر).
- no_subtree_check: بررسی زیرشاخه را غیرفعال میکند تا از مشکلات تغییر نام فایل جلوگیری شود.
فایل را ذخیره کنید و ببندید (در nano: Ctrl+X، Y، Enter).
سرویس NFS را ریاستارت کنید:
sudo systemctl restart nfs-kernel-server
گام 4: تنظیم فایروال روی سرور Host
برای اطمینان از دسترسی کلاینت به NFS، فایروال را بررسی و تنظیم کنید:
sudo ufw status
خروجی ممکن است شبیه این باشد:
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
برای اجازه ترافیک NFS از کلاینت، پورت 2049 را باز کنید:
sudo ufw allow from client_ip to any port nfs
وضعیت فایروال را بررسی کنید:
sudo ufw status
خروجی باید شامل پورت 2049 باشد:
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 2049 ALLOW 203.0.113.24 OpenSSH (v6) ALLOW Anywhere (v6)
گام 5: ایجاد نقاط مانت و مانت کردن دایرکتوریها روی Client
برای دسترسی به اشتراک NFS، باید دایرکتوری host را روی کلاینت مانت کنید. ابتدا یک دایرکتوری خالی روی کلاینت ایجاد کنید:
sudo mkdir -p /nfs/general
هشدار: اگر دایرکتوری انتخابشده حاوی فایل باشد، پس از مانت کردن مخفی میشوند. از خالی بودن دایرکتوری مطمئن شوید.
اشتراک را با آدرس IP سرور host مانت کنید:
sudo mount host_ip:/mnt/volume-nyc3-01/nfs/ /nfs/general
برای بهبود IOPS در برخی بارهای کاری، میتوانید از گزینه nconnect استفاده کنید:
sudo mount -o nconnect=8 host_ip:/mnt/volume-nyc3-01/nfs/ /nfs/general
برای بررسی مانت شدن اشتراک:
df -h
خروجی شامل اشتراک مانتشده خواهد بود:
Filesystem Size Used Avail Use% Mounted on tmpfs 198M 972K 197M 1% /run /dev/vda1 50G 3.5G 47G 7% / tmpfs 989M 0 989M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/vda15 105M 5.3M 100M 5% /boot/efi tmpfs 198M 4.0K 198M 1% /run/user/1000 10.124.0.3:/mnt/volume-nyc3-01/nfs/ 25G 5.9G 19G 24% /nfs/general
برای بررسی فضای استفادهشده:
du -sh /nfs/general
خروجی ممکن است شبیه این باشد:
4.0K /nfs/general
گام 6: تست دسترسی به NFS
برای تست دسترسی، یک فایل آزمایشی در اشتراک ایجاد کنید:
sudo touch /nfs/general/test
مالکیت فایل را بررسی کنید:
ls -l /nfs/general/test
خروجی:
-rw-r--r-- 1 nobody nogroup 0 Sep 28 18:05 /nfs/general/test
چون رفتار پیشفرض NFS استفاده شده، فایلهای ایجادشده توسط root کلاینت به nobody:nogroup تعلق دارند.
گام 7: مانت خودکار دایرکتوریهای NFS در بوت
برای مانت خودکار اشتراک در زمان بوت، فایل /etc/fstab را ویرایش کنید:
sudo nano /etc/fstab
خط زیر را به انتهای فایل اضافه کنید:
host_ip:/mnt/volume-nyc3-01/nfs/ /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
فایل را ذخیره کنید و ببندید. این تنظیم باعث مانت خودکار اشتراک در بوت میشود.
گام 8: حذف مانت NFS
اگر دیگر نیازی به اشتراک ندارید، از دایرکتوری خارج شوید و آن را unmount کنید:
cd ~ sudo umount /nfs/general
برای بررسی حذف اشتراک:
df -h
خروجی دیگر شامل اشتراک NFS نخواهد بود:
Filesystem Size Used Avail Use% Mounted on tmpfs 198M 972K 197M 1% /run /dev/vda1 50G 3.5G 47G 7% / tmpfs 989M 0 989M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/vda15 105M 5.3M 100M 5% /boot/efi tmpfs 198M 4.0K 198M 1% /run/user/1000
برای جلوگیری از مانت خودکار، خط مربوطه در /etc/fstab را حذف کنید یا با # کامنت کنید.
نتیجهگیری
در این آموزش، یک NFS Server با استفاده از Block Storage روی Ubuntu 22.04 تنظیم کردید، دایرکتوریهای اشتراکی ایجاد کردید و آنها را روی کلاینت مانت کردید. همچنین فایروال را برای دسترسی ایمن پیکربندی کردید. توجه داشته باشید که NFS رمزنگاری ندارد، بنابراین برای امنیت بیشتر، از شبکه خصوصی یا تونلهای رمزنگاریشده مانند VPN استفاده کنید. برای اطلاعات بیشتر، مستندات رسمی NFS یا منابع آموزشی ذخیرهسازی را کاوش کنید.