2009年5月25日

[samba-jp:20708] Re:ファイル更新時刻の精度


山崎と申します。

>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@xxxxx 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ナノ秒の位が
保存されている
----------------------------------------------------------------------------------------------------


投稿者 xml-rpc : 2009年5月25日 18:53
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/85424
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。