Thiết lập máy chủ NFS trên Linux Image Thiết lập máy chủ NFS trên Linux

Bài viết này sẽ giới thiệu với các bạn về cách thiết lập máy chủ NFS trên hệ điều hành Linux. Từ đây giúp chúng ta học Linux một cách dể dàng hơn.

1. Giới thiệu NFS

Mô hình nfs

Network File System(NFS) là một giao thức dùng để chia sẻ dữ liệu giữa client và server hoạt động đa nền tảng và được sử dụng phổ biến để xuất các hệ thống tệp cục bộ qua mạng để khách hàng có thể chia sẻ thư mục và tệp với người khác qua mạng và tương tác với chúng như thể chúng được gắn kết cục bộ.

Ưu điểm:

  • Sử dụng NFS là giải pháp chi phí thấp khi chia sẻ tệp qua mạng.
  • Dễ dàng cài đặt.
  • Cho phép quản lý tập trung, giảm dụng lượng đĩa trên hệ thống người dùng.

Nhược điểm:

  • NFS không an toàn, chỉ nên sử dụng trong mạng phía sau firewall.
  • NFS bị chậm khi lưu lượng mạng lớn.
  • Server và Client tin tưởng nhau hoàn toàn.

Để thực hiện chia sẻ file giữa server và client thành công chúng ta cần phải đảm bảo kết nối giữa server và client.

NFS Server IP address: 10.0.0.1 NFS Client IP address: 10.0.0.2

2. Cài đặt NFS

2.1. Cài đặt NFS Server

Bước 1: Trước tiên, chúng ta bắt đầu bằng cách cài đặt các gói cần thiết trên NFS Server. Gói nfs-utils cung cấp một trình nền cho kernel NFS server và các công cụ liên quan như chương trình showmount.

Chạy lệnh sau để cài đặt gói trên NFS server:

[root@blogd-net-lab01 ~]# dnf install nfs-utils
CentOS-8 - AppStream                                                                           1.9 kB/s | 4.3 kB     00:02
CentOS-8 - AppStream                                                                           216 kB/s | 6.6 MB     00:31
CentOS-8 - Base                                                                                3.7 kB/s | 3.8 kB     00:01
CentOS-8 - Base                                                                                312 kB/s | 5.0 MB     00:16
CentOS-8 - Extras                                                                              1.3 kB/s | 1.5 kB     00:01
CentOS-8 - Extras                                                                              3.1 kB/s | 4.4 kB     00:01
Dependencies resolved.
===============================================================================================================================
 Package                             Architecture             Version                           Repository                Size
===============================================================================================================================
Installing:
 nfs-utils                           x86_64                   1:2.3.3-26.el8                    BaseOS                   472 k
Installing dependencies:
 gssproxy                            x86_64                   0.8.0-14.el8                      BaseOS                   118 k
 keyutils                            x86_64                   1.5.10-6.el8                      BaseOS                    63 k
 libverto-libevent                   x86_64                   0.3.0-5.el8                       BaseOS                    16 k
 rpcbind                             x86_64                   1.2.5-4.el8                       BaseOS                    70 k
...

Sau khi cài đặt thành công chúng ta cần khởi động nfs-server bằng lệnh sau:

[root@blogd-net-lab01 ~]# systemctl start nfs-server.service

Thực thi lệnh sau để nfs-server khởi động cùng lúc với hệ thống:

[root@blogd-net-lab01 ~]# systemctl enable nfs-server.service
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.

Kiểm tra trạng thái của nfs-server bằng lệnh sau:

[root@blogd-net-lab01 ~]# systemctl status nfs-server.service
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
   Active: active (exited) since Thu 2020-04-02 19:49:58 +07; 1min 20s ago
 Main PID: 26006 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 11183)
   Memory: 0B
   CGroup: /system.slice/nfs-server.service

Apr 02 19:49:57 blogd-net-lab01 systemd[1]: Starting NFS server and services...
Apr 02 19:49:58 blogd-net-lab01 systemd[1]: Started NFS server and services.

Lưu ý: Các dịch vụ các dịch vụ liên quan đến nfs-server hoặc mount các chia sẻ NFS như nfsd, nfs-idmapd, rpcbind, rpc.mountd, lockd, rpc.statd, rpc.rquotad, and rpc.idmapd sẽ được tự động bắt đầu.

Các file cấu hình của NFS server là:

  • /etc/nfs.conf: File cấu hình chính cho trình nền và công cụ NFS.
  • /etc/nfsmount.conf: File cấu hình NFS mount.
  • /etc/exports: File config chính của NFS, chứa thông tin danh sách các file và thư mục chia sẻ trên NFS Server.
  • /etc/fstab: Để tự động mount một thư mục NFS trên hệ thống.
  • /etc/sysconfig/nfs: File config của NFS để quản lý port đang lắng nghe của rpc và các service.

