nfs服務介紹
- nfs(Network File System) 網絡文件系統,能使用戶訪問服務器的文件系統,就像訪問自己的本機的文件系統一樣,並且多個
客戶端共享訪問該文件系統。 - 目前nfs服務,較為流行的兩個nfs的組件為:nfsd,nfs-ganesha。前者linux為系統自帶的內核態的文件系統,后者是開源的用戶空間的文件
系統。因為nfs-ganesha運行在用戶態,nfsd運行在內核態,所以nfs-ganesha具有內存分配靈活,可移植性更好,更方便擴展等優勢。
缺點是nfs-ganesha目前的穩定性還不如nfsd。
如何搭建nfsd和nfs-ganesha服務
機器環境為centos7,由於兩者都使用2049端口,因此一台服務器上,只能跑其中之一.
-
搭建nfsd服務
A. 檢查是否安裝rpcbind和nfs-utils軟件
rpm -qa | grep rpcbind nfs-utilsB. 如果上面兩個軟件沒有安裝,需要安裝這兩個軟件
yum install -y rpcbind nfs-utilsC. 啟動B中安裝的軟件
systemctl start rpcbind && systemctl enable rpcbind
systemctl start nfs && systemctl enable nfsD. 配置nfs權限文件
配置權限可以直接修改/etc/exports文件,也可以在/etc/exports.d目錄下,添加*.exports文件。
文件內容格式為:目錄 IP/IP網段(nfs選項)
文件內容每一個權限的占用一行,選項一般使用較多的搭配項為,rw/ro,sync,no_root_squash,rw表示讀寫,ro表示只讀
sync,表示數據寫入到內存和硬盤,保證數據不會丟失,當客戶端用root身份掛載時候,nfs服務器將其映射為root用戶.E. 執行權限的加載 命令,exportfs -rav 執行這個命令,並不需要去重啟nfs服務。
F. 客戶端使用如下命令去掛載,172.16.0.1表示服務器的ip地址,vers 代表協議類型,支持3,4,4.1等,/mnt表示服務器的
共享目錄,/tmp為本地目錄
mount -t nfs 172.16.0.1:/mnt /tmp -o vers=4G. 掛載成功后,使用df命令,nfs4所在的哪一行為掛載的nfs文件系統
然后就可以,cd /tmp,對這個目錄下進行讀寫文件等操作了,
至此nfsd服務全部搭建完畢。H. 查看nfs的日志,在系統日志/var/log/messages中,可以用vim打開,搜索nfs關鍵字。
-
nfs-ganesha搭建
A. 從github下載nfs-ganesha,按照官網給的編譯文檔進行編譯,並將相應的二進制ganesha.nfsd ,拷貝/usr/bin/目錄下B. 配置nfs-ganesha的systemd服務,從nfs-ganesha/src/scripts/systemd目錄下,將nfs-ganesha-lock.service.el7,nfs-ganesha.service.el7
拷貝到目錄/usr/lib/systemd/system,並去掉后綴el7,然后執行命令systemctl daemon-reloadC.配置nfs-ganesha的配置文件,/etc/ganesha/ganesha.conf內容大概如下,
EXPORT
{Export Id (mandatory, each EXPORT must have a unique Export_Id)
Export_Id = 12345;
Exported path (mandatory)
Path = /mnt;
Pseudo Path (required for NFSv4 or if mount_path_pseudo = true)
Pseudo = /mnt;
Restrict the protocols that may use this export. This cannot allow
access that is denied in NFS_CORE_PARAM.
Protocols = 3,4;
Access type for clients. Default is None, so some access must be
given. It can be here, in the EXPORT_DEFAULTS, or in a CLIENT block
Access_Type = RW;
Whether to squash various users.
Squash = no_root_squash;
Allowed security types for this export
Sectype = sys,krb5,krb5i,krb5p;
Exporting FSAL
FSAL {
Name = VFS;
}
}
具體配置可以參照,github文檔D. 啟動nfs-ganesha服務,執行systemctl start nfs-ganesha,
然后檢查nfs-ganesha狀態,執行systemctl reload nfs-ganesha,E. client掛載與nfsd client掛載方式一樣,掛載成功后,說明nfs-ganesha搭建完成
nfs服務常見異常問題解決辦法
1. 當nfs 服務器宕機或者nfs服務掛掉時,客戶端未進行正常的umount,這時候客戶端執行df命令,或者cd 到掛載路徑,
client會hang住,客戶端可以執行 umount 掛載路徑 -fl
2. 當客戶端在服務器的授權正常時,client mount不了服務器的目錄,可以在服務器的/var/log/messages中查下,是不是
nfsd最大塊的問題,就是當前nfsd支持傳輸的最大塊大小,不能滿足client傳輸的塊大小,
實質上就是nfsd設置的塊大小過小,
解決辦法是:在nfs服務器上執行,echo 1048576 > /proc/fs/nfsd/max_block_size
內核目前支持的最大塊大小為1M