2006 年 10 月 26 日 23 時 59 分

ボリュームマウントポイント


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


[写真]


Windows 2000 以降は、管理ツール「ディスクの管理」の、
「ドライブ文字とパスの変更」メニューより、
ボリュームに割り当てるドライブ名を変更可能だ。

この画面では、ドライブの追加や削除ができる。
ボリュームには、ドライブを割り当てるのは任意であるが、
割り当てる場合は最大 1 つのドライブ名しか指定できない。

どうしても複数のドライブ名を割り当てたい場合は、
割り当てたドライブのルートディレクトリに対して
subst することで仮想ドライブを作ることが可能である。

さて、このダイアログを見てみると。
ドライブ文字と「パスの変更」と書いてある。

実は、ボリュームには、ドライブ名以外に、
任意のパスをボリュームに割り当てることもできるのだ。
これを、ボリュームマウントポイント機能と呼ぶ。

subst は任意のフォルダをドライブに割り当てる機能だが、
ボリュームマウントポイントは、ボリューム(ドライブ)を
任意のディレクトリに割り当てることができる機能である。
これは UNIX のマウント機能に非常に良く似ている。
MS-DOS な人には、JOIN と言えば分かるだろうか。

これは、Windows 2000 以降で搭載された、
NTFS (v3) が持つ新しいリンク機能である。
マウント先は NTFS 上のディレクトリである必要があるが、
そのリンク先はハードディスクに限らず自由である。

ボリュームマウントポイントの操作は、
管理ツール「ディスクの管理」以外にも、
mountvol コマンドを使う方法がある。

では、mountvol コマンドで割り当て状態を見てみよう。
mountvol を引数なしで実行すると一覧が出る。

> mountvol

========== mountvol output ==========
(……先頭部分は省略……)

    \\?\Volume{2c4c2620-c203-11d9-a821-806d6172696f}\
        C:\
        D:\mnt\system\
        C:\vfsroot\mnt\system\

    \\?\Volume{ed3cc010-cb79-11d9-af26-001125868411}\
        D:\
        C:\vfsroot\
        D:\mnt\system\vfsroot\

    \\?\Volume{b195a0d2-a08e-11da-b029-00054e4e9464}\
        Q:\

    \\?\Volume{f08e7d20-64f1-11db-b10d-001125868411}\
        D:\mnt\cdrom\
        C:\vfsroot\mnt\cdrom\
        D:\mnt\system\vfsroot\mnt\cdrom\

========== end of mountvol output ==========

\\?\Volume で始まるのはボリュームパスであり
後ろに続く {} 内の値がボリューム識別子である。

この例の場合、4 つのボリュームがあり、
上の 2 つはハードディスクのパーティション、
下の 2 つは CD-ROM ドライブである。

最初のボリュームは、C ドライブが割り当てられている他に、
D:\mnt\system\ にマウントされている。
また、次のボリュームは、D ドライブ以外に、
C:\vfsroot\ にマウントされている。

3 つめのボリュームは、Q ドライブが割り当てられている。
これはただの CD-ROM ドライブだ。

最後のボリュームは、ドライブを割り当てていないが、
D:\mnt\cdrom\ にマウントしているため、
ドライブがなくともこのパスでアクセスすることができる。

以前、シェルのフォルダリンクを紹介したが、
この機能でリンクしたフォルダを開くと、
アドレスバーのパスは、リンク先のものに変わってしまった。
つまり「見た目だけツリーに表示する」だけであった。

それに比べ、ボリュームマウントポイント機能は、
実際に NTFS ドライバがパスを処理するため、
マウントされたパスを使ってアクセスすることができる。
もちろん、プログラムからも利用可能である。

この例では D:\mnt\system\ に C:\ がマウントされているため、
WINDOWS フォルダに、D:\mnt\system\WINDOWS\ として
アクセスすることができる。

また、C:\vfsroot\ が D:\ と同じであるため、
C:\vfsroot\mnt\system\ は C:\ であり、
D:\mnt\system\vfsroot は D: であり、
C:\vfsroot\mnt\system\vfsroot\ は D: であり、
D:\mnt\system\vfsroot\mnt\system\ は C: である(笑)

この場合、双方で再帰的にパスを辿ることができるので、
無限に続く長いパスでアクセスすることができる。
これらは NTFS のドライバで処理されてるので、
プログラムでは意識する必要がない。

ボリュームマウントポイントの大きな利点は、
ディスク容量が不足したドライブを救済できることだ。

ドライブの一部のディレクトリの中身を、
別のドライブ(ボリューム)に移し、
そのドライブを元のディレクトリにマウントすれば、
元のドライブの空き容量を増やすことができる。

また、ユーザプロファイルの格納された、
C:\Documents and Settings フォルダを、
D ドライブに移動してマウントして運用すれば、
元の C ドライブではユーザプロファイルの容量を
気にすることなく運用することができる。

また、アクセス頻度が高いユーザプロファイルを、
システムドライブと分離するので、
ディスクのアクセス効率も最適化することができる。

ボリュームマウントポイントにはこのような使い方があるのだ。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.