Hướng dẫn này sẽ hướng dẫn bạn thiết lập một máy chủ NFS và một client NFS trên CentOS 7. NFS là viết tắt của Network File System; thông qua NFS, một client có thể truy cập (đọc, viết) tới một thư mục chia sẻ từ xa trên một máy chủ NFS. Tôi sẽ sử dụng một máy chủ CentOS 7.2 để làm cơ sở cho việc cài đặt. 1. Lưu ý Tôi đang sử dụng hai hệ thống CentOS ở đây: NFS Server: server.example.com, địa chỉ IP: 192.168.1.100 NFS Client: client.example.com, địa chỉ IP: 192.168.1.101 2. Cấu hình Firewall Cài đặt firewalld với lệnh sau: Mã: yum -y install firewalld Khởi động firewalld và cho phép nó được bắt đầu vào lúc khởi động. Mã: systemctl start firewalld.service systemctl enable firewalld.service Tiếp theo, mở SSH và cổng NFS để đảm bảo rằng bạn sẽ có thể kết nối đến máy chủ bằng SSH cho mục đích quản trị và bằng NFS từ client của chúng tôi. Mã: firewall-cmd --permanent --zone=public --add-service=ssh firewall-cmd --permanent --zone=public --add-service=nfs firewall-cmd --reload 3. Cài đặt NFS Server: Trên máy chủ NFS chúng tôi chạy lệnh: Mã: yum -y install nfs-utils Sau đó, kích hoạt và bắt đầu dịch vụ máy chủ nfs. Mã: systemctl enable nfs-server.service systemctl start nfs-server.service Client: Trên client, chúng ta có thể cài đặt NFS như sau (điều này là thực sự giống như trên server): Mã: yum -y install nfs-utils 4. Export thư mục trên máy chủ Server: Tôi muốn làm cho các thư mục /home và /var/nfs có thể truy cập tới khách hàng; do đó chúng ta phải export chúng trên máy chủ. Khi một khách hàng truy cập một chia sẻ NFS, điều này thường xảy ra với user nfsnobody. Thông thường các thư mục /home không thuộc sở hữu của nfsnobody (và tôi không khuyên bạn nên thay đổi quyền sở hữu của thư mục đó sang nfsnobody). Bởi vì chúng tôi muốn đọc và viết vào /home và chúng tôi muốn các truy cập NFS nên được thực hiện với user root. Các thư mục /var/nfs không tồn tại, vì vậy chúng tôi có thể tạo ra nó và thay đổi quyền sở hữu tới user và group nfsnobody. Mã: mkdir /var/nfs chown nfsnobody:nfsnobody /var/nfs chmod 755 /var/nfs Bây giờ chúng ta phải sửa đổi tập tin /etc/exports nơi chúng tôi export thư mục chia sẻ NFS. Chúng tôi xác định thư mục /home và /var/nfs làm thư mục chia sẻ NFS và cấu hình NFS để truy cập vào thư mục /home phải là user root. Để tìm hiểu thêm về /etc/exports, định dạng của nó và các tùy chọn có sẵn, hãy dùng lệnh sau: Mã: man 5 exports Mở tập tin /etc/exports Mã: vim /etc/exports Mã: /home 192.168.1.101(rw,sync,no_root_squash,no_subtree_check) /var/nfs 192.168.1.101(rw,sync,no_subtree_check) (Tùy chọn no_root_squash sẽ cho biết thư mục /home sẽ phải được truy cập bằng user root.) Bất cứ khi nào chúng ta chỉnh sửa /etc/exports , chúng tôi phải chạy lệnh sau: Mã: exportfs -a sau đó, các thay đổi sẽ có hiệu lực. 5. Gắn kết (mount) thư mục chia sẻ NFS trên Client Client: Đầu tiên chúng ta tạo ra thư mục nơi mà chúng tôi muốn gắn kết các thư mục chia sẻ NFS, ví dụ: Mã: mkdir -p /mnt/nfs/home mkdir -p /mnt/nfs/var/nfs Sau đó, chúng ta có thể gắn kết chúng như sau: Mã: mount 192.168.1.100:/home /mnt/nfs/home mount 192.168.1.100:/var/nfs /mnt/nfs/var/nfs Bây giờ bạn sẽ nhìn thấy hai thư mục chia sẻ NFS trong các kết quả đầu ra của lệnh sau: Mã: df -h Mã: Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 28G 1.7G 26G 7% / devtmpfs 909M 0 909M 0% /dev tmpfs 919M 0 919M 0% /dev/shm tmpfs 919M 8.6M 910M 1% /run tmpfs 919M 0 919M 0% /sys/fs/cgroup /dev/sda1 497M 208M 290M 42% /boot tmpfs 184M 0 184M 0% /run/user/0 192.168.1.100:/home 28G 1.2G 27G 5% /mnt/nfs/home 192.168.1.100:/var/nfs 28G 1.2G 27G 5% /mnt/nfs/var/nfs và Mã: mount Mã: sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=930320k,nr_inodes=232580,mode=755) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755) tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755) cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd) pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime) cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event) cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu) cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio) cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) configfs on /sys/kernel/config type configfs (rw,relatime) /dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota) selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime) systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=25,pgrp=1,timeout=300,minproto=5,maxproto=5,direct) mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel) debugfs on /sys/kernel/debug type debugfs (rw,relatime) hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) nfsd on /proc/fs/nfsd type nfsd (rw,relatime) /dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota) tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188060k,mode=700) 192.168.1.100:/home on /mnt/nfs/home type nfs4 (rw,relatime,vers=4.0,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.101,local_lock=none,addr=192.168.1.100) 192.168.1.100:/var/nfs on /mnt/nfs/var/nfs type nfs4 (rw,relatime,vers=4.0,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.101,local_lock=none,addr=192.168.1.100) 6. Kiểm tra Trên client bây giờ bạn tạo ra các tập tin thử nghiệm trên các thư mục chia sẻ NFS: Client: Mã: touch /mnt/nfs/home/test.txt touch /mnt/nfs/var/nfs/test.txt Bây giờ đi tới server và kiểm tra xem bạn có thể nhìn thấy cả hai tập tin thử nghiệm. Server: Mã: ls -l /home/ Mã: total 0 -rw-r--r--. 1 root root 0 Jun 29 13:07 test.txt Mã: ls -l /var/nfs Mã: total 0 -rw-r--r--. 1 nfsnobody nfsnobody 0 Jun 29 13:07 test.txt 7. Gắn kết thư mục chia sẻ NFS tại thời gian khởi động Thay vì gắn kết các thư mục chia sẻ NFS bằng tay trên client bạn có thể chỉnh sửa /etc/fstab để các thư mục chia sẻ NFS được gắn kết tự động khi khởi động máy client. Client: Mở /etc/fstab và thêm các dòng sau: Mã: nano /etc/fstab Mã: [...] 192.168.1.100:/home /mnt/nfs/home nfs rw,sync,hard,intr 0 0 192.168.1.100:/var/nfs /mnt/nfs/var/nfs nfs rw,sync,hard,intr 0 0 Để tìm hiểu thêm về các tùy chọn có sẵn khác, hãy dùng lệnh: Mã: man nfs Để kiểm tra nếu sửa đổi /etc/fstab đang làm việc, khởi động lại client: Mã: reboot Sau khi khởi động, bạn sẽ tìm thấy hai thư mục chia sẻ NFS trong các kết quả đầu ra của lệnh sau: Mã: df -h Mã: Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 28G 1.7G 26G 7% / devtmpfs 909M 0 909M 0% /dev tmpfs 919M 0 919M 0% /dev/shm tmpfs 919M 8.6M 910M 1% /run tmpfs 919M 0 919M 0% /sys/fs/cgroup /dev/sda1 497M 208M 290M 42% /boot tmpfs 184M 0 184M 0% /run/user/0 192.168.1.100:/home 28G 1.2G 27G 5% /mnt/nfs/home 192.168.1.100:/var/nfs 28G 1.2G 27G 5% /mnt/nfs/var/nfs và Mã: mount Mã: sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=930320k,nr_inodes=232580,mode=755) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755) tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755) cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd) pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime) cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event) cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu) cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio) cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) configfs on /sys/kernel/config type configfs (rw,relatime) /dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota) selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime) systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=25,pgrp=1,timeout=300,minproto=5,maxproto=5,direct) mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel) debugfs on /sys/kernel/debug type debugfs (rw,relatime) hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) nfsd on /proc/fs/nfsd type nfsd (rw,relatime) /dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota) tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188060k,mode=700) 192.168.1.100:/home on /mnt/nfs/home type nfs4 (rw,relatime,vers=4.0,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.101,local_lock=none,addr=192.168.1.100) 192.168.1.100:/var/nfs on /mnt/nfs/var/nfs type nfs4 (rw,relatime,vers=4.0,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.101,local_lock=none,addr=192.168.1.100)