Network File System (NFS)

Thảo luận trong 'Góc Linux' bắt đầu bởi hautp, Thg 12 18, 2012.

  1. hautp

    hautp Well-Known Member

    GIT – Khi nhu cầu trao đổi, chia sẻ (sharing) dữ liệu phát sinh trên môi trường máy chủ Linux, bạn có thể sử dụng dịch vụ Network File System (NFS) để giải quyết.
    Dịch vụ NFS cho phép chia sẻ tập tin cho nhiều người dùng trên cùng mạng và người dùng có thể thao tác như với tập tin trên chính đĩa cứng của mình.
    1. Cài đặt nfs server:
    Với hệ thống NFS server, chúng ta sẽ sử dụng lệnh sau:
    yum install nfs-utils nfs-utils-lib
    và tạo đường dẫn khởi động cho NFS server và kích hoạt luôn dịch vụ này:
    chkconfig nfs on
    /etc/init.d/nfs start
    Với hệ thống NFS client cũng tương tự:
    yum install nfs-utils nfs-utils-lib
    NFS sử dụng thủ tục RPC (Remote Procedure Calls) để gửi, nhận yêu cầu giữa máy trạm và máy chủ nên dịch vụ portmap (dịch vụ quản lý yêu cầu RPC) cần phải được khởi động trước. Trên máy chủ NFS (máy dự định sẽ chia sẻ dữ liệu) khởi động hai dịch vụ nfs và portmap bằng hai câu lệnh sau:
    # service nfs start
    # service portmap start
    Để NFS hoạt động Linux cần khởi động ít nhất ba tiến trình sau:
    Portmapper : tiến trình này không làm việc trực tiếp với dịch vụ NFS mà tham gia quản lý các yêu cầu RPC từ máy trạm gửi đến.
    Mountd : tiến trình này sẽ ánh xạ tập tin trên máy chủ tới thư mục mà máy trạm yêu cầu. Bỏ ánh xạ khi máy trạm phát ra lệnh umount.
    Nfs : là tiến trình chính, thực thi nhiệm vụ của giao thức NFS, có nhiệm vụ cung cấp cho máy trạm các tập tin hoặc thư mục được yêu cầu.
    Bạn có thể kiểm tra họa động của các dịch vụ liên quan đến NFS bằng câu lệnh
    # rpcinfo -p
    program vers proto port
    100000 2 tcp 111 portmapper
    100000 2 udp 111 portmapper
    100003 2 udp 2049 nfs
    100003 3 udp 2049 nfs
    100005 2 udp 1027 mountd
    100005 2 tcp 1067 mountd
    100005 3 udp 1027 mountd
    100005 3 tcp 1067 mountd
    2. Cấu hình NFS Server:
    Việc cấu hình dịch vụ NFS khá đơn giản. NFS sử dụng tập tin /etc/exports để lưu danh sách tập tin hệ thống được chia sẻ và tên máy tính (hoặc địa chỉ IP tương ứng) được cấp quyền sử dụng. Khi thay đổi nội dung tập tin này, bạn cần quan tâm một số điểm sau:
    • Tất cả các dòng trắng đều không được đọc.
    • Các ký tự đứng sau dấu # được hiểu là chú thích.
    • Nếu dòng quá dài, bạn có thể xuống dòng bằng cách sử dụng dấu báo xuống dòng (\).
    Tập tin /etc/exports có cấu trúc như sau:
    </tên_thư_mục_chia_sẻ> <Tên_máy_tính_hoặc_địa_chỉ_IP><(quyền hạn)>
    Trong đó các tham số được hiểu như sau:
    Tên_thư_mục_chia_sẻ là tên thư mục cần chia sẻ cho máy trạm.
    Tên_máy_tính_hoặc_địa_chỉ_IP là tên máy được chia sẻ hoặc địa chỉ IP tương ứng. Nếu bạn dùng địa chỉ IP thì có thể liệt kê nhiều máy theo địa chỉ mạng con.
    Quyền hạn: các máy trạm có thể có các quyền hạn sau:
    • rw: quyền đọc và viết.
    • ro: quyền chỉ đọc.
    • noaccess: cấm truy cập vào các thư mục cấp con của thư mục được chia sẻ.
    Ví dụ: bạn cần chia sẻ thư mục /home/gocit cho các máy có địa chỉ từ 192.168.0.0 đến 192.168.0.15 quyền đọc viết thì tập tin /etc/exports viết là:
    /home/gocit 192.168.0.0/28(rw)
    Lưu ý: giữa tên máy hoặc địa chỉ IP với quyền hạn thường không có dấu cách. Nếu bạn viết lại tập tin/etc/exports như sau:
    /home/gocit 192.168.0.0/28 (rw)
    thì các máy từ 192.168.0.0 đến 192.168.0.15 chỉ có quyền đọc, còn các máy khác (địa chỉ IP không thuộc dải trên) lại có quyền đọc và ghi đầy đủ.
    Khi cần chia sẻ cho nhiều máy thì tên các máy (hoặc địa chỉ IP) có thể viết trên cùng một dòng nhưng cách nhau bằng khoảng trắng
    Ví dụ: Bạn muốn chia sẻ thư mục /var/www/html cho các máy tính có địa chỉ IP là 192.168.3.2, 192.168.3.5, 192.168.3.7. và www.gocit.vn có quyền đọc, ghi là:
    var/www/html 192.168.3.2(rw) 192.168.3.5(rw) 192.168.3.7(rw) www.gocit.vn(rw)
    3. Đọc dữ liệu chia sẻ từ máy trạm
    Bất cứ thư mục chia sẻ nào trên server đều có thể đọc bằng nhiều cách khác nhau. Tất nhiên, các thư mục này có thể đọc thủ công bằng cách sử dụng câu lệnh mount, nhưng cách này đòi hỏi người sử dụng phải có quyền quản trị. Nếu bạn dự định làm theo cách này thì sử dụng 2 câu lệnh dưới đây:
    Câu lệnh ánh xạ dữ liệu từ server lên thư mục máy trạm:
    Mount <tên_máy_chủ:/tên_thư_mục_chia_sẻ> < /tên_thư_mục_cần ánh_xạ>
    Lưu ý: trước khi chạy câu lệnh này bạn cần kiểm tra xem thư mục cần ánh xạ đã tồn tại thực hay chưa.
    Ví d: bạn cần ánh xạ thư mục /home/gocit trên máy có địa chỉ IP 192.16.3.3 lên thư mục /etc/gocit trên máy trạm bạn đang làm việc thì câu lệnh là:
    mount 192.16.3.3:/home/gocit /etc/gocit
    Sau khi câu lệnh này chạy bạn có thể thực thi các thao tác trên thư mục /etc/gocit như trên một thư mục vật lý thông thường. Sau khi kết thúc việc đọc ghi dữ liệu hoặc tắt máy, bạn có thể bỏ ánh xạ bằng câu lệnh:
    umount /etc/gocit
    Ngoài cách mount (ánh xạ) thủ công này bạn có thể để hệ thống tự động ánh xạ khi khởi động bằng cách viết thêm dòng lệnh có cấu trúc như sau vào tập tin/etc/fstab:
    <tên server>:</đường dẫn đến thư mục chia sẻ> </đường dẫn cục bộ> nfs
    Trong đó:
    Tên server là tên của server có thư mục, và tập tin chia sẻ đã khai báo.
    Đường dẫn đến thư mục chia sẻ là đường dẫn tuyệt đối đến thư mục chia sẻ trên server.
    Đường dẫn cục bộ là đường dẫn đến thư mục bạn cần ánh xạ đến trên máy trạm.
    Nfs chỉ cho hệ điều hành biết đây là thư mục của NFS.
    Ví dụ: bạn có thể ánh xạ thư mục /home/gocit trên máy có địa chỉ IP 192.16.3.3 lên thư mục /etc/gocit trên máy trạm bạn đang làm việc bằng cách thêm dòng sau vào tập tin /etc/fstab:
    192.16.3.3:/home/gocit /etc/gocit nfs
    Với cách ánh xạ này người dùng không nhất thiết phải có quyền quản trị. Thay vào đó khi muốn sử dụng một thư mục NFS nào đó họ chỉ cần sử dụng câu lệnh mount với một tham số:
    mount <tên thư mục NFS cục bộ>
    Ví dụ: Để đọc các tập tin trên thư mục /home/gocit của máy 192.16.3.3 (đã được ánh xạ lên thư mục /etc/gocit của máy cục bộ), bạn có thể nhập câu lệnh dưới đây tại máy trạm:
    mount /etc/gocit
    Tất cả các tập tin và thư mục có trên /home/gocit của máy 192.16.3.3 sẽ hiển thị trên thư mục /etc/gocit
    4. Khởi động, ngừng và kiểm tra hoạt động của dịch cụ NFS
    Sau khi sửa đổi tập tin cấu hình /etc/exports, NFS không thể hiểu ngay sự thay đổi này. Do đó bạn phải khởi động lại dịch vụ bằng câu lệnh:
    /etc /init.d/nfs start
    hoặc
    service nfs restart
    Ngược lại khi muốn dịch vụ ngừng hoạt động, bạn có thể dùng một trong hai câu lệnh dưới đây:
    /etc/init.d/nfs stop
    hoặc
    service nfs stop
    Đôi khi bạn cũng cần kiểm tra trạng thái hoạt động của dịch vụ NFS trên server của mình để biết rằng dịch vụ này hiện đang hoạt động hay đã ngừng.
    Câu lệnh:
    /etc/init.d/nfs status
    hoặc
    service nfs status
    sẽ thông báo tình trạng hoạt động hiện tại của dịch vụ. Cũng như các dịch vụ khác, nếu dịch vụ hoạt động tốt thì bạn sẽ nhận được thông báo như sau:
    rpc.mountd (pid 756) is running…
    nfsd (pid 768 767 766 765 764 763 762 761) is running…
    rpc.rquotad (pid 751) is running…
    Số pid (Process Identification) trên máy tính của bạn có thể sẽ khác tuỳ thuộc vào việc hệ điều hành quản lý các tiến trình như thế nào. Vì vậy bạn không cần băn khoăn về sự khác biệt này.
    5. Một số hướng dẫn thêm về NFS
    Trên server, chúng ta sẽ thử thao tác trên thư mục /home và /var/nfs sẽ được truy cập từ phía client, do vậy cần thiết phải export chúng ngay trên server. Khi 1 client truy cập tới thư mục NFS chia sẻ, thông thường đó là tài khoản nobody, và thư mục /home không thuộc quyền quản lý của tài khoản nobody này, thêm 1 điểm nữa là chúng ta cần phân quyền đọc và ghi trên thư mục /home, ta cần “thông báo” với NFS rằng các kết nối truy cập sẽ được tạo ra từ tài khoản root (nếu thư mục /home có thuộc tính read-only thì bước này hoàn toàn không cần thiết). Thư mục /var/nfs không tồn tại, do vậy chúng ta phải tạo và gán các thuộc tính thích hợp cho nó. Trong bài thử nghiệm này, tài khoản người dùng và nhóm đều có ID là 99 trên cả 2 hệ thống CentOS server và client. Khi cố gắng thực hiện lệnh ghi dữ liệu đến /var/nfs từ phía NFS client, ta sẽ nhận được lỗi Permission denied, do đó hãy sử dụng lệnh chmod 777 /var/nfs để bất cứ tài khoản nào cũng có thể thực hiện thao tác ghi trên thư mục đó, và áp dụng tương tự với /var/nfs. Nhưng trên hệ thống server, chúng lại được quản lý bởi các tài khoản và nhóm nonexistant – với ID 65534:
    mkdir /var/nfs
    chown 65534:65534 /var/nfs
    chmod 755 /var/nfs
    Tiếp theo, chúng ta phải thiết lập /etc/exports tại nơi ta export các thư mục chia sẻ NFS. Khởi tạo tham số /home và /var/nfs như NFS share và tạo ra các truy cập tới /home như tài khoản root (để tìm hiểu thêm về lệnh /etc/exports, các định dạng cho phép và lựa chọn phù hợp, hãy tham khảo thêm tại đây – man 5 exports):
    vi /etc/exports
    /home 192.168.0.101(rw,sync,no_root_squash,no_subtree_check)
    /var/nfs 192.168.0.101(rw,sync,no_subtree_check)
    (lựa chọn no_root_squash sẽ khiến cho /home được truy cập như tài khoản root). Mỗi khi chỉnh sửa /etc/exports chúng ta phải thực hiện lệnh:
    exportfs -a
    thì các thay đổi mới có hiệu quả.
    Gán các thư mục NFS chia sẻ trên client:
    Trên hệ thống client, hãy tạo thư mục để gán dữ liệu NFS chia sẻ, ví dụ:
    mkdir -p /mnt/nfs/home
    mkdir -p /mnt/nfs/var/nfs
    sau đó áp dụng lệnh sau:
    mount 192.168.0.100:/home /mnt/nfs/home
    mount 192.168.0.100:/var/nfs /mnt/nfs/var/nfs
    và bạn sẽ thấy trong kết quả hiển thị của lệnh:
    df -h
    là 2 thư mục chia sẻ vừa được gán:
    # df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/VolGroup00-LogVol00
    28G 2.2G 25G 8% /
    /dev/sda1 99M 13M 82M 14% /boot
    tmpfs 250M 0 250M 0% /dev/shm
    192.168.0.100:/home 28G 2.6G 25G 10% /mnt/nfs/home
    192.168.0.100:/var/nfs
    28G 2.6G 25G 10% /mnt/nfs/var/nfs
    và lệnh:mount
    # mount
    /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
    proc on /proc type proc (rw)
    sysfs on /sys type sysfs (rw)
    devpts on /dev/pts type devpts (rw,gid=5,mode=620)
    /dev/sda1 on /boot type ext3 (rw)
    tmpfs on /dev/shm type tmpfs (rw)
    none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
    sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
    192.168.0.100:/home on /mnt/nfs/home type nfs (rw,addr=192.168.0.100)
    192.168.0.100:/var/nfs on /mnt/nfs/var/nfs type nfs (rw,addr=192.168.0.100)
    Kiểm tra:
    Trên thành phần client, bạn hãy thử tạo file thử nghiệm trên NFS chia sẻ:
    touch /mnt/nfs/home/test.txt
    touch /mnt/nfs/var/nfs/test.txt
    Trên server:
    # ls -l /home/
    total 55540
    -rw-r–r– 1 root root 0 Sep 16 17:30 test.txt
    # ls -l /var/nfs
    total 0
    -rw-r–r– 1 65534 65534 0 Sep 16 17:30 test.txt
    Hãy lưu ý đến thuộc tính quyền sở hữu của file test, thư mục /home NFS được gán quyền truy cập như root, do đó file /home/test.txt thuộc về tài khoản root, và tương tự, /var/nfs sẽ thuộc quyền quản lý của 65534.
    Tự động ghép các thư mục NFS chia sẻ khi hệ thống khởi động:
    Thay vì việc gán các thư mục chia sẻ này theo cách thủ công từ phía client, chúng ta có thể chỉnh lại file /etc/fstab để hệ thống tự động nhận dạng khi khởi động. Trên client, mở file /etc/fstab:
    vi /etc/fstab
    [...]
    192.168.0.100:/home /mnt/nfs/home nfs rw,sync,hard,intr 0 0
    192.168.0.100:/var/nfs /mnt/nfs/var/nfs nfs rw,sync,hard,intr 0 0
    thay vì rw,sync,hard,intr bạn có thể sử dụng các lựa chọn khác nhau. Để tìm hiểu thêm về những lựa chọn này, hãy xem thêm tại dòng lệnh:
    man nfs
    Kiểm tra lại xem việc chỉnh sửa /etc/fstab có mang lại hiệu quả hay không, hãy khởi động lại hệ thống client:
    reboot
    Sau quá trình này, bạn sẽ thấy 2 thư mục chia sẻ NFS khi gõ lệnh:
    # df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/VolGroup00-LogVol00
    28G 2.2G 25G 8% /
    /dev/sda1 99M 13M 82M 14% /boot
    tmpfs 250M 0 250M 0% /dev/shm
    192.168.0.100:/home 28G 2.6G 25G 10% /mnt/nfs/home
    192.168.0.100:/var/nfs
    28G 2.6G 25G 10% /mnt/nfs/var/nfs
    và:
    # mount
    /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
    proc on /proc type proc (rw)
    sysfs on /sys type sysfs (rw)
    devpts on /dev/pts type devpts (rw,gid=5,mode=620)
    /dev/sda1 on /boot type ext3 (rw)
    tmpfs on /dev/shm type tmpfs (rw)
    none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
    sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
    192.168.0.100:/home on /mnt/nfs/home type nfs (rw,sync,hard,intr,addr=192.168.0.100)
    192.168.0.100:/var/nfs on /mnt/nfs/var/nfs type nfs (rw,sync,hard,intr,addr=192.168.0.100)
    Nếu đã quen với chức năng chia sẻ trên máy sử dụng hệ điều hành Windows thì giờ đây với Linux, bạn sẽ thấy NFS rất hữu ích; đặc biệt với mạng máy tính có nhiều người cộng tác.
    Theo : PCWorld Việt Nam
     

Chia sẻ trang này