NFS網絡文件系統
阿新 • • 發佈:2018-03-07
Centos 7 NFS網絡文件系統 NFS偽根實現 Linux實現用戶家目錄漫遊
實驗環境:VMware Workstation Pro 14(試用版)
系統平臺:
CentOS Linux release 7.4.1708 (Core) 內核 3.10.0-693.el7.x86_64
NFS配置介紹
軟件包
nfs-utils
端口
2049(nfsd), 其它端口由rpcbind(111)分配
工作過程
NFS啟動時,會將所使用的端口向rpcbind註冊,當有客戶端訪問的時候,客戶端首先通訊的是rpcbind(111),進而rpcbind會告知NFS所使用的端口,客戶端就可以通過端口訪問NFS服務了。
配置文件:
/etc/exports /etc/exports.d/*.exports
依賴包
rpcbind(必須)
tcp_wrappers
日誌
/var/lib/nfs/
NFS服務主要進程
rpc.nfsd 最主要的NFS進程,管理客戶端是否可登錄
rpc.mountd 掛載和卸載NFS文件系統,包括權限管理
rpc.lockd 非必要,管理文件鎖,避免同時寫出錯
rpc.statd 非必要,檢查文件一致性,可修復文件
CentOS 7不支持同一目錄同時用nfs和samba共享,因為使用鎖機制不同
啟動NFS
# systemctl start nfs # systemctl start nfs-server 在Centos 6上,rpcbind必須先啟動,否則NFS無法啟動 在Centos 7上,NFS服務啟動時,會把依賴的服務rpcbind一並啟動 rpcbind.service可以被rpcbind.socket 激活,rpcbind.socket獨立工作 報以下錯誤的時候 clnt_create: RPC: Program not registered > 重啟NFS服務重新註冊到rpcbind clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused) > rpcbind服務未啟動,重啟rpcbing和nfs服務,註意順序
查看NFS開啟的端口
# rpcinfo -p
如果需要在外部使用NFS服務,需要調整防火墻策略
必須先把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
語法格式
目錄路徑 允許訪問的IP地址或FQDN列表(選項1,選項2) /app/nfs * > * 代表所有 /app/nfs 192.168.5.10(ro) 192.168.5.13(rw) > 列表以空格分隔 /app/nfs 192.168.5.0/24(rw) /app/nfs *.magedu.com 默認選項:(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使用
生效與查看共享資源
# exportfs -r
exportfs: No options for /app/nfs *: suggest *(sync) to avoid warning
# exportfs -v
/app/nfs <world>(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
通過遠程主機查看
# showmount -e 192.168.5.108
Export list for 192.168.5.108:
/app/nfs *
遠程主機掛載NFS共享
Linux主機
# mount -t nfs 192.168.5.108:/app/nfs /tmp/nfs
# mount 192.168.5.108:/app/nfs /tmp/nfs
#df
Filesystem 1K-blocks Used Available Use% Mounted on
192.168.5.108:/app/nfs 8913920 1422112 7491808 16% /tmp/nfs
# mount
192.168.5.108:/app/nfs on /tmp/nfs type nfs (rw,vers=4,addr=192.168.5.108,clientaddr=192.168.5.107)
指定NFS版本號掛載
# mount -o vers=3 192.168.5.108:/app/nfs /tmp/nfs
192.168.5.108:/app/nfs on /tmp/nfs type nfs (rw,vers=3,addr=192.168.5.108)
永久掛載
# vim /etc/fstab
192.168.5.108:/app/nfs /tmp/nfs nfs vers=3 0 0
192.168.5.108:/app/nfs /tmp/nfs nfs defaults 0 0
Wdindows下掛載
c:\>mount 192.168.5.108:/app/nfs Z:
Z: 現已成功連接到 192.168.5.108:/app/nfs
命令已成功完成。
NFS權限情況
1.NFS共享受文件系統權限影響
2.受下以選項影響
root_squash (默認)遠程root映射為nfsnobody,UID為65534,早期版本是4294967294 (nfsnobody)
no_root_squash 遠程root映射成root用戶
anonuid和anongid
NFS工具
rpcinfo
rpcinfo -p hostname
rpcinfo –s hostname 查看RPC註冊程序
exportfs
–v 查看本機所有NFS共享
–r 重讀配置文件,並共享目錄
–a 輸出本機所有共享
–au 停止本機所有共享
showmount -e hostname
mount.nfs 掛載工具
NFS相關的掛載選項
fg (默認)前臺掛載,bg後臺掛載
hard(默認)持續請求,soft 非持續請求
intr 和hard配合,請求可中斷
rsize和wsize 一次讀和寫數據最大字節數,rsize=32768
_netdev 無網絡不掛載
示例:
mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/
實現NFS的偽根
/app *(fsid=0,rw,crossmnt) > 指明NFS根的路徑,(fsid=0,crossmn)這2個選項需要添加
/app/nfs *(rw)
/app/home/hunk *(rw)
重新加載配置
#exportfs -r
查看
#exportfs -v
/app <world>(rw,sync,wdelay,hide,crossmnt,no_subtree_check,fsid=0,sec=sys,secure,root_squash,no_all_squash)
/app/nfs <world>(rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
/app/home/hunk <world>(rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
遠程主機掛載NFS偽根
# mount 192.168.5.108:/ /tmp/ > 方法跟之前的是一樣的,只是把遠程NFS的掛載目錄變為/
#tree /tmp
/tmp
├── home
│ └── hunk
│ └── hunk
└──nfs
├── aaa.txt
└── nfs1.txt
NFS網絡文件系統