2020年4月24日 星期五

NFS for Windows XP (續)

上次 NFS client for windows XP 算是寫到一半, 在這裡補上一些上次沒寫的

  • 首先是安裝. 安裝不能只單純裝 client for NFS, 因為少一個看起來很多事的 uid/gid mapping service 要裝. 所以記得, 安裝時請用正常步驟, 頂多拿掉 NFS server 的選項, 也不能一開始就用 "msiexec /I C:\SFU35SEL_EN\sfusetup.msi /qb addlocal="NFSClient"" 安裝
  • 要照 https://superuser.com/questions/359968/nfs-mount-in-windows-xp 裡的說明多做一步 uid/gid 設定轉換工作. 不過不同的是, /etc/passwd 或 /etc/group 並不需要給全部, 只要留下 NFS server 端預設使用的使用者名稱 (ubuntu 裡一般使用 uid/gid 1000 這一個, 也就是安裝時使用的自訂帳號) 就好, 假設 server 端用的是 ubuntu nfs-kernel-server, 那 /etc/passwd 只要留下 :1000: 那一行餵給 Windows NFS 管理工具就好. 全丟給它它也不收.

以上測試到可以正常連線讀寫後, 會有第二個問題, 如何讓它一開機進來就自動掛載?

在做這個動作之前, 請先做一個動作, 檔案管理員裡把剛剛連線的 NFS 磁碟代號等全部離線.

在 Windows XP 下, NFS client 是屬於 user app 層級的服務, 啟動順序遠較原本的正常服務要低, 往往都是進桌面後才會開始啟動它, 沒意外的話 Windows 2000 也是這樣. ( 後面版本的 windows 有開始內建 NFS service 後有沒有解決這問題, 對不起我不知道.... ), 而這樣的啟動順序會造成 windows 開機途中跳個 dialog 說 NFS client service 沒有起來所以沒辦法使用, 然後就停在那等人點下去....

會造成這個問題的原因, 除了如 dialog 所說 NFS client service 沒起來以外, 另一個原因是 windows 本身的網路磁碟機掛載機制, 當你用手動掛載, 但沒有手動中斷時, windows 會在下次開機時嘗試再掛載起來, 但在較早版本的 windows 裡這個階段 NFS client 是還沒起動的, 也就所以會跳這個錯誤出來.

解決方式是 net use drive: server:/sharringname/ 後面多個 /p:no 或 /persistent:no
這樣就不會把這次的連線方式記憶起來.

為解決這些較早期版本 Windows 的 NFS client 問題, 個人建議自動掛載交給一個 batch 處理, 從等待服務啟使完. (ps. "Client for NFS" 是在 XP 上的名字, 在其它 windows 上會不同)

-----
@echo off
:loop
for /F "tokens=3 delims=: " %%H in ('sc query "Client for NFS" ^| findstr " STATE"') do (
if /I "%%H" NEQ "RUNNING" ( goto loop )
)

REM /persistent:no 或 /p:no 為不要在下次開機時自動掛入, 非常重要.
net use d: 172.16.128.1:/docs /persistent:no
net use x: 172.16.128.1:/shm /persistent:no
-----

會寫這篇文章是因為 samba 從 4.10 (ubuntu 20.04) 開始預設將 smb v1 關掉, 雖然後來有找到如何在 samba 4.10 上強制開啟 smb v1 的設定方式, 但後來想想覺得, smb v1 被徹底移除大概也只是時間早晚問題, 不如全改用 NFS 掛載算了....
至於 Win9x 嘛.... 另外再開個小 vm 裝個 samba server / nfs client 做個小小 bridge 轉接過去吧...