本章主要介紹NFS客戶端的使用
- 創建NFS服務器并通過NFS共享一個目錄
- 在客戶端上訪問NFS共享的目錄
- 自動掛載的配置和使用
1.1 訪問NFS存儲
前面那篇介紹了本地存儲,本章就來介紹如何使用網絡上上的存儲設備。NFS即網絡文件系統,所實現的是Linux和Linux之間的共享
下面的練習我們將會在redhat8上創建一個文件夾/share,然后通過NFS把它共享,再在node1上把這個共享文件夾掛載到/nfs上
首先在redhat8上啟動nfs-server服務并設置開啟自動啟動
[root@redhat8 ~]# 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@redhat8 ~]#
創建準備共享的目錄/share
[root@redhat8 ~]# mkdir /share
[root@redhat8 ~]#
在/etc/exporets中把目錄/share共享出去
[root@redhat8 ~]# cat /etc/exports
/share *(rw,no_root_squash)
[root@redhat8 ~]#
這里*的意思是表示任何客戶端都可以訪問/share目錄
讓共享生效
[root@redhat8 ~]# exportfs -arv
exporting *:/share
[root@redhat8 ~]#
在redhat8上配置防火墻放行NFS
[root@redhat8 ~]# firewall-cmd --add-service=nfs
success
[root@redhat8 ~]# firewall-cmd --add-service=nfs --permanent
success
[root@redhat8 ~]# firewall-cmd --add-service=rpc-bind
success
[root@redhat8 ~]# firewall-cmd --add-service=rpc-bind --permanent
success
[root@redhat8 ~]# firewall-cmd --add-service=mountd
success
[root@redhat8 ~]# firewall-cmd --add-service=mountd --permanent
success
[root@redhat8 ~]#
在node1上訪問這個共享文件夾,首先使用showmount命令查看服務器上共享的目錄
[root@node1 ~]# showmount -e 192.168.161.16
Export list for 192.168.161.16:
/share *
[root@node1 ~]#
把服務器上共享的目錄掛載到本地/nfs目錄上
[root@node1 ~]# mkdir /nfs
[root@node1 ~]# mount 192.168.161.16:/share /nfs/
[root@node1 ~]#
查看掛載情況
[root@node1 ~]# df -Th | grep nfs
192.168.161.16:/share nfs4 38G 5.4G 33G 14% /nfs
[root@node1 ~]#
可以看到,已經掛載好了
如果希望開機能夠自動掛載,則寫入/etc/fstab中
[root@node1 ~]# tail -1 /etc/fstab
192.168.161.16:/share /nfs nfs defaults 0 0
[root@node1 ~]#
1.2 自動掛載
自動掛載的意思是,把一個外部設備/dev/xx和某個目錄/dir/yy關聯起來。平時/dev/xx 是否掛載到了/dir/yy 上不需要考慮,但訪問 /dir/yy時,系統就知道要訪問 /dev/xx中的數 據,這個時候系統會自動將/dev/xx掛載到/dir/yy 上
安裝軟件包的步驟如下
(1)掛載光盤
[root@redhat8 ~]# mount /dev/cdrom /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@redhat8 ~]#
這里準備把光盤作為yum源
(2)編寫repo文件
[root@redhat8 ~]# cat /etc/yum.repos.d/aa.repo
[aa]
name=aa
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0[bb]
name=bb
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=0
[root@redhat8 ~]#
開始安裝autofs
[root@redhat8 ~]# yum -y install autofs
啟動autofs并設置開機自動啟動
[root@redhat8 ~]# systemctl enable autofs.service --now
Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service → /usr/lib/systemd/system/autofs.service.
[root@redhat8 ~]#
下面練習把光盤自動掛載到/zz/dvd 上。先把/zz創建出來
[root@redhat8 ~]# mkdir /zz
[root@redhat8 ~]#
記住,這里不需要創建目錄/zz/dvd,這個目錄會自動創建
在/etc/auto.master.d目錄中創建一個后綴為 autofs的文件,后綴必須是autofs,這里 創建的是aa.autofs
[root@redhat8 ~]# cat /etc/auto.master.d/aa.autofs
/zz /etc/auto.aa
[root@redhat8 ~]#
這里的意思是把哪個外部設備掛載到/zz的哪個子目錄上由/etc/auto.aa決定,內容使用 【Tab】鍵進行分隔。下面創建/etc/auto.aa
[root@redhat8 ~]# cat /etc/auto.aa
dvd -fstype=iso9660,ro :/dev/cdrom
[root@redhat8 ~]#
這個文件的格式如下
子目錄 ‐fstype= 文件系統,選項1,選項2 :外部設備
這里外部設備如果是本地磁盤或光盤,冒號前面保持為空,但是冒號不能省略。如果是其 他機器上共享的目錄,則寫遠端的IP
結合/etc/auto.master.d/aa.autofs整體的意思是,當訪問/zz/dvd時,系統會自動 把/dev/cdrom掛載到/zz/dvd 上
?重啟autofs服務,讓我們剛做的配置生效
[root@redhat8 ~]# systemctl restart autofs.service
[root@redhat8 ~]#
確認現在光盤是沒有掛載到/zz/dvd 上的,而且/zz目錄中也沒有dvd目錄
[root@redhat8 ~]# mount | grep -v auto | grep zz
[root@redhat8 ~]# ls /zz
[root@redhat8 ~]#
下面訪問/zz/dvd
[root@redhat8 ~]# 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@redhat8 ~]#
因為訪問這個目錄時能觸發自動掛載,系統自動創建/zz/dvd并把 /devcdrom掛載到這 個目錄上,再次驗證掛載情況
[root@redhat8 ~]# mount | grep -v auto | grep zz
/dev/sr0 on /zz/dvd type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048)
[root@redhat8 ~]#
練習:下面練習自動掛載NFS共享文件夾,整個實驗思路如下
在redhat上創建一個用戶 mary,家目錄指定為/rhome/mary。在node1上也創建一個 用戶mary,家目錄也指定為/rhome/mary,但是node1上的 mary并不把這個家目錄創建出來,如圖
通過NFS把redhat8上的/rhome共享出去,在node1上配置 autofs,把redhat8上 的/rhome/mary關聯到node1上的/rhome/mary中
當在node1上使用mary登錄時會自動登錄到/rhome/mary,就會觸發autofs自動把redhat:/rhome/mary掛載到node1的/rhome/mary目錄上,這樣node1上的 mary也就有了家目錄
在redhat8上創建/rhome目錄,然后創建用戶 mary,家目錄設置為/rhome/mary,用戶 的uid設置為3001
[root@redhat8 ~]# mkdir /rhome
[root@redhat8 ~]# useradd -u 3001 -d /rhome/mary mary
[root@redhat8 ~]# passwd mary
更改用戶 mary 的密碼 。
新的 密碼:
無效的密碼: 密碼少于 8 個字符
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
[root@redhat8 ~]# ls /rhome/
mary
[root@redhat8 ~]#
此時在redhat8上mary用戶就創建好了,而且mary的家目錄也是存在的
在node1上創建/rhome目錄,然后創建用戶mary,家目錄設置為/rhome/mary。因為 指定了-M選項,這個目錄并沒有被創建,用戶的uid設置為3001,記住必須和 redhat8上的 mary具有相同的uid
[root@node1 ~]# mkdir /rhome
[root@node1 ~]# useradd -u 3001 -d /rhome/mary -M mary
[root@node1 ~]# passwd mary
更改用戶 mary 的密碼 。
新的 密碼:
無效的密碼: 密碼未通過字典檢查 - 它沒有包含足夠的不同字符
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
[root@node1 ~]# ls /rhome/
[root@node1 ~]#
可以看到,mary的家目錄/rhome/mary并沒有被創建出來。在node1上切換到mary用戶
[root@node1 ~]# su - mary
su: 警告:無法更改到 /rhome/mary 目錄: 沒有那個文件或目錄
-bash-4.2$ exit
登出
[root@node1 ~]#
在node1上因為mary沒有家目錄,所以會出現上述警告信息,輸入“exit”退回到root 用戶
在redhat8上通過NFS把/rhome共享出去,編輯/etc/exports內容如下
[root@redhat8 ~]# cat /etc/exports
/share *(rw,no_root_squash)
/rhome *(rw,no_root_squash)
[root@redhat8 ~]#
這樣就把/rhome共享出去了,然后讓此共享生效
[root@redhat8 ~]# exportfs -arv
exporting *:/rhome
exporting *:/share
[root@redhat8 ~]#
切換到node1上開始配置autofs,創建/etc/auto.master.d/bb.autofs
[root@node1 ~]# cat /etc/auto.master.d/bb.autofs
/rhome /etc/auto.bb
[root@node1 ~]#
到底把哪個外部設備掛載到/rhome的哪個子目錄上由/etc/auto.bb決定
下面創建/etc/auto.bb
[root@node1 ~]# cat /etc/auto.bb
mary -fstype=nfs,rw 192.168.161.16://rhome/mary
[root@node1 ~]#
結合/etc/auto.master.d/bb.autofs整體的意思是,當訪問/rhome/mary時,系統會自 動把redhat8:/rhome/mary掛載到node1的/rhome/mary目錄上
[root@node1 ~]# systemctl restart autofs.service
[root@node1 ~]#
確認現在/rhome/mary是沒有掛載任何東西的
[root@node1 ~]# mount | grep -v auto | grep rhome
[root@node1 ~]#
下面在node1上切換到mary,記住通過su - mary而不是通過su mary
[root@node1 ~]# su - mary
上一次登錄:三 12月 6 12:05:40 CST 2023pts/0 上
[mary@node1 ~]$ pwd
/rhome/mary
[mary@node1 ~]$ exit
登出
[root@node1 ~]#
我們知道su - mary,用戶切換到mary的同時也會切換到mary的家目錄,這樣會觸發 autofs,再次查看掛載情況
[root@node1 ~]# mount | grep -v auto | grep rhome
192.168.161.16:/rhome/mary on /rhome/mary type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.161.12,local_lock=none,addr=192.168.161.16)
[root@node1 ~]#
可以看到,已經成功掛載了