[samba-jp:20708] Re: ファイル更新時刻の精度
YAMASAKI Hiroyuki
yamasaki.hiroyuki @ sp.qnes.nec.co.jp
2009年 5月 25日 (月) 18:53:45 JST
山崎と申します。
>Linux ではカーネル 2.6.22 から utimenstat というシステムコールが
>追加され、これを使うとナノ秒単位でタイムスタンプをセットできる
>ようですが。
興味深いですね。
ちょっと動作確認するだけなら、samba3.0.25以降は、vfsのutimeのインタ
フェースの引数の型がstruct timespec(ナノ秒単位)になっているので、
samba本体を改造しなくてもvfsオブジェクト(プラグイン)の作成すること
で動作を確認できます。
で、試しに、そのutimenstatを使うVFS objectを自作してみました。
VFSのサンプルソースをベースにして、修正は数行です。
(添付ファイルがパッチ)
結果として、100ナノ秒精度のタイムスタンプの保存がうまくいくようです。
■環境
OS: Fedora 11 prerelease
高精度タイムスタンプに関係しそうなモジュールのバージョンは以下。
kernel-2.6.29
ext4
glibc-2.10.1
samba-3.3.2(OS付属)
■手順
●samba-3.3.2のソースをダウンロードし、展開(fedora11に付属のsambaのバージョンに合わせたソースを取得)
●cd samba-3.3.2/source
●./configureを実行。(include/config.hの作成のみで、makeしなくていいはず。)
●cd ../examples/VFS
●cp skel_transparent.c vfs_linux_utimensat.c
●patch < vfs.patch
●./autogen.sh
●./configure
●make (vfs_linux_utimensat.soが生成される)
●cp vfs_linux_utimensat.so /usr/lib/samba/vfs
●smb.confにテスト用共有のセクションを作り、 そのセクション内に
vfs objects = vfs_linux_utimensat
を追加。
●service smb restart
■テスト結果
下記のコマンドsetfiletimeは、100ナノ秒単位で設定するための私の自作のテストプログラム(
なので、このメールのとおり試すことはできませんが・・・
---------- Windows見え(vfs objects設定無し)---------------------------------------------------------
C:\>setfiletime z:\before 9999
*Error*: GetFileTime timestamp != SetFileTime timestamp
SetFileTime timestamp = 1999/12/31 23:58:59 777(millisec) 9999(100nanosec)
GetFileTime timestamp = 1999/12/31 23:58:59 777(millisec) 9990(100nanosec)
↑素では100ナノ秒の位が保存されない。
----------------------------------------------------------------------------------------------------
---------- Windows見え(vfs_linux_utimensat追加)-----------------------------------------------------
C:\>setfiletime z:\after 9999
Success: GetFileTime timestamp == SetFileTime timestamp
SetFileTime timestamp = 1999/12/31 23:58:59 777(millisec) 9999(100nanosec)
GetFileTime timestamp = 1999/12/31 23:58:59 777(millisec) 9999(100nanosec)
↑100ナノ秒の位が保存されるようになった。
----------------------------------------------------------------------------------------------------
---------- Linux上でのls結果 -----------------------------------------------------------------------
[root @ localhost owner]# ls -l --full-time before after
-rwxr--r-- 1 owner owner 0 1999-12-31 23:58:59.777999900 +0900 after
-rwxr--r-- 1 owner owner 0 1999-12-31 23:58:59.777999000 +0900 before
↑vfs_linux_utimensat設定後の方は100ナノ秒の位が
保存されている
----------------------------------------------------------------------------------------------------
samba-jp メーリングリストの案内