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