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主机和本地主机的时间保持同步。
 
 
但有个问题想不通,既然不让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.
 
09-29 17:14