有關自動掛載nfs的討論
在前面的文章中,我們曾了解過有關于自動掛載nfs的內容。但是筆者在最近又發現了一些問題,所以這里我們來總結一下,分享給大家。網絡部調整我服務器的位置,所以把我的服務器停機了,結果服務器恢復的時候,發現nfs并沒有自動的mount上。那么這到底是什么問題呢?首先發現手動掛載nfs是正常的,說明portmap服務是好的,使用/etc/init.d/netfs status查看狀態,也能看到需要掛載的路徑,而且執行/etc/init.d/netfs start看到nfs路徑是可以被掛載的。由此說明netfs服務也是正常的。
緊接著查看了一下/etc/rc.d/rc3.d下面的啟動腳本,如下
- S10network
- S12syslog
- S13irqbalance
- S13iscsi
- S13portmap
- S22messagebus
- S25netfs
- S28autofs
由此看到,netfs服務是在portmap的后面啟動,同樣也是在network的后面啟動的,所以應該不會是服務啟動順序的問題。
緊接著又想到了另外一個問題:并不是所有服務器都不能自動掛載nfs,有些機器是可以的。有一點這里需要說一下,公司的nfs服務器的ip地址和我服務器的ip不在一個網段,服務器是10網段,nfs是192網段的。所以必須在啟動服務器的時候添加路由。
在此,使用了兩種方式自動添加路由
1,使用rc.local文件
2,使用static-routes文件
問題就是使用第一種方式的時候不能自動掛載,但使用第二種方式的時候就可以自動掛載。后來把使用第一種方式的都改成第二種方式,問題迎刃而解,服務器重啟后可以自動掛載nfs了。
總結:
按照linux啟動的順序,rc.local里面的內容是在linux所有服務都啟動完畢,最后才被執行的,也就是說,這里面的內容是在netfs之后才被執行的,那也就是說在netfs啟動的時候,服務器上的靜態路由是沒有被添加的,所以netfs掛載不能成功。
static-routes文件又是什么呢,這個是network腳本執行時調用的一個文件,這個文件的放置在/etc/sysconfig目錄下,在network腳本中的位置是:
- 151 # Add non interface-specific static-routes.
- 152 if [ -f /etc/sysconfig/static-routes ]; then
- 153 grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
- 154 /sbin/route add -$args
- 155 done
- 156 fi
從這段腳本可以看到,這個就是添加靜態路由的方法,static-routes的寫法是
any net 192.168.0.0/16 gw 網關ip
這樣的話,在啟動network腳本的時候路由就自動添加上了,又因為network是在netfs前面啟動的,自然在自動掛載nfs的時候就正常了。
這樣看來,如果需要添加靜態路由,使用static-routes文件要比使用rc.local好,而且當改變了網絡配置,需要重啟network腳本的時候,相應的靜態路由是可以自動添加上的,但這時如果使用rc.local的話,在重啟network服務的時候,原本添加好的靜態路由就消失了。