本人譯做集合:http://www.cnblogs.com/f-ck-need-u/p/7048359.htmlhtml
rpc.statd程序主要實現NFS鎖相關內容,如普通的文件鎖(NLM、NSM)、文件委託、租約等,但注意,它和sm-notify組合起來才能實現整個NFS鎖機制,具體見下文翻譯文檔中的說明。linux
RPC.STATD(8) System Manager's Manual RPC.STATD(8) NAME rpc.statd - NSM服務守護進程 SYNOPSIS rpc.statd [-dh?FLNvV] [-H prog] [-n my-name] [-o outgoing-port] [-p listener-port] [-P path] [--nlm-port port] [--nlm-udp-port port] DESCRIPTION 文件鎖不是持久文件系統狀態的一部分。所以當主機重啓時鎖的狀態會丟失。 當遠程主機重啓時,網絡文件系統必須可以探測到鎖狀態的丟失。當NFS客戶端重啓時,NFS服務 端必須釋放該客戶端所申請的全部文件鎖。在服務端重啓後,客戶端必須可以提醒服務端它所申 請的全部文件鎖。 對於NFSv2和NFSv3,使用網絡狀態監控器Network Status Monitor(NSM)協議來通知NFS對端關於重 啓的事情。在Linux上,NSM服務進程由兩個獨立的用戶空間程序組成: ● rpc.statd 該守護進程用於監聽其餘主機的重啓消息,並管理本地主機重啓時須要通知的主機列表。 ● sm-notify 一個輔助程序,用於在本地系統重啓時通知NFS對端。 (譯者注:也就是說rpc.statd是重啓信息的接收者,而sm-notify是信息的通知者) 本地NFS鎖管理器(NFS lock manager,NLM)會它本地的rpc.statd發出警告說列表中的每一個遠程對端 狀態都須要被監控。當本地系統重啓時,sm-notify命令會通知對端上的NSM服務關於本身重啓的 事。當遠程主機重啓時,遠程對端的sm-notify通知本地的rcp.statd,而後將此信息告訴本地NFS 鎖管理器,本地鎖管理器將維護與重啓端對應文件的鎖。 NSM OPERATION IN DETAIL NFS客戶端和服務端之間的第一個文件鎖交互行爲會使得兩端的NLM都去聯繫它們本地的NSM服務以 存儲它們對端的信息。在Linux上,也就是讓本地所管理器去聯繫rpc.statd守護進程。 rpc.statd會將NFS對端信息記錄在持久存儲上。該信息描述了若是本地系統重啓時如何去聯繫遠程 對端,如何識別對端報告它在重啓的信息,以及當對端說它已經重啓完成時如何通知NLM。 每一個客戶端在每一個文件鎖請求中都會發送一個稱爲客戶端caller_name的主機名。NFS服務端可使 用該主機名向客戶端發送異步GRANT調用,或者通知客戶端它已經重啓完成。 Linux NFS服務端能夠將客戶端的caller_name或客戶端的網絡地址提供給rpc.statd。爲了遵照NSM 協議,該名稱或地址被稱爲對端mon_name。另外,本地鎖管理器會告訴rpc.statd它本身的主機名, 爲了遵照NSM協議,該主機名被稱爲my_name。 在NFS中,NFS服務端沒有通知客戶端它的主機名的交互行爲。所以NFS客戶端實際上不知道服務端 的mon_name,儘管在SM_NOTIFY請求中會使用的它。Linux NFS客戶端是經過使用從掛載命令中獲取 到的服務端主機名或地址來識別正在啓動的NFS服務端的。 Reboot notification 當本地系統重啓時,本地的sm-notify命令從持久存儲中讀取監控對端列表,併發送SM_NOTIFY請求 給列表中每一個遠程對端的NSM服務進程,它使用mon_name字符串來指定發送目標。爲了識別哪一個主 機已經重啓完成,重啓後的主機會使用sm-notify命令發送my_name字符串。遠程rpc.statd將使用 該字符串與其監控列表中的對端相匹配以找出發送SM_NOTIFY請求的主機。 若是rpc.statd在它的監控列表中未找到能匹配接收到的SM_NOTIFY請求的對端,則通知不會被轉發 給本地鎖管理器。另外,每一個對端都獨有一個32位整數NSM狀態碼,在每次重啓以後,sm-notify命 令都會讓它碰撞重複。rpc.statd使用該號碼來區分是重啓仍是通知重放。 NFS鎖恢復的一部分是從新發現哪一個對端須要被再次監控。在每次重啓以後,sm-notify命令都會清 空持久存儲上的監控列表。 OPTIONS -d, --no-syslog 若同時指定了"-F"選項,則表示讓rpc.statd再也不向syslog中寫日誌,而是輸出的stderr中。 -F, --foreground 使得rpc.statd附在控制終端上以便NSM操做能夠直接被監控到,主要是爲了調試。若是不指 定該選項,則rpc.statd啓動後當即進入後臺運行。 -h, -?, --help 輸出rpc.statd命令的使用說明並退出。 -H, --ha-callout prog 指定一個高可用callout程序。若是未指定該選項,則不執行任何callout程序。詳細說明見 下面的"High-availability callouts"段落。 -L, --no-notify 阻止rpc.statd在其啓動時運行sm-notify命令,以及阻止保留已存在的NSM狀態號碼和監控列 表。 注意:sm-notify命令包含了一次檢查以確保在每次系統重啓後它僅運行了一次。若rpc.statd 以不帶"-L"選項重啓時,這能夠防止虛假的重啓通知。 -n, --name ipaddr | hostname 指定RPC監聽套接字綁定的地址。若是未指定該選項,rpc.statd使用通配地址(即0.0.0.0)。 該字符串也會被傳遞給sm-notify命令,用於做爲發送重啓通知請求時的源地址。詳細內容見 sm-notify(8)的man文檔。 -N 讓rpc.statd執行sm-notify命令而後退出。因爲sm-notify命令可直接運行,該選項已廢棄。 -o, --outgoing-port port 指定當sm-notify命令發送重啓通知時使用的源端口號。詳細內容見sm-notify(8)的man文檔。 -p, --port port 指定rpc監聽套接字監聽的端口號。若是未指定該選項,則rpc.statd會嘗試從/etc/services中 獲取,若是獲取成功,則爲全部監聽套接字都設置此端口號,不然將爲每一個監聽套接字都選擇 一個隨機端口號。 該選項在SM_NOTIFY須要穿越防火牆時能夠用來調整端口號,防止被防火牆堵住。 -T, --nlm-port port 指定監聽NLM請求的端口號。除非使用了"-U"單獨指定了UDP端口號,不然將同時監聽TCP和UDP的 端口號。 -U, --nlm-udp-port port 指定監聽NLM請求的UDP端口號。 -P, --state-directory-path pathname 指定NSM狀態信息保存路徑的父目錄。若是未指定該選項,則默認爲/var/lib/nfs/statd。 程序啓動以後,rpc.statd將嘗試爲此目錄使用UID和GID設置它的全部者和所屬組。 -v, -V, --version 輸出rpc.statd的版本號並退出。 SECURITY The rpc.statd daemon must be started as root to acquire privileges needed to create sockets with privileged source ports, and to access the state information database. Because rpc.statd mai- ntains a long-running network service, however, it drops root privileges as soon as it starts up to reduce the risk of a privilege escalation attack. During normal operation, the effective user ID it chooses is the owner of the state directory. This allows it to continue to access files in that directory after it has dropped its root privileges. To control which user ID rpc.statd chooses, simply use chown(1) to set the owner of the state directory. You can also protect your rpc.statd listeners using the tcp_wrapper library or iptables(8). To use the tcp_wrapper library, add the hostnames of peers that should be allowed access to /etc/hosts.allow. Use the daemon name statd even if the rpc.statd binary has a different filename. For further information see the tcpd(8) and hosts_access(5) man pages. ADDITIONAL NOTES 主機重啓後的鎖恢復對於維護數據一致性和防止沒必要要的應用程序掛起相當重要。爲了能讓 rpc.statd更高效地匹配SM_NOTIFY請求,應該遵照一些最佳實踐,包括: 系統的UTS名稱須要和NFS對端用來作聯繫的DNS名稱相匹配。 (注:若不知何爲UTS名,能夠簡單地認爲UTS名稱就是主機名) 系統的UTS名稱應該老是fqdn格式的名稱。 系統的UTS名的正向和反向DNS映射最好要保持一致。 客戶端用來掛載的服務端的主機名最好能匹配它所發送的SM_NOTIFY請求中的mon_name。 卸載NFS文件系統時無需中止客戶端或服務端任意一端的狀態監控。兩端可能會繼續保持監控一段 時間,以防這兩端間後續再次出現新的掛載和額外的文件鎖的NFS流量出現。 在Linux上,若是沒有裝在內核鎖模塊,全部的遠程NFS對端都不會被監控。這可能會發生在NFS的 客戶端上,例如,自動掛載工具移除了全部NFS掛載點,由於它們處於空閒非活動狀態。 High-availability callouts 在rpc.statd成功處理SM_MON, SM_UNMOU和SM_UNMON_ALL請求時或接收到SM_NOTIFY時,rpc.statd能夠 執行一個特定的回調(callout)程序。這個程序在高可用NFS(HA-NFS)環境下可用來跟蹤鎖狀態,特別 是某節點主機重啓後資源須要遷移時。 callout程序的名稱由rpc.statd的"-H"選項指定。該程序運行時有4個參數:第一個參數是add-client 或del-client或sm-notify,這取決於之因此要調用callout的緣由。第二個參數是監控對端的mon_name。 第三個參數是鎖管理器要add-client或del-client時的caller_name,不然則是發送SM_NOTIFY請求的IP 地址。第四個參數是SM_NOTIFY請求中的state_value。 IPv6 and TI-RPC support TI-RPC is a pre-requisite for supporting NFS on IPv6. If TI-RPC support is built into rpc.statd, it attempts to start listeners on network transports marked 'visible' in /etc/netconfig. As long as at least one network transport listener starts successfully, rpc.statd will operate. FILES /var/lib/nfs/statd/sm directory containing monitor list /var/lib/nfs/statd/sm.bak directory containing notify list /var/lib/nfs/statd/state NSM state number for this host /var/run/run.statd.pid pid file /etc/netconfig network transport capability database SEE ALSO sm-notify(8),nfs(5),rpc.nfsd(8),rpcbind(8),tcpd(8),hosts_access(5),iptables(8),netconfig(5) RFC 1094 - "NFS: Network File System Protocol Specification" RFC 1813 - "NFS Version 3 Protocol Specification" OpenGroup Protocols for Interworking: XNFS, Version 3W - Chapter 11 AUTHORS Jeff Uphoff <juphoff@users.sourceforge.net> Olaf Kirch <okir@monad.swb.de> H.J. Lu <hjl@gnu.org> Lon Hohberger <hohberger@missioncriticallinux.com> Paul Clements <paul.clements@steeleye.com> Chuck Lever <chuck.lever@oracle.com> 1 November 2009 RPC.STATD(8)
如下是NFS相關翻譯篇:網絡
翻譯:man rpcbind(rpcbind中文手冊)
翻譯:man nfsd(rpc.nfsd中文手冊)
翻譯:man mountd(rpc.mountd中文手冊)
翻譯:man statd(rpc.statd中文手冊)
翻譯:man sm-notify(sm-notify命令中文手冊)
翻譯:man exportfs(exportfs命令中文手冊)
部分翻譯:man nfs 併發