2008/02/26

用 Cygwin 在 Windows 上架設 NFS Server

想在 Windows 上架個 NFS Server,但除了 Cygwin 和 SFU (Microsoft Windows Services for UNIX) 之外,找不到 free 的 NFS Server 解決方案。以下就先介紹 Cygwin 上 NFS Server 的安裝方式。

安裝

Cygwin 上的 NFS Server 需要以下幾個 packages (執行用來安裝 Cygwin 的 setup.exe 程式就可以勾選。雙冒號之前是 Category,後面是不含版本編號 Package 名稱):
  • Net :: nfs-server
  • Libs :: sunrpc
  • Admin :: cygrunsrv
安裝完成之後,需進入 Cygwin console 執行以下指令:
/usr/bin/nfs-server-config
執行時會出現以下畫面,請回答 yes:
This script sets up a default configuration for running an NFS server under
Cygwin. As part of this setup, the script will do the following:

1) Create a user account to run the services under. [OPTIONAL]
2) Install portmap, mountd, and nfsd as Windows services.
3) Create a sample exports file.
4) Create a sample uid/gid mapping file.

After installing, please read the nfs-server README for Cygwin:

/usr/share/doc/Cygwin/nfs-server-2.3-*.README

This document contains notes on installation and documents known problems
and workarounds with the NFS server; ex:

- ISSUE : Recommend using ntsec
- ISSUE : Daemons are single-threaded
- ISSUE : Daemons require 'impersonate logged on user' right.
- ISSUE : Daemons cannot re-export mapped network drives
- ISSUE : Daemons expect 'nobody' or 'Guest' as anonymous user
- ISSUE : Portmap service fails to start
- ISSUE : Cannot export Windows directories not under Cygwin root
- ISSUE : Considerations when mapping UIDs/GIDs

Do you want to continue? (yes/no)
接下來的畫面是詢問你要不要使用 separate user account 來執行 NFS Server,在 XP 上一定要回答 yes。接下來會問你帳號名稱和密碼。這個帳號是在 XP 上的帳號,用來執行 service 的,帳號密碼都要對才可以 (請仔細輸入帳號,不然有許多設定需要修改,相當麻煩):
Checking for other Unix environments on this system ...
Good! There doesn't seem to be any other Unix environments installed.

You can choose to install the services so that they run under the local system
account, or under a separate user account. Which option you should choose
depends on which version of Windows you are running:

Windows 2000 : You may run nfsd under either a local system account or
a separate user account. You _probably_ want to run under
the local system account.
Windows XP : You _must_ run nfsd under a separate user account.

If you choose to run nfsd under a separate user account, you will be prompted
for a user name and password. If the user name you supply does not exist,
it will be created.

Do you want to run nfsd under a separate user account? (yes/no)
設定

完成上述動作之後,就差不多可以啟動 NFS Server 了。在此之前,請修改 Cygwin 上的/etc/exports 來設定要對外開放的目錄位置。以下是個簡單例子,詳細的格式請參考 man exports
/home/share
/cygdrive/d/work 192.168.6.14(rw)
/home/share 開放給所有人讀取;/cygdrive/d/work (即 D:\work,在 Cygwin,要用 /cygdrive/c 來代表 C:,餘此類推) 只給來自 192.168.6.14 的 client 讀寫。

啟動

接下來就要啟動 NFS Server 了:
  • 到 控制台 -> 系統管理工具 -> 服務
  • 將以下服務一一啟動:
    • Cygwin mountd
    • Cygwin nfsd
    • Cygwin portmap
如果你之前設定的密碼有問題,可以在此修改 (雙擊上述項目,切到「登入」頁),若是帳號有問題,建議重新執行 /usr/bin/nfs-server-config。

若一切正常,應該可以順利啟動以上三個服務。這個動作只需要做一次就可以了,以後再登入也都會保持啟動狀態。但以後若修改 /etc/exports 檔,必須重新啟動 portmap 這個服務 (會自動重新啟動其他兩個)。

障礙排除

若啟動上述 service 失敗,請利用以下方式來找出錯誤原因:
  • 控制台 -> 系統管理工具 -> 事件檢視器
仔細查看系統部份是否有新產生錯誤事件。若找不到,就找找應用程式部份。例如我啟動 portmap 的時候出現一個錯誤訊息:「服務已啟動又停止」。找了好久才發現到 portmap 所需要的 port (TCP/UDP 111) 已經被佔用了。將佔用該 port 的程式移除問題就解決了。同理,也要小心 NFS 的 port (UDP 2049) 是否有被佔用。

若上述三個 service 順利啟動,但是 client 在 mount 的時候一直 time out,很有可能是被 Windows firewall 給擋下來了。請按如下方式處理:
  • 控制台 -> Windows 防火牆 -> 例外
  • 用「新增程式」一一加入以下三隻程式:
    • C:\cygwin\usr\sbin\portmap.exe
    • C:\cygwin\usr\sbin\rpc.mountd.exe
    • C:\cygwin\usr\sbin\rpc.nfsd.exe
參考資料

沒有留言: