NFS文件系統上文件的修改時間顯示問題
Solaris + NetApp存儲,用戶的home目錄放在NetApp上,通過autofs掛到本地。發現在用戶各自的home目錄下touch文件後用ls -l查看,mtime(modify time)一列只顯示年月日,不顯示時分。
$ touch file
$ ls -l file
-rw-r--r-- 1 user user 0 Aug 25 2009 file
等了十幾分鐘後,再次ls查看,能夠看到時分了,但顯示的時間並不是原來執行touch的時間,而是向後推遲了十幾分鐘。
$ ls -l file
-rw-r--r-- 1 user user 0 Aug 25 13:22 file
在Solaris 10的系統上,重新touch文件file,並立即用ls -e(-e選項可顯示時間到秒)查看文件mtime的時分秒信息,可以看到顯示出了具體的mtime時間。
$ touch file
$ ls -e file
-rw-r--r-- 1 user user 0 Aug 25 13:24:09 2009 file
然後立即用date看了一下本地時間
$ date
Tue Aug 25 13:09:22 CST 2009
發現文件的mtime時間比本地時間早了十幾分鐘,而前面測試的第二步裡所等待的十幾分鐘,正好是這個時間差。
所以,判斷是NetApp存儲上的時間與Solaris系統的時間不同步,導致了這一問題。
得到該結論後又做了一下測試,發現,只要NetApp的時間比本地時間早,那麼在touch之後ls -l查看都是不能夠顯示時分信息的;如果NetApp的時間比本地時間晚,則能夠顯示時分信息,但是所顯示的時分信息不是本地的touch時間,而是NetApp上的時間。
所以,NFS文件系統中文件和目錄顯示的時間以NFS所在的主機時間為准,並且在NFS主機時間比本地主機提前的情況下,創建文件後不能夠立即顯示時分信息。要杜絕這一問題,應盡量讓NFS主機和本地主機的時間保持同步。
設置時間同步的方法見 http://www.2cto.com/os/201307/231894.html
但有個問題想不通,既然不讓ls -l顯示比本地時間提前的mtime,那為什麼在Solaris 10中ls -e這個選項又讓它能顯示了呢?而man ls中描述-e選項僅僅如下:
The same as -l, except displays time to the second, and with one format for all files regardless of age: mmm dd hh:mm:ss yyyy.