文件掛載(一)- Linux掛載Linux文件夾
一、概述
工作中經常會出現不同服務器、不同操作系統之間文件夾互相掛載的情形,例如文件服務器或數據備份服務器。
掛載一般來說就是以下四種類型:
同類型操作系統
a. linux掛載linux文件夾
b. windows掛載windows文件夾
不同類型操作系統
c. linux掛載windows文件夾
d. windows掛載linux文件夾
linux掛載linux文件夾採用nfs(Network File System),本文將介紹此種類型。
二、搭建
實驗的環境 兩台Linux:CentOS7.3
Server端:192.168.56.77 文件實際存放的服務器
Client端:192.168.56.88 掛載的服務器,即將server端的共享文件夾掛載到client端
兩端都安裝nfs服務
# yum install -y nfs-utils
【Server端】
關閉防火牆以及Selinux
# systemctl stop firewalld
# systemctl disable firewalld
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
創建共享目錄
# mkdir /opt/test
# chmod 777 /opt/test
修改nfs配置
# vi /etc/exports
/opt/test 192.168.56.88(rw,all_squash,anonuid=1001,anongid=1002,async) # anonuid和anongid表示所有在Client端創建的文件,最後的所屬用戶和組為1001、1002,而不是匿名用戶nfsnobody。
啟動nfs服務
# service nfs start
【Client端】
創建掛載目錄,並掛載遠程文件夾
# mkdir /u01
# mount -t nfs 192.168.56.77:/opt/test /u01
查看該目錄的使用情況
# df -h /u01
Filesystem Size Used Avail Use% Mounted on
192.168.56.77:/opt/test 25G 16G 8.1G 66% /u01
創建文件,可以看到文件的所屬用戶和所屬組分別為1001、1002,這個其實就是對應的server端/etc/exports設置
# touch abc
# ll
-rw-r--r--. 1 1001 1002 0 Dec 22 05:41 abc
如果想讓系統自動掛載,可以設置crontab開機掛載,但不建議加到/etc/fstab中,因為如果server端的nfs有問題,client端的服務器重啟將會啟動很長時間。
配置文件/etc/exports注意事項
- 192.168.56.88(rw…)表示只共享給192.168.56.88這個ip,還可以寫成192.168.56.*表示共享給這個網段,寫成*(rw…)表示共享給所有網段。
- 如果配置文件/etc/exports中沒有anonuid和anongid,新建的文件,用戶和組將會變成nfsnobody,具體all_squash這個參數的解釋,請看文章的後面的內容。
三、問題匯總
問題1:server端nfs服務關閉,導致client端無法訪問共享目錄
【Server端】
關閉nfs服務
# service nfs stop
【Client端】
執行ls /卡死,df也卡死,即所有涉及到/u01的操作都會卡死。執行以下命令查看所有nfs掛載
# mount -l |grep nfs
192.168.56.77:/opt/test on /u01 type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.56.88,local_lock=none,addr=192.168.56.77)
同時查看操作系統後台日誌/var/log/message,可以定位到是192.168.56.77這台服務器的nfs出了故障。重新啟動server端的nfs服務,client端等待一段時間就可正常操作了。
Dec 30 05:01:42 localhost kernel: nfs: server 192.168.56.77 not responding, still trying
如果因為nfs服務的問題導致執行命令一直卡死,這不太友好。因為nfs在掛載的時候,默認採用的硬掛載的方式,如果採用軟掛載的方式,執行命令超時前端會有報錯提示,而不是一直堵塞。
測試:
重新啟動server端的nfs服務service nfs start
client重新掛載mount -t nfs -o soft,timeo=10,retry=2 192.168.56.77:/opt/test /u01
關閉Server端的nfs服務service nfs stop
client端執行命令不會一直堵塞,而是會報錯誤。
# df -h
df: 『/u01』: Input/output error
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg-lvroot 25G 1.2G 23G 6% /
devtmpfs 910M 0 910M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 8.4M 912M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
/dev/sda1 988M 110M 812M 12% /boot
tmpfs 184M 0 184M 0% /run/user/0
問題2:權限問題
在配置文件/etc/exports中
all_squash:將遠程訪問的所有普通用戶及所屬組都映射為匿名用戶或用戶組(nfsnobody),除非在配置中有指定uid和gid
no_all_squash:不將遠程訪問的所有普通用戶及所屬組都映射為匿名用戶或用戶組,即使用文件創建者本身的uid和gid號(默認設置)
root_squash:將root用戶及所屬組映射為匿名用戶或用戶組(默認設置)
no_root_squash:不將root用戶及所屬組映射為匿名用戶或用戶組
這裏面不同的參數設置,都會對文件的權限產生影響,你有時會發現即使是root用戶也沒有權限去刪除文件的時候,就可以看看這些參數,是否是將root權限映射成了匿名用戶。基於篇幅,這裡就不做演示了。
[root@localhost /u01]# rm -rf yangdir/yangsub
rm: cannot remove 『yangdir/yangsub』: Permission denied
問題3:nfs端口問題
上面我們搭建nfs的時候,直接關閉了server端的防火牆,但是如果防火牆打開,是否還能正常掛載呢,如果不行,那又需要開通什麼端口呢?
server端打開防火牆
# systemctl start firewalld
client端掛載,命令會一直卡死。
# mount -t nfs 192.168.56.77:/opt/test /u01
server端開通端口2049
開端口命令:firewall-cmd –zone=public –add-port=2049/tcp –permanent
重啟防火牆:systemctl restart firewalld
查看開通端口:firewall-cmd –list-ports
PS:看到有的文章中寫還需要開通111端口,但是實際測試下來,只開通2049端口就可以正常掛載了。
四、總結
- nfs掛載可以採用軟掛載的方式
- nfs文件權限可以通過/etc/exports設置
- nfs端口為2049