Mini Howto Subject: การ share file โดยใช้ NFS By: Pruet Boonma pruet@ds90.intanon.nectec.or.th> Date: Apr 3, 1998 Update from: - License: สงวนลิขสิทธิ์เอกสารนี้ โดย พฤษภ์ บุญมา การเผยแพร่เอกสารนี้จะต้องอยู่ภายไต้ เงื่อนไขของ GNU General Public License เวอร์ชั่น 2.0 ที่ออกโดย Free Sofware Foundation กรุฒาอ่านรายละเอียดของ GPL ที่ Introduction: การ share file แบบ NFS เป็นการ share file แบบ มาตรฐานของระบบ UNIX โดยจะมีลักษณะ ของ client/server กล่าวคือ จะต้องมีการ run daemon ในส่วนของ Server และ client จะเข้ามาทำการ mount เพื่อเข้ามาใช้ harddisk ของ server ได้ โดย ในส่วนของ server จะใช้ mountd และ nfsd โดย mountd จะรอรับ request ในการของ mount partition ส่วน nfsd จะรอรับ request ในการโอนถ่ายข้อมูล ในส่วนของ client นั้น จะใช้คำสั่ง mount และกำหนด ชนิด ของ file system เป็นแบบ nfs และทำการ request ไปยัง mountd เพื่อทำการขอ mount และเมื่อมีการ access ขอมูลใน directory ที่ทำการ mount ก็จะมีการ request ไปยัง nfsd เพื่อทำการโอนถ่ายข้อมูล Prerequirement: 1. /usr/sbin/rpc.nfsd ,/usr/sbin/rpc.mountd และ /usr/sbin/rpc.portmap เนื่องจากว่า NFS เป็น service ที่ใช้ RPC (remote procedure call) ในการส่งข้อมูล จึงต้องเรียก rpc.portmap ในการรับส่งข้อมูล โดยโปรแกรมทั้งหมดจะมาพร้อมกับ Linux อยู่แล้ว 2. kernel support NFS filesystem โดยสามารถ ตรวจสอบโดย # cat /proc/filesystems ext2 minix msdos nodev proc nodev nfs จะเห็นว่า support NFS file system แล้ว แต่ถ้าไม่ support ก็ทำได้โดย add module nfs เข้าไปโดย # insmod nfs ถ้าไม่ได้ ก็ต้องทำการ make kernel ใหม่ การ share file system บนเครื่อง server แบบ ชั่วคราว การ share file system แบบ NFS นั้น จะต้องทำการแก้ไข file /etc/exports เพื่อกำหนดว่า directory ใด จะทำการ share ได้บ้าง และ share ในลักษณะใด โดยสามารถดูตัวอย่างได้ดังนี้ # cat /etc/exports /home/ftp/pub (rw) /home/ftp/pub/linux/slackware/3.4/slakware (ro) /usr/lib/httpd/htdocs 202.44.248.94(ro) 202.44.248.33(rw) /usr/local/mrtg/www 202.44.248.94(rw) # จากตัวอย่างจะเห็นว่ามีการ share directory จำนวน 4 directory โดยแต่ละ directory มีการ share ที่มีลักษณะ ดังต่อไปนี้ /home/ftp/pub อนุญาติให้ใครก็ได้สามารถเข้ามาทำการอ่านเขียนได้โดยอิสระ /home/ftp/pub/linux/slackware/3.4/slakware อนุญาติให้ใครก็ได้สามารถเข้ามาอ่านได้อย่างเดียว เขียนไม่ได้ /usr/lib/httpd/htdocs อนุญาติให้เครื่องที่มี IP 202.44.248.94 มาทำการอ่านได้อย่างเดียว ส่วนเครื่อง 202.44.248.33 สามารถอ่านเขียนได้ นอกนั้นไม่อนุญาติให้เข้ามา access เลย /usr/local/mrtg/www อนุญาติให้เครื่องที่มี IP 202.44.248.94 เข้ามาทำการอ่านเขียนได้ นอกนั้นไม่อนุญาติให้เข้ามา access ได้ เมื่อทำการแก้ไข file /etc/exports แล้ว ก็ต้องทำการ ตรวจสอบว่า daemon ทั้งหลายทำงานอยู่หรือเปล่าโดยพิมพ์ #ps -ax | grep rpc 75 ? S 0:00 /usr/sbin/rpc.mountd 77 ? S 0:00 /usr/sbin/rpc.nfsd 68 ? S 0:00 (rpc.portmap) 5575 p0 S 0:00 grep rpc # จะเห็นว่าทำงานอยู่ครบ ถ้าไม่มีก็ต้อง run ขึ้นมาโดยต้อง run rpc.portmap ก่อนเสมอ โดยพิมพ์ตามนี้ (เฉพาะที่ไม่ได้ทำงานอยู่) # rpc.portmapd # rpc.mountd # rpc.nfsd ข้อสังเกตุคือ ถ้าทำการแก้ไข file /etc/exports ก็ต้องทำการ run daemon ทั้งสามตัวนี้ใหม่ด้วย หรือว่าจะ boot เครื่องไปเลยก็ได้ การ share file บนเครื่อง server แบบ อัตโนมัติเมื่อทำการ boot เครื่อง เช่นเดียวกับการ share file แบบ ชั่วคราว แต่ว่าจะต้องแก้ไขใน file /etc/rc.d/rc.inet2 โดยเอา mark (#) ออก ดังนี้ if [ -f ${NET}/rpc.portmap ]; then # Start the NFS server daemons. if [ -f ${NET}/rpc.mountd ]; then echo -n " mountd" ${NET}/rpc.mountd fi if [ -f ${NET}/rpc.nfsd ]; then echo -n " nfsd" ${NET}/rpc.nfsd fi # # Fire up the PC-NFS daemon(s). # if [ -f ${NET}/rpc.pcnfsd ]; then # echo -n " pcnfsd" # ${NET}/rpc.pcnfsd ${LPSPOOL} # fi # if [ -f ${NET}/rpc.bwnfsd ]; then # echo -n " bwnfsd" # ${NET}/rpc.bwnfsd ${LPSPOOL} # fi fi # Done starting various SUN RPC servers. เพื่อว่าเมื่อทำการ boot เครื่อง จะทำการ run rpc.mountd, rpc.nfsd และ rpc.portmap ให้เอง การ mount NFS file system ในเครื่อง client แบบ ชั่วคราว ก่อนทำการ mount จะต้องรู้ว่าจะ mount directory ที่อะไรที่ server ซึ่งอาจจะตรวจสอบดังนี้ # showmount -e 202.44.145.20 Export list for ds90: /var/lib/httpd/htdocs 202.44.248.94 /share 203.150.216.37,203.150.216.35 /secure 203.150.216.37,203.150.216.35 /var/spool/mail 203.150.216.37,203.150.216.35 /home3 203.150.216.37,203.150.216.35 /home 203.150.216.37,203.150.216.35 ซึ่งจะแสดงว่า เครื่อง server ได้ export directory อะไรออกมาบ้าง เมื่อทราบแล้วก็ทำการ mount โดย # mount -t nfs 202.44.145.20:/var/lib/httpd/htdocs /mnt เป็นการ mount directory /var/lib/httpd/htdocs จากเครื่อง 202.44.145.20 มายัง directory /mnt และเมื่อจะทำการ unmount ก็ทำได้โดย พ่ิมพ์ # umount /mnt การ mount NFS file system ในเครื่อง client แบบอัตโนมัติ เมื่อทำการ boot เครื่อง การ mount แบบถาวร เครื่องนั้นจะต้อง support file system แบบ NFS โดยจะต้องเข้าไปเพิ่มใน file /etc/rc.d/rc.M ที่บรรทัดแรกดังนี้ /sbin/insmod /lib/modules/2.0.33/fs/nfs.o แล้วต้องไปแก้ไข file /etc/fstab เพื่อให้ทำการ mount file ให้ทุกครั้งที่ทำการ boot เครื่อง ดังนี้ server:remote_directory local_directory nfs default 1 1 เช่น 202.44.145.20:/var/lib/httpd/htdocs /mnt nfs default 1 1 เป็นการ mount directory /var/lib/httpd/htdocs จากเครื่อง 202.44.145.20 ไปยัง directory /mnt