Bước 2: Tiếp theo, chúng ta sẽ tạo các file để chia sẻ trên NFS server. Chúng ta sẽ tạo 1 file /mnt/blogd-net-test-nfs-server và một file dùng để backup dành cho người dùng root:

[root@blogd-net-lab01 ~]# mkdir -p /mnt/blogd-net-test-nfs-server
[root@blogd-net-lab01 ~]# ls -l /mnt/
total 0
drwxr-xr-x. 2 root root 6 Apr  3 21:44 blogd-net-test-nfs-server

Bước 3: Sau đó, cấu hình NFS server /etc/export để xác định các máy client nào có thể truy cập được file được chia sẽ trên NFS server bằng trình soạn thảo vi.

Cú pháp như sau:

/mnt/blogd-net-test-nfs-server  10.0.0.0/8(rw,sync)

Trong đó:

  • /mnt/blogd-net-test-nfs-server: Là thư mục chia sẽ dữ liệu.
  • 10.0.0.0/8: Dãy địa chỉ có thể truy cập.
  • (rw,sync): Quyền truy cập.

Các quyền trong NFS:

  • ro: Read only.
  • rw: Read – write.
  • noaccess: Denied access.
  • root_squash: Ngăn remote root users.
  • no_root_squash: Cho phép remote root users.

Để xuất hệ thống file trên, chúng ta chạy lệnh exportfs cùng với tùy chọn -a nghĩa là export hoặc unexport tất cả các thư mục, tùy chọn -r là reexport tất cả các thư mục, đồng bộ hóa /var/lib/nfs/etab với /etc/export và các file trong /etc/export.d, và -v cho phép đầu ra hiển thị đầy đủ.

[root@blogd-net-lab01 ~]# exportfs -arv
exporting 10.0.0.0/8:/mnt/blogd-net-test-nfs-server

Để hiển thị danh sách export hiện tại chạy lệnh sau:

