NFS服務
NFS:
Network File System 網絡文件系統,基於內核的文件系統。
Sun公司開發,經過使用NFS,用戶和程序能夠像訪問本地文件一
樣訪問遠端系統上的文件,基於RPC(Remote Procedure Call
Protocol遠程過程調用)實現
RPC:
採用C/S模式。客戶機請求程序調用進程發送一個有進程參數
的調用信息到服務進程,而後等待應答信息。在服務器端,進程保
持睡眠狀態直到調用信息到達爲止。當一個調用信息到達,服務器
得到進程參數,計算結果,發送答覆信息,而後等待下一個調用信
息,最後,客戶端調用進程接收答覆信息,得到進程結果,而後調
用執行繼續進行
NFS優點:
節省本地存儲空間,將經常使用的數據,如home目錄,存放在
NFS服務器上且能夠經過網絡訪問,本地終端將可減小自身存儲空
間的使用
NFS文件系統
NFS各個版本的對比
NFS服務介紹
• 軟件包:nfs-utils
• Kernel支持:nfs.ko
• 端口:2049(nfsd), 其它端口由portmap(111)分配
• 配置文件:/etc/exports,/etc/exports.d/*.exports
• CentOS7不支持同一目錄同時用nfs和samba共享,由於使用鎖機制不一樣
• 相關軟件包:rpcbind(必須),tcp_wrappers
• CentOS6開始portmap進程由rpcbind代替
• NFS服務主要進程:
rpc.nfsd 最主要的NFS進程,管理客戶端是否可登陸
rpc.mountd 掛載和卸載NFS文件系統,包括權限管理
rpc.lockd 非必要,管理文件鎖,避免同時寫出錯
rpc.statd 非必要,檢查文件一致性,可修復文件
• 日誌:/var/lib/nfs/
配置防火牆
•配置防火牆,開放NFS服務(centos 6上須要操做,centos7不須要)
•配置NFS使用固定端口
•vim /etc/sysconfig/nfs
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
STATD_OUTGOING_PORT=2020
•防火牆除開放上述端口,還需開放TCP和UDP的111和2049共4個端口
NFS配置文件
一、導出的文件系統的格式:
/dir 主機1(opt1,opt2) 主機2(opt1,opt2)...
二、#開始爲註釋
三、主機格式:
單個主機:ipv4,ipv6,FQDN
IP networks:兩種掩碼格式均支持
172.18.0.0/255.255.0.0
172.18.0.0/16
wildcards:主機名通配,例如*.magedu.com,IP不能夠
netgroups:NIS域的主機組,@group_name
anonymous:表示使用*通配全部客戶端
四、每一個條目指定目錄導出到的哪些主機,及相關的權限和選項
默認選項:(ro,sync,root_squash,no_all_squash)
ro,rw 只讀和讀寫
async 異步,數據變化後不當即寫磁盤,性能高
sync(1.0.0後爲默認)同步,數據在請求時當即寫入共享
no_all_squash (默認)保留共享文件的UID和GID
all_squash 全部遠程用戶(包括root)都變成nfsnobody
root_squash (默認)遠程root映射爲nfsnobody,UID爲65534,早期版本是
4294967294 (nfsnobody)
no_root_squash 遠程root映射成root用戶
anonuid和anongid 指明匿名用戶映射爲特定用戶UID和組GID,而非
nfsnobody,可配合all_squash使用
NFS工具
rpcinfo
rpcinfo -p hostname
rpcinfo –s hostname 查看RPC註冊程序
exportfs
–v 查看本機全部NFS共享
–r 重讀配置文件,並共享目錄
–a 輸出本機全部共享
–au 中止本機全部共享
showmount -e hostname
mount.nfs 掛載工具
NFSv4支持經過掛載NFS服務器的共享「根」,從而瀏覽NFS服務器上的共享目錄列表
mount nfsserver:/ /mnt/nfs
客戶端NFS掛載
基於安全考慮,建議使用nosuid,nodev,noexec掛載選項
NFS相關的掛載選項:
fg(默認)前臺掛載,bg後臺掛載
hard(默認)持續請求,soft 非持續請求
intr 和hard配合,請求可中斷
rsize和wsize 一次讀和寫數據最大字節數,rsize=32768
_netdev 無網絡不掛載
示例:
mount -o rw,nosuid,fg,hard,intr 192.168.137.56:/testdir /mnt/nfs/
開機掛載:
/etc/fstab
192.168.137.56:/public /mnt/nfs nfs defaults 0 0
nfs簡單示例
安裝nfs服務
[root@node6 ~]#yum -y install nfs-utils
建立共享目錄
[root@node6 ~]#mkdir /data/volume{1..6}
建立共享的配置文件
[root@node6 ~]#vim /etc/exports.d/volume1.exports
/data/volume1 192.168.137.0/24 (ro)
啓動服務
[root@node6 ~]#systemctl start nfs
客戶端測試,不過客戶端也須要安裝相對應的工具
[root@node7 ~]#yum -y install nfs-utils
在客戶端上查看服務器端有哪些掛載
[root@node7 ~]#showmount -e 192.168.137.56
Export list for 192.168.137.56:
/data/volume1 (everyone)
把服務器共享的目錄掛載到本地
[root@node7 ~]#mount -t nfs 192.168.137.56:/data/volume1 /mnt
在服務器上增長/data/volume1的acl權限給ilinux,而後切換到ilinux,在/data/volume1上建立測試文件
[root@node6 ~]#setfacl -m u:ilinux:rwx /data/volume1
[root@node6 ~]#su - ilinux
[ilinux@node6 ~]$cd /data/volume1/
[ilinux@node6 /data/volume1]$ls
[ilinux@node6 /data/volume1]$touch a.txt
[ilinux@node6 /data/volume1]$ll
total 0
-rw-rw-r-- 1 ilinux ilinux 0 Oct 23 13:47 a.txt
客戶端上查看剛在服務器上建立的文件、並測試是否有寫權限
[root@node7 /mnt]#ll
total 0
-rw-rw-r-- 1 1001 1001 0 Oct 23 13:47 a.txt
[root@node7 /mnt]#touch 1
touch: cannot touch ‘1’: Read-only file system
修改服務器共享目錄的權限,並更新
[root@node6 ~]#vim /etc/exports.d/volume1.exports
/data/volume1 192.168.137.0/24(rw)
# exportfs -rav至關於systemctl reload nfs
[root@node6 ~exportfs -ravs
exporting 192.168.137.0/24:/data/volume1
客戶端測試寫權限,建立一個同服務器上的用戶ID同樣的本地用戶
[root@node7 /mnt]#useradd -u 1001 user1
[root@node7 /mnt]#id user1
uid=1001(user1) gid=1001(user1) groups=1001(user1)
[root@node7 /mnt]#su - user1
[user1@node7 ~]$cd /mnt/
[user1@node7 /mnt]$ls
a.txt
[user1@node7 /mnt]$echo "first line" > a.txt
#在本地看所屬主和屬組是user1其實正真的user是服務器端的ilinux用戶只不過他倆的ID號同樣而已
到了v4版以後能識別字符串同名,不過依然解決不了ID號同樣
[user1@node7 /mnt]$ll
total 4
-rw-rw-r-- 1 user1 user1 0 Oct 23 14:19 2
-rw-rw-r-- 1 user1 user1 11 Oct 23 14:21 a.txt
容許客戶端root用戶來操做全部權限
[root@node6 ~]#vim /etc/exports.d/volume1.exports
/data/volume1 192.168.137.0/24(rw,no_root_squash)
從新加載配置
[root@node6 ~]#exportfs -ravs
在客戶端測試
[root@node7 /mnt]#touch 1
[root@node7 /mnt]#rm -rf 1
[root@node7 /mnt]#touch a.root
[root@node7 /mnt]#
在客戶端上使用服務器上共享目錄充當數據庫的數據存儲路徑
[root@node7 /mnt]#yum -y install mariadb-server
修改數據庫的配置文件把數據存放路徑改了
[root@node7 /mnt]#vim /etc/my.cnf
[mysqld]
datadir=/mnt/mysql
socket=/tmp/mysql.sock
skip_name_resolve=on
而後建立目錄,並把屬主和屬組改爲mysql
[root@node7 /mnt]#mkdir /mnt/mysql
[root@node7 /mnt]#chown mysql.mysql /mnt/mysql/
而後啓動數據庫服務,查看mnt/mysql目錄
[root@node7 /mnt]#systemctl start mariadb
[root@node7 /mnt]#ls mysql/
aria_log.00000001 ibdata1 ib_logfile1 performance_schema
aria_log_control ib_logfile0 mysql test
把匿名用戶映射成指定用戶示例:
[root@node6 /data/volume1]#vim /etc/exports.d/volume1.exports
/data/volume1 192.168.137.0/24(rw,all_squash,anonuid=1001,anongid=1001)
從新導出配置文件
[root@node6 /data/volume1]#exportfs -ra
客戶端新建用戶,而後用新建的用戶來建立文件驗證服務器上設置的權限
[root@node7 /mnt]#useradd user2
[root@node7 /mnt]#su - user2
[user2@node7 ~]$cd /mnt/
[user2@node7 /mnt]$touch user2.txt
[user2@node7 /mnt]$
[user2@node7 /mnt]$ll
total 4
-rw-rw-r-- 1 user1 user1 0 Oct 23 14:19 2
-rw-r--r-- 1 root root 0 Oct 23 14:42 a.root
-rw-rw-r-- 1 user1 user1 11 Oct 23 14:21 a.txt
drwxr-xr-x 5 mysql mysql 159 Oct 23 14:46 mysql
-rw-r--r-- 1 user1 user1 0 Oct 23 14:53 root.b
-rw-rw-r-- 1 user1 user1 0 Oct 23 14:55 user2.txt