本章主要介紹NFS客戶端的使用
- 創建FNS服務器并通過NFS共享一個目錄
- 在客戶端上訪問NFS共享的目錄
- 自動掛載的配置和使用
1.訪問NFS存儲
????????前面介紹了本地存儲,本章就來介紹如何使用網絡上的存儲設備。NFS即網絡文件系統,所實現的是 Linux 和 Linux 之間的共享。
????????下面的練習我們將會在node01上創建一個文件夾/share,然后通過NFS把它共享,再在node02上把這個共享文件夾掛載到/nfs上,如圖所示。

實戰:
1)首先在node01上啟動nfs-server 服務并設置開啟自動啟動,命令如下。
[root@node01 ~]# systemctl enable nfs-server.service --now
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.
[root@node01 ~]#
2)創建準備共享的目錄/share,命令如下。
[root@node01 ~]# mkdir /share
3)在/etc/exports中把目錄/share共享出去,命令如下。
[root@node01 ~]# vim /etc/exports
[root@node01 ~]# cat /etc/exports
/share 192.168.182.0/24(rw,no_root_squash)
[root@node01 ~]#
- 這里可以用通配符 “*” 表示任何客戶端都可以訪問目錄
- 可以使用網段例如:192.168.182.0/24
- 也可以使用IP地址,例如:192.168.182.210/24
4)讓共享生效,命令如下
[root@node01 ~]# exportfs -arv
exporting 192.168.182.0/24:/share
[root@node01 ~]#
5)在server上配置防火墻放行NFS,命令如下。
[root@node01 ~]# firewall-cmd --add-service=nfs
success
[root@node01 ~]# firewall-cmd --add-service=nfs --permanent
success
[root@node01 ~]# firewall-cmd --add-service=rpc-bind
success
[root@node01 ~]# firewall-cmd --add-service=rpc-bind --permanent
success
[root@node01 ~]# firewall-cmd --add-service=mountd
success
[root@node01 ~]# firewall-cmd --add-service=mountd --permanent
success
[root@node01 ~]#
6)查看防火墻是否成功添加服務
[root@node01 ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: ens160sources: services: cockpit dhcpv6-client mountd nfs rpc-bind sshports: protocols: forward: nomasquerade: noforward-ports: source-ports: icmp-blocks: rich rules:
[root@node01 ~]#
關于防火墻的配置,后續會有專門章節講解。
7)在node02上訪問這個共享文件夾,首先使用show mount命令查看服務器上共享的目錄,命今如下。
[root@node02 ~]# showmount -e 192.168.182.200
Export list for 192.168.182.200:
/share 192.168.182.0/24
[root@node02 ~]#
8)把服務器上共享的目錄掛載到本地/nfs目錄上,命令如下。
[root@node02 ~]# mount 192.168.182.200:/share /nfs/
[root@node02 ~]#
9)查看掛載情況,命令如下。可以看到已經掛載好了
[root@node02 ~]# df -Th | grep nfs
192.168.182.200:/share nfs4 44G 5.4G 39G 13% /nfs
[root@node02 ~]#
10)如果希望開機能夠自動掛載,則寫入/etc/fstab中,命令如下
[root@node02 ~]# vim /etc/fstab //編輯文件
[root@node02 ~]# cat /etc/fstab | grep nfs //查看并過濾內容
192.168.182.200:/share /nfs nfs defaults 0 0
[root@node02 ~]#
2.自動掛載
????????自動掛載的意思是,把一個外部設備/dev/xx和某個目錄/dir/yy關聯起來。平時/dev/xx 是否掛載到了/dir/yy 上不需要考慮,但訪問 /dir/yy時,系統就知道要訪問 /dev/xx中的數據,這個時候系統會自動將/dev/xx掛載到/dir/yy 上。
安裝軟件包的步驟如下。
1)掛載光盤,命令如下
[root@node01 ~]# mount /dev/cdrom /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@node01 ~]#
這里準備發光盤作為本地YUM源
2)編寫repo文件,命令如下
[root@node01 ~]# cat /etc/yum.repos.d/aa.repo
[aa]
name=aa
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0[bb]
name=bb
baseurl=///mnt/BaseOS
enabled=1
gpgcheck=0
[root@node01 ~]#
3)更新yum倉庫
[root@node01 ~]# updatedb
4)開始安裝autofs,命令如下。
[root@node01 ~]# yum -y install autofs
5)啟動autofs并設置開機自動啟動,命令如下。
[root@node01 ~]# systemctl enable autofs.service --now
Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service → /usr/lib/systemd/system/autofs.service.
[root@node01 ~]#
6)下面練習把光盤自動掛載到/zz/dvd 上。先把/zz創建出來,命令如下。
[root@node01 ~]# mkdir /zz
注意:這里不需要創建目錄/zz/dvd,這個目錄會自動創建。
7)在/etc/auto.master.d目錄中創建一個后綴為 autofs的文件,后綴必須是autofs,這里創建的是aa.autofs,命令如下。
[root@node01 ~]# cat /etc/auto.master.d/aa.autofs
/zz /etc/auto.aa
[root@node01 ~]#
8)這里的意思是把哪個外部設備掛載到/zz的哪個子目錄上由/etc/auto.aa決定,內容使用【Tab】鍵進行分隔。下面創建/etc/auto.aa,命令如下。
[root@node01 ~]# df -Th | grep iso //查看文件系統
/dev/sr0 iso9660 11G 11G 0 100% /mnt
[root@node01 ~]#
[root@node01 ~]# vim /etc/auto.aa //編輯文件內容
[root@node01 ~]# cat /etc/auto.aa //添加以下內容
dvd -fstype=iso9660,ro :/dev/cdrom
[root@node01 ~]#
這個文件的格式如下。
子目錄 -fstype= 文件系統,選項1,選項2 :外部設備
????????這里外部設備如果是本地磁盤或光盤,冒號前面保持為空,但是冒號不能省略。如果是其他機器上共享的目錄,則寫遠端的IP。
????????結合/etc/auto.master.d/aa.autofs整體的意思是,當訪問/zz/dvd時,系統會自動把/dev/cdrom掛載到/zz/dvd 上。
9)重啟autofs服務,讓我們剛做的配置生效,命令如下。
[root@node01 ~]# systemctl restart autofs.service
10)確認現在光盤是沒有掛載到/zz/dvd 上的,而且/zz目錄中也沒有dvd目錄,命令如下。
[root@node01 ~]# mount | grep -v auto | grep zz
[root@node01 ~]# ls /zz
[root@node01 ~]#
11)下面訪問/zz/dvd,命令如下。
[root@node01 ~]# ls /zz/dvd
AppStream EULA images RPM-GPG-KEY-redhat-beta
BaseOS extra_files.json isolinux RPM-GPG-KEY-redhat-release
EFI GPL media.repo TRANS.TBL
[root@node01 ~]#
12)因為訪問這個目錄時能觸發自動掛載,系統自動創建/zz/dvd并把 /devcdrom掛載到這個目錄上,再次驗證掛載情況,命令如下。
[root@node01 ~]# mount | grep -v auto | grep zz
/dev/sr0 on /zz/dvd type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048)
可以看到,現在已經掛載上去了。
實戰:下面練習自動掛載NFS共享文件夾,整個實驗思路如下。
????????在node01上創建一個用戶 bob,家目錄指定為/rhome/mary。在node02上也創建一個用戶bob,家目錄也指定為/rhome/mary,但是node02上的 bob并不把這個家目錄創建出來,如圖所示。