[root@blogd-net-lab01 ~]# exportfs -s
/mnt/blogd-net-test-nfs-server  10.0.0.2/8(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

Bước 4: Tiếp theo nếu hệ thống chúng ta có sử dụng firewall chúng ta cần phải cho phép các dịch vụ cần thiết thông qua firewall như mountd, nfs, rpc-bind:

[root@blogd-net-lab01 ~]# firewall-cmd --permanent --add-service=nfs
success
[root@blogd-net-lab01 ~]# firewall-cmd --permanent --add-service=rpc-bind
success
[root@blogd-net-lab01 ~]# firewall-cmd --permanent --add-service=mountd
success

Thực hiện reload lại firewall sau khi đã cho các dịch vụ bên trên thông qua firewall:

[root@blogd-net-lab01 ~]# firewall-cmd --reload
success

2.1. Cài đặt NFS Client

Bước 1: Để có thể sử dụng NFS trên Client chúng ta cần cài đặt cái gói cần thiết bằng cách thực thi lệnh sau:

[root@blogd-net-lab01 ~]# dnf install nfs-utils nfs4-acl-tools
CentOS-8 - AppStream                                                                           4.6 kB/s | 4.3 kB     00:00
CentOS-8 - Base                                                                                3.9 kB/s | 3.8 kB     00:00
CentOS-8 - Extras                                                                              1.5 kB/s | 1.5 kB     00:00
Dependencies resolved.
===============================================================================================================================
 Package                             Architecture             Version                           Repository                Size
===============================================================================================================================
Installing:
 nfs-utils                           x86_64                   1:2.3.3-26.el8                    BaseOS                   472 k
 nfs4-acl-tools                      x86_64                   0.3.5-3.el8                       BaseOS                    55 k
Installing dependencies:
 gssproxy                            x86_64                   0.8.0-14.el8                      BaseOS                   118 k
 keyutils                            x86_64                   1.5.10-6.el8                      BaseOS                    63 k
 libverto-libevent                   x86_64                   0.3.0-5.el8                       BaseOS                    16 k
 rpcbind                             x86_64                   1.2.5-4.el8                       BaseOS                    70 k
...

Để kiểm tra mount point trên NFS Server từ client

[root@blogd-net-lab01 ~]# showmount -e 10.0.0.1
Export list for 10.0.0.1:
/mnt/blogd-net-test-nfs-server 10.0.0.2/8

Tiếp theo, chúng ta tạo một thư mục cục bộ /mnt/blogd-net-test-nfs-client để mount tới NFS Server:

[root@blogd-net-lab01 ~]# mkdir -p /mnt/blogd-net-test-nfs-client
[root@blogd-net-lab01 ~]# ls -l /mnt/
total 0
drwxr-xr-x. 2 root root 6 Apr  4 20:36 blogd-net-test-nfs-client

Mount NFS file thực thi lệnh bên dưới:

[root@blogd-net-lab01 ~]# mount -t nfs 10.0.0.1:/mnt/blogd-net-test-nfs-server /mnt/blogd-net-test-nfs-client/

Trong đó:

  • 10.0.0.1: Địa chỉ của NFS server.
  • /mnt/blogd-net-test-nfs-server: Thư mục chia sẻ trên NFS server.
  • /mnt/blogd-net-test-nfs-client/: Mount point trên NFS client.

Sau đó để xác nhận file từ NFS server đã được gắn kết bằng cách chạy lệnh mountgrep nfs.

[root@blogd-net-lab01 ~]# mount | grep nfs
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
10.0.0.1:/mnt/blogd-net-test-nfs-server on /mnt/blogd-net-test-nfs-client type nfs4 (rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.0.2,local_lock=none,addr=10.0.0.1)

Để có thể tự động mount tới NFS Server khi máy chủ khởi động thì chúng ta cần sửa file /etc/fstab, thêm dòng sau vào cuối file:

[root@blogd-net-lab01 ~]# echo "10.0.0.1:/mnt/blogd-net-test-nfs-server     /mnt/blogd-net-test-nfs-client/  nfs     defaults 0 0">>/etc/fstab

Kiểm tra file /etc/fstab sau khi chúng ta thực thi lệnh trên:

[root@blogd-net-lab01 ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Mar 24 10:03:34 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=57fd4b4f-b10a-47e8-a9aa-2e377e38f71b /boot                   ext4    defaults        1 2
/dev/mapper/cl-swap     swap                    swap    defaults        0 0
10.0.0.1:/mnt/blogd-net-test-nfs-server     /mnt/blogd-net-test-nfs-client/  nfs     defaults 0 0

Khi chúng ta muốn cấu hình timeout cho mountpoint NFS ở /etc/fstab thì cú pháp như sau

<remote-host-ip>:/Thư mục chia sẽ trên NFS server  /Mount point trên NFS client   nfs  soft,timeo=30  0  0

Trong đó:

  • timeo: Là giá trị thời gian chờ.
  • 30: Là thời gian chúng cần cấu hình dùng đơn vị deciseconds (1 deciseconds bằng 1/10 second).
  • retrans: Là phương tiện sẽ thử lại bao nhiêu trong trường hợp có lỗi.

Chú ý: timeoretrans chỉ hiệu quả trong soft nfs không hiệu quả trong hard nfs.

2.3. Kiểm tra NFS hoạt động

Sau khi thực hiện cài đặt NFS server và NFS client thành công chúng ta sẽ kiểm tra xem thiết lập NFS có hoạt động tốt không bằng cách tạo file trên server và kiểm tra xem file có thể được nhìn thấy trong client không.

Trên server chúng ta chạy lệnh bên dưới:

[root@blogd-net-lab01 ~]# touch /mnt/blogd-net-test-nfs-server/test-nfs-server.txt
[root@blogd-net-lab01 ~]# echo "TEST NFS SERVER" > /mnt/blogd-net-test-nfs-server/test-nfs-server.txt

Sau đó chúng ta sẽ qua client kiểm tra xem có thấy file mới tạo bên NFS server không:

[root@blogd-net-lab01 ~]# ls -l /mnt/blogd-net-test-nfs-client/
total 4
-rw-r--r--. 1 root root 16 Apr  4 22:35 test-nfs-server.txt

Sau đó chúng ta sẽ thực hiện ngược lại:

Trên client thực thi lệnh sau:

[root@blogd-net-lab01 ~]# touch /mnt/blogd-net-test-nfs-client/test-nfs-client.txt
[root@blogd-net-lab01 ~]# echo "TEST NFS SERVER" > /mnt/blogd-net-test-nfs-client/test-nfs-client.txt

Qua server thực hiện kiểm tra:

[root@blogd-net-lab01 ~]# ls -l /mnt/blogd-net-test-nfs-server/
total 8
-rw-r--r--. 1 nobody nobody 16 Apr  4 22:42 test-nfs-client.txt
-rw-r--r--. 1 root   root   16 Apr  4 22:35 test-nfs-server.txt

Lưu ý: Chúng ta không thể ngắt kết nối hệ thống file từ xa nếu chúng ta đang hoạt động trong hệ thống.

[root@blogd-net-lab01 ~]# cd /mnt/blogd-net-test-nfs-client/
[root@blogd-net-lab01 blogd-net-test-nfs-client]# umount /mnt/blogd-net-test-nfs-client
umount.nfs4: /mnt/blogd-net-test-nfs-client: device is busy
[root@blogd-net-lab01 blogd-net-test-nfs-client]# cd
[root@blogd-net-lab01 ~]# umount /mnt/blogd-net-test-nfs-client

3. Lời kết

Qua bài trên, giúp cho chúng ta cấu hình máy chủ NFS trên CentOS 8 của hệ điều hành Linux. Từ đây giúp chúng ta có thể chia sẻ file giữa máy chủ và máy khách của chúng ta. Dể có thể dể dàng cung cấp file cho các Client trong mạng của chúng ta và ngược lại.