1. 問題現象
2. 問題分析
3. 解決辦法
4. 解決情況
5. 總結
本文使用環境: 核心版本:Linux 5.4.31 硬體平台:armv7 / stm32mp157 編譯環境:Ubuntu Linux 18.04.4 LTS / gcc version 8.4.0 (Buildroot 2020.02.3-00002-gee623e2fe0-dirty)
在使用百問網的<code>stm32mp157</code>開發闆(下文簡稱<code>目标機</code>)挂載<code>NFS</code>(網絡檔案系統)時,挂載逾時。挂載目錄為<code>Ubuntu</code>虛拟機的<code>/home/ryan/nfs_rootfs/</code>目錄,該目錄在<code>/etc/exports</code>檔案中配置。

<code>Ubuntu</code>虛拟機使用<code>NAT</code>方式連接配接以太網,映射端口為<code>2049</code>和<code>9999</code>
<code>PC</code>機(下文簡稱<code>主控端</code>)<code>ip</code>位址為<code>192.168.3.2</code>,挂載指令為<code>mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 192.168.3.2:/home/ryan/nfs_rootfs/ /mnt</code>
執行結果:
在<code>目标機</code>上執行<code>ping</code>指令觀察是否正常收到主控端的<code>icmp</code>封包響應
執行<code>ping 192.168.3.2</code>指令結果顯示,<code>目标機</code>和<code>主控端</code>正常通信,無丢包現象。
為便于封包分析,使用<code>wireShark</code>工具進行封包捕獲,打開<code>wireShark</code>工具,輕按兩下選擇<code>主控端</code>通信網卡連接配接,這裡用的是<code>以太網</code>連接配接
正常打開後即可看到<code>wireShark</code>工具捕獲到的各種協定封包資料,這裡隻關心<code>目标機</code>相關的封包,在<code>過濾器</code>中輸入過濾條件<code>ip.addr==192.168.3.28</code>并回車(<code>192.168.3.28</code>為目标機目前的<code>ip</code>位址),此時目标機執行挂載指令<code>mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 192.168.3.2:/home/ryan/nfs_rootfs/ /mnt</code>,可以看到<code>wireShark</code>捕獲界面顯示如下
編号為<code>42</code>的資料包,為第1次從<code>ip</code>為<code>192.168.3.28</code>的機器發送給<code>ip</code>為<code>192.168.3.2</code>的<code>TCP</code>消息,此後編号為<code>47</code>、<code>55</code>、<code>69</code>、<code>112</code>的資料包都是重發的消息包,初步可以斷定是主控端沒有應答導緻的目标機資料重傳,而主控端沒有應答的原因可能是<code>Windows</code>的防火牆阻隔了這條資料報。
經過以上分析,将<code>Windows</code>防火牆關閉,再次執行挂載指令<code>mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 192.168.3.2:/home/ryan/nfs_rootfs/ /mnt</code>結果正常挂載NFS。
但将<code>Windows</code>防火牆完全關閉畢竟不是穩妥的做法,另一種選擇是給<code>Windows</code>防火牆添加入站規則,滿足這條規則時防火牆才放行。打開<code>Windows</code>防火牆,添加入站規則,指定本地端口為<code>2049</code>和<code>9999</code>。
設定方法:
按以上方法設定完成後,目标機能夠正常挂載<code>NFS</code>,<code>wireShark</code>也沒有再捕獲到重傳的資料報
<code>目标機</code>執行<code>ls /mnt</code>指令
伺服器挂載路徑下顯示:
<code>目标機</code>通路到的目錄内容與設定的<code>挂載目錄</code>比對,<code>目标機</code>挂載<code>NFS</code>網絡逾時的問題得到解決。
計算機互相之間能<code>ping</code>通僅表明<code>icmp協定</code>封包資料能正常通信,并不能表示其他協定的連通性,在遇到執行<code>ping操作正常</code>,而<code>通信異常</code>時,可以将<code>計算機防火牆</code>納入可能影響的因素。