seraphyの日記

日記というよりは過去を振り返るときのための単なる備忘録

Transactional NTFS!

Vista1の新しいコマンド

Vistaの新しいコマンドラインツールを見ていたら、
Transactionというコマンドが増えていた。
ファイルトランザクションである。

これは、なかなか興味深い!

cmd.exeを2つ立ち上げる。

transaction /start 
echo hello1 > a.txt 
type a.txt 

とやると、当然、hello1と表示される。

しかし、まだ、この段階ではもう一方のcmd.exeでは見れていない状況にある。

transaction /commit 

とやると、ようやく一方にも見えるようになる。

再度、

transaction /start 
echo hello2 > a.txt 

とやってから、もう一方のウィンドウで

transaction /start 
echo hello3 > a.txt 

とやると、

「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」 

となる。

ちなみに、コマンドプロンプトロールバックをせずに画面を閉じると、勝手にロールバック扱いになっている。

明示的にトランザクションを開始しないと、即時コミットと同じ扱いと考えてよいようだ。

ただ、厳密にトランザクショナルかというと、実際は厳密には読み取り一貫性がない。

トランザクションを開始して一度ファイルを読み込んでも、別のトランザクションがファイルを書き込んでコミットすると、そのコミットされた内容が読めてしまうのだ。

仕組みとして、XP以降でサポートされたスナップショットと、NTFSがもともともっていたジャーナルの機能とファイルの厳密なロックの組み合わせで実現しているのか、とか考えたが、スナップショットを使っているわけではなさそう。

便利だと思うのだが、実際に使うには、この挙動について、もう少し調べたほうがよさそう。 *1

シンボリックリンク

あとmklinkシンボリックリンクが正式にコマンドとしてサポートされた。
Documents And Settingsという長ったらしい名前のフォルダがW2K以降の標準のユーザプロファイル格納場所だったが、これがUsersにリネームされた。
そして、これに対するシンボリックリンクがDocuments And Settingsに張られている。それ以外にも、随所にシンボリックリンクをはっている模様。
もう、使いまくってくれ、といわんばかり。

で、じゃあ、オレも試しに、とやってみたら…。
特権を保有してないとか言われて、動かなかったですヨ。orz

ローカルシステムポリシーとかで設定が必要なのしから?

でも、「ジャンクション」なら作成できました。
つーか、オレの理解では、フォルダに対するシンボリックリンクNTFSではジャンクションだと思っていたのだが、そうじゃないのか?
コマンドのヘルプを見ると、/D でディレクトリに対するシンボリックリンクを作成します、と書いてあるんだけど…。
別のオプションに /J でジャンクションを作成する、とある。

わからない…、これは旧来のNTFSの機能ではなく、新しいフューチャなのか!

関係ないけど、ゴミ箱も…

関係ないけど、あとゴミ箱を使っていると、リサイクルビン(ゴミ箱)用の隠しフォルダが、あちこちにいたるところに出現してくる。(そして、いつのまにか勝手に消えている。)
エクスプローラのオプションでシステムの隠しファイルを含めてすべて表示させていないとわからないかもしれないが、ゴミ箱の挙動や仕組みが変わったことは確実みたいな。

*1:Vista RC1/RC2で、このトランザクションコマンドはなくなってしまいました!!