????????通過NFS把node01上的/rhome共享出去,在node02上配置 autofs,把192.168.26.11上 的/rhome/mary關聯到node02上的/rhome/mary中。
????????當在node02上使用mary登錄時會自動登錄到/rhome/bob,就會觸發autofs自動把 192.168.26.11:/rhome/bob掛載到node02的/rhome/bob目錄上,這樣node02上的bob也就有了家目錄。
1)在node01上創建/bhome目錄,然后創建用戶 bob,家目錄設置為/rhome/bob,用戶的uid設置為2023,命令如下。
[root@node01 /]# mkdir /bhome
[root@node01 /]# useradd -u 2023 -d /bhome/bob bob
[root@node01 /]# echo 123456 | passwd --stdin bob
更改用戶 bob 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。
[root@node01 /]#
此時在server 上mary用戶就創建好了,且 mary的家目錄也是存在的。
2)在node02上創建/bhome目錄,然后創建用戶bob,家目錄設置為/bhome/bob。因為指定了-M選項,這個目錄并沒有被創建,用戶的uid設置為2023,記住必須和 node01上的bob具有相同的uid,命令如下。
[root@node02 ~]# mkdir /bhome
[root@node02 ~]# useradd -u 2023 -d /bhome/bob -M bob
[root@node02 ~]# echo 123456 | passwd --stdin bob
更改用戶 bob 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。
[root@node02 ~]#
[root@node02 ~]# ls /bhome/
[root@node02 ~]#
3)可以看到,bob的家目錄/bhome/bob并沒有被創建出來。在node02上切換到mary用戶,命令如下。
[root@node02 ~]# su - bob
su: 警告:無法更改到 /bhome/bob 目錄: 沒有那個文件或目錄
-bash-4.2$ exit
登出
[root@node02 ~]#
????????在node02上因為bob沒有家目錄,所以會出現上述警告信息,輸入“exit”退回到root用戶。
3)在node01上通過NFS把/bhome共享出去,編輯/etc/exports內容如下。
[root@node01 /]# cat /etc/exports
/share 192.168.182.0/24(rw,no_root_squash)
/bhome 192,168,182,0/24(rw,no_root_squash)
[root@node01 /]#
4)這樣就把/bhome共享出去了,然后讓此共享生效。
[root@node01 /]# exportfs -arv
exportfs: Invalid IP address 192,168,182,0/24
exportfs: Invalid IP address 192,168,182,0/24
exporting 192.168.182.0/24:/share
[root@node01 /]#
5)切換到node02上開始配置autofs,創建/etc/auto.master.d/bb.autofs,內容如下。
[root@node02 ~]# cat /etc/auto.master.d/bb.autofs
/bhome /etc/auto.bb
[root@node02 ~]#
到底把哪個外部設備掛載到/bhome的哪個子目錄上由/etc/auto.bb決定。
6)下面創建/etc/auto.bb,內容如下。
[root@node02 ~]# cat /etc/auto.bb
bob -fstype=nfs,rw 192.168.182.200:/bhome/bob
[root@node02 ~]#
????????結合/etc/auto.master.d/bb.autofs整體的意思是,當訪問/bhome/bob時,系統會自動把192.168.182.200:/bhome/bob掛載到node02的/bhome/bob目錄上。
7)重啟autofs,命令如下。
[root@node02 ~]# systemctl restart autofs.service
8)確認現在/bhome/bob是沒有掛載任何東西的,命令如下。
[root@node02 ~]# mount | grep -v auto | grep bhome
[root@node02 ~]#
9)下面在node02上切換到bob,記住通過su - mary而不是通過su mary,命令如下。
[root@node02 /]# su - bob
[bob@node02 ~]$ pwd
/bhome/bob
[bob@node02 ~]$
????????我們知道su - bob,用戶切換到bob的同時也會切換到bob的家目錄,這樣會觸發 autofs,再次查看掛載情況,