« 第21回 社会言語科学会研究大会 | メイン | 新学期,始まる »

mklinkでジャンクションを作る [utilities]

lifehackerlifehackerで紹介されていたドライブをフォルダにマウントするTipsをみていて結局どういうことなのか気になったので,いろいろと調べてみたらmklinkコマンドのフロントエンド解説だったということがわかりました.興味のない方にはなんのことだかさっぱりわからないエントリかもしれないので読み飛ばし推奨です.

以下で書いているのはWindows Vista Ultimateでの作業です.

tipsの概要―ドライブをフォルダにマウントする

おおまかな内容は,ポータブルドライブを任意のフォルダにマウントすることでドライブレターに左右されない利用を可能にするというもの.

手順は次のようになっています.

  1. [ファイル名を指定して実行]でdiskmgmt.mscと入力して"ディスクの管理"を起動する
  2. マウントしたいドライブを右クリックして[ドライブ文字とパスの変更]をクリック
  3. マウントポイントにする空のフォルダをフルパスで指定する (フォルダはあらかじめ作成しておく必要があります)
  4. [OK]をクリックすると指定したフォルダにドライブがマウントされる
手順の図解
ファイル名を指定して実行
パスの編集1
パスの編集2
エクスプローラ上の表示


マウントしたドライブは通常のフォルダと同じように扱うことができます.例で使ったK:\はC:\Users\UserName\Documents\hdd1でアクセスできるようになりました(もちろんK:\でもアクセスできます).ショートカットと違うのは単にリンクを張るだけでなく,ドライブの一部として使うことができる点.つまりドライブの容量が擬似的に拡張されているわけです.

tipsの手順で作ったのは結局何?

コマンドプロンプトを開いてcd C:\Users\{UserName}\Documents↵と入力,自分のドキュメントフォルダに移動します.{UserName}は自分のログイン名に合わせて読み替えてください.さらにdir↵と入力するとカレントフォルダにあるディレクトリの一覧が表示されます.

ディレクトリの一覧を表示させたところここでファイルの属性をみてみると,先ほど"ディスクの管理"で指定したフォルダが<JUNCTION>と表示されていることがわかります(フォルダ名の後に続いている[\??\Volume{半角英数文字列}\]はドライブごとに一意なGUID).ということでTipsで作ったのはジャンクションだったことがわかりました.

シンボリックリンクを作るmklinkコマンド

で,ようやくmklinkの話に入ります.mklinkはおおざっぱに言うと「ファイル/ディレクトリ間の関連付け」をするコマンドです.たとえばa.txtというテキストファイルとb.htmlというHTMLファイルを関連づけてa.txtの編集結果をb.htmlに反映できるようにするとか,そういうことができます.深い階層にあるファイルをマイドキュメントの適当なファイルと関連づけておけば,いちいち目的のファイルがある階層にアクセスしなくても編集作業ができるようになるという優れもの.ディレクトリのことで言うと,たとえば,コマンドプロンプトでdir /a \Users\{UserName}\と打ち込んでみると,マイドキュメントやスタートメニューといった項目がジャンクションになっていることがわかります.これのおかげで,何も考えなくてもユーザーフォルダからいろんな場所に移動できるわけです.

mklinkコマンドの使い方やオプションについては次の通り.

mklink [/D] | [/H] | [/J] "リンク" "ターゲット"
/D : ディレクトリのシンボリックリンクを作成する
/H : ハードリンクを作成する
/J : ディレクトリのジャンクションを作成する
リンク : シンボリックリンク名を指定する
ターゲット : リンクで指定したファイル/ディレクトリが参照するパスを指定する(相対パス or 絶対パス)

ファイルのシンボリックリンクを作りたいときはオプションをつけません.また"ディスクの管理"を経由して作ったときと違って"リンク"には新規のファイルかフォルダを指定しなければなりません(既にあるファイルやフォルダは指定できない)./D,/H,/Jは3つのうち1つだけを使うことができます.

tipsの解題をしたときにジャンクションということを書きましたが,オプションにある/Jスイッチが,まさにそのジャンクションを作るスイッチです.なので,これを使ってtipsでやっていた操作をすることができるはずですね.ということで試しにmklink /J "C:\Users\UserName\Documents\hdd1" "任意のドライブレター:\"↵とやってみます.mklinkは管理者としてでないと動かないので,実行するときには[スタートメニュー]→[すべてのプログラム]→[アクセサリ]→[コマンドプロンプト]を右クリック,[管理者として実行]します.すると問題なくジャンクションが作成されますが,先ほどと同じようにdirコマンドで属性を確認してみると<JUNCTION>  hdd1[任意のドライブレター:\]となっていると思います.これだとドライブレターとの関連づけなので,デバイスの取り外しなどでレターが変わってしまうとアウト.つまり<JUNCTION>  hdd1[\\?\Volume{GUID}\]となっている必要があるわけです.ではどうするかというと,mountvolコマンドを使って一意のGUIDを取得します.

mountvolコマンドでGUIDを取得してmklinkする

ドライブとGUIDの一覧コマンドプロンプトを開いてmountvol↵と入力すると,GUIDとドライブレターの一覧が表示されます.この中から目的のドライブを見つけたらGUIDをメモするか,ウィンドウタイトルを右クリックして[編集]→[範囲選択]で\??\Volume{GUID}\を選択後,再度[編集]→[コピー]しておきます.この作業が無事終わったら再度mklinkでジャンクションの作成にトライしてみます.打ち込むコマンドはmklink /J "C:\User\{UserName}\Documents\hdd1" "取得したGUID"↵です(リンク元については任意のフォルダなので適宜読み替えてください).今度は次のような画面になって,GUIDを使ったジャンクションが作られていることが確認できると思います.ジャンクションができた

tipsはmklinkのフロントエンド解説だった

というわけでdiskmgmt.mscやらmklinkやらmountvolやらたくさん出てきましたが,一連の確認作業を通して"ディスクの管理"はmklink(およびmountvol)のフロントエンドとして機能しているのだということがよくわかりました.

トラックバック (0)

このエントリーのトラックバックURL: http://dormouse.oops.jp/mtc/mt-tb.cgi/28

(スパム対策として当該エントリへのリンクが含まれないトラックバックを弾いています)

以下の一覧は、このエントリーを参照しています:  mklinkでジャンクションを作る

コメント (0)

コメントを投稿

(コメントは承認制をとっているため,公開されるまで時間がかかる場合があります)


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