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
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 mount
và grep 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ú ý:
timeo
vàretrans
chỉ hiệu quả trongsoft nfs
không hiệu quả tronghard 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.