Dokan

user-mode file system for Windows    >>English version

Dokan SSHFS 0.1.7をリリース

January 31st, 2008 in .NET, Dokan, SSHFS

Dokan SSHFS 0.1.7をリリースしました。

Dokan SSHFSは、LinuxなどSSHで接続できる先のファイルシステムをドライブとしてマウントするプログラムです。
Dokan SSHFS 0.1.7では、ファイルコピー時にファイルの更新日時が保存されるようになりました。また、ディレクトリ一覧やファイルのプロパティをキャッシュするようにしました。このため安定度が向上しています。フォルダを右クリックして「SSHFS Clear Cache」を実行すれば、そのディレクトリ以下のキャッシュを削除することができます。

8 Responses to “Dokan SSHFS 0.1.7をリリース”

  • yoneda
    February 1st, 2008 at 10:40 am

    便利に使わせていただいてます。

    環境依存かもしれませんが、ワイルドカードを使ったファイルの列挙が
    一部うまくいかないようです。

    たとえば
    dir *.*
    はうまく動作してくれますが
    dir *.c
    だと「ファイルが見つかりません」
    メッセージが表示されます。

    これができるようになりますと grep などの効率もぜんぜん違ってくると
    思うのでとてもうれしいです。

  • 淺川
    February 1st, 2008 at 11:21 am

    コメントありがとうございます。

    実は、Windowsではワイルドカードの処理はファイルシステムドライバの
    仕事となっておりまして、Dokanのワイルドカード処理は完全には仕様を
    満たせていません。次のバージョンアップまでには何とか直したいと思い
    ます。

  • yoneda
    February 1st, 2008 at 6:54 pm

    お返事ありがとうございます。

    なるほど。
    言われてみればワイルドカードの処理をファイルシステムドライバに任せるのも妥当な判断なのかもしれません。
    対象のファイルシステムがファイル名の保持にどんな文字セットを使っているかもわかりませんし。

    でも「ワタシ、フツーでいいんです」という人用に既定のパターンマッチ処理でも用意してくれていると面倒じゃないんですが。
    「フツーでいい」という人はあまりファイルシステムドライバを作らないという判断なんでしょうね。

    今日、さっそくコピー時のタイムスタンプ保持機能が役にたってくれました。
    キャッシュの効果で体感速度もぐっと上がった感じです。
    ( ファイルを書き込んだときはそのフォルダのキャッシュをクリアして
     もらえるとありがたいです。 )

    ワイルドカードの件も楽しみにお待ちしています。

  • yoneda
    February 22nd, 2008 at 7:27 am

    私は不勉強で知らなかったのですが、こんなAPIがあるようです。
    ファイルシステムドライバ用?の FsRtlIsNameInExpression と
    一般アプリ用?の PathMatchSpec です。
    すでにご存知かもしれませんがご参考になれば。

    ところで、Dokan SSHFS で追加が検討されている機能の一覧の
    ようなものはありますでしょうか?
    すでに予定されていたり、考えたけどやめた、というような機能
    をやたらリクエストしてしまうことにならないか心配しています。

  • 淺川
    February 23rd, 2008 at 4:29 pm

    ご意見ありがとうございます。

    Dokanのワイルドカード処理はユーザモードで行っているので
    FsRtlIsNameInExpression は使えないです。
    PathMatchSpec は知りませんでした。試してみたところ僕の手抜き実装と
    同じ動作で FsRtlIsNameInExpression と動作が異なるのでやっぱり使
    えなかったです。

    機能についてはこれまでまとめてなかったのでここに書きたいと思います。
    今後どこかにまとめたいです。

    次回のバージョンアップで予定
    ・ファイルの新規作成時にキャッシュがクリアされないバグの修正
    ・キャッシュを無効にするオプションを付ける
    ・アーカイブ属性をつけないオプションを付ける

    今後追加するかもしれない機能(優先度の高い順)
    ・接続のインタフェースの改良
    ・・パスワードを打ってエンターを押すと接続
    ・・保存したときにフォームがクリアされないようにする
    ・コマンドラインオプションの充実
    ・・起動時に自動でマウントできるように
    ・ドライブの右クリックに切断
    ・シンボリックリンクの対応
    ・”.ファイル”の表示の切り替え
    ・キャッシュしないファイルをパターンで登録
    ・アプリのアイコンをどうにかする
    ・読み込み書き込みのキャッシュ

  • yoneda
    February 25th, 2008 at 9:20 am

    お返事ありがとうございます。

    うーん。PathMatchSpec の動作は FsRtlIsNameInExpression と
    異なるのですね。何のためにあるのかよくわからないです。

    FsRtlIsNameInExpression の方なのですが、ユーザーモードで
    使用不可であれば、カーネルモードに戻ってから呼び出していただく
    わけにはいきませんでしょうか。

    ユーザーモードの関数では、自前で判定を実装して「判断しました
    &マッチしましたorしません」と言うか、「おまかせでお願いします」
    と言うか選べるようにしていただいて
    「おまかせ」の時には FsRtlIsNameInExpression を呼んでいただく
    みたいな感じで。

    おそらく、今の感じですと1回ずつユーザーモードとカーネルモードを
    行ったりきたりしているんですよね。

    機能リストもありがとうございます。
    今後リクエストさせていただく際に参考にさせていただきます。
    私が考えていることは枝葉のことだったりファイルシステムドライバ
    としてはやりすぎだったりするかもしれないことばっかりなのですが。

  • 淺川
    February 25th, 2008 at 10:27 pm

    WindowsのIoマネージャは、ユーザが入力したワイルドカードそのものではなくてそれを多少変換したようなものをファイルシステムドライバに渡してきます。その変則バージョンのワイルドカードマッチに対応したのがFsRtlIsNameInExpressionで、ユーザの入力そのもののワイルドカードマッチングを行うのがPathMatchSpecです。

    Dokanでは、FsRtlIsNameInExpressionに相当する処理をユーザモードで実装しています。Ioマネージャは、ファイルシステムにあるパスとワイルドカードパータンにマッチングするファイル一覧を要求してきます。Dokanでは、パスとワイルドカードパターンをユーザモードに渡して、Dokanのユーザモードライブラリでマッチングを行って、マッチするものだけをカーネルモードに返しています。これだとユーザモードからカーネルモードへの通信量が減り効率がよいのです。ユーザモードからカーネルモードのFsRtlIsNameInExpressionを呼ぼうとするとカーネルモードとユーザモードの遷移コストがかかります。

    ちなみにDokanでは、FindFilesとFindFilesWithPatternという2つの方法をファイルシステムに提供しています。FindFilesWithPatternは、ファイルシステムを作る人がマッチングまで制御したいときに使います。FindFilesはDokanにマッチングをお任せします。

  • yoneda
    March 3rd, 2008 at 12:59 pm

    せっかく詳しく説明していただいているのに
    ピンと来ず、実際に .net 版でファイルシステムを
    実装してみました。

    ご説明いただいたこともドキュメントに書いてあることも
    おそらく理解できるようになったと思います。

    なるほど、FindFiles メソッドのコールバック中は
    ユーザーモードとカーネルモードを行ったりきたりしないのですね。
    なので都度 FsRtlIsNameInExpression を呼び出すような
    実装にはならない、ということなんですね。

    ありがとうございます。

Leave a Reply

*
To prove that you're not a bot, enter this code
Anti-Spam Image