Windowsでフォルダに対するリンクを作成すると、フォルダ・ツリーを再構築したり、特定のフォルダを別ディスク上へ配置したりできる。フォルダに対するリンクを作成するには、linkdコマンドまたはmklinkコマンドを利用する。
対象OS:Windows 2000 / Windows XP / Windows Vista / Windows Server 2003 / Windows Server 2008
TIPS「ジャンクション機能を使ってディスク・ボリュームをマウントする」では、ジャンクション機能を使ってディスクのボリュームを(NTFS上の)任意のフォルダにマウントする方法を紹介した。この機能を利用すると、例えばC:\MNTフォルダの下に、D:\やE:\DATAといった別のボリューム(ドライブのルート)を「マウントする(ぶら下げる)」ことができる。ディスクの空き容量が不足した場合などに、特定のフォルダの下に別のボリュームを追加すれば、ディスク・フルになることを回避可能だ。
ジャンクション機能では、ボリュームだけでなく、フォルダもマウントできる。ただし上記のTIPSの方法ではフォルダをマウントすることはできず、リソースキットに含まれるlinkd.exeというツールが必要である。本TIPSでは、その方法について解説する。
なお、マウントする方法やOSのバージョンにより、いろいろと方法が異なるので、以下に表にまとめておく。
OS | ファイルへのハードリンク | フォルダへのリンク | ボリュームへのリンク | シンボリック・リンク |
---|---|---|---|---|
Windows 2000 | − | linkd | ディスク管理ツール | − |
Windows XP/ Windows Server 2003 |
fsutil | linkd | ディスク管理ツール/mountvol | − |
Windows Vista/ Windows Server 2008 |
fsutil/mklink | mklink | ディスク管理ツール/mountvol | mklink |
参考TIPS記事 | TIPS1 | TIPS2 | TIPS3 | TIPS4 |
OSバージョンとさまざまなリンク機能 Windows OSで利用可能なリンクは「ジャンクション機能(リパース・ポイント)」を使って実現されている(NTFS上にのみ作成可能)。その利用形態に応じてコマンドが分かれているが、Vistaのシンボリック・リンクが一番有用性が高いといえる。シンボリック・リンクでは、ディスクだけでなく、リモートの共有フォルダへもリンクを張ることができるからだ。なお「−」はその機能が利用できない(もしくはそのためのツールが利用できない)ことを表す。 *1 「ファイルへのハードリンク」は同一のファイルを指す別名リンク(同一ボリューム上に限る)、「フォルダへのリンク」は任意のフォルダ(リモートは不可)へのジャンクション、「ボリュームへのリンク」は任意のボリュームへのジャンクション、シンボリック・リンクは任意のファイル/フォルダ(リモートも可)へのリンクのことをそれぞれ表す。 *2 「ディスク管理ツール」は、[コンピュータの管理]にあるGUIの[ディスクの管理ツール]のこと。それ以外の英字はコマンド・プロンプト上で利用するコマンド名。fsutil、mountvol、mklinkは各OSの標準コマンド、linkdはリソースキット・ツールのコマンド。 *3 「参考TIPS記事」は、それぞれの解説TIPS記事へのリンク。 |
linkd.exeはリソースキット・ツールに含まれるコマンドである(入手方法についてはTIPS「Windows OS向けリソースキット・ツールを入手する」参照)。Windows 2000、Windows XP、Windows Server 2003ではこのコマンドを使ってフォルダへのリンクを作成する。引数なしでlinkdを実行すると使い方が表示される。
C:\>linkd
Links an NTFS directory to a target valid object name in Windows 2000.
LINKD Source [/D] Destination
Source - Displays the Windows 2000 name targeted by Source
Source Destination - Links source directory to Destination directory or a
Windows 2000 device or any valid Windows 2000 name
Source /D - Deletes Source, regardless of whether a link exists at
source
/? - Prints this help message
……(以下省略)……
linkdコマンドはフォルダへのリンクを作成するための専用コマンドであり、特に難しいオプションはない。linkdに続いてマウントするフォルダ名(NTFS上のフォルダ名)と、マウントのターゲットのフォルダ名を指定する。マウントするフォルダが存在していない場合は自動的に作成されるが、フォルダの内容が空でない場合は(何らかのファイルやサブフォルダが含まれていると)エラーとなる。またフォルダ名はASCII文字のみが使用でき、漢字やひらがななどが含まれていると、やはりエラーとなる。
マウントのターゲットは、ローカル・コンピュータの上の任意のフォルダが指定できるが(リムーバブル・デバイスでも可)、リモートの共有フォルダを指定することはできない。
C:\Project>linkd project1 d:\Prj\Data1 ……別ドライブ上のフォルダへのリンク
Link created at: project1
C:\Project>linkd flop a:\ ……フロッピー・ドライブへのリンク
Link created at: flop
C:\Project>dir ……作成したリンクの確認
ドライブ C のボリューム ラベルは NTFSVOL です
ボリューム シリアル番号は 2C40-9E2B です
C:\Project のディレクトリ
2008/02/26 11:24 <DIR> .
2008/02/26 11:24 <DIR> ..
2008/02/26 11:24 <JUNCTION> flop ……作成されたジャンクション1
2008/02/26 11:24 <JUNCTION> project1 ……作成されたジャンクション2
0 個のファイル 0 バイト
4 個のディレクトリ 15,562,993,664 バイトの空き領域
C:\Project>linkd project1 ……リンクの確認
Source project1 is linked to
d:\Prj\Data1 ……リンク先フォルダ
C:\Project>linkd flop /d ……リンクの削除
The delete operation succeeded.
C:\Project>
属性が「<JUNCTION>」となっているのが、作成したフォルダへのリンク(ジャンクション)である。リンク先を確認するには、上のように、引数にリンク先のフォルダ名だけを指定すればよい。
リンクを削除するには、リンク名に続けて/dオプションを指定すればよい。
Windows Vista/Windows Server 2008では、OS標準のmklinkコマンド(コマンド・プロンプトの内部コマンド)でフォルダへのリンクの作成や削除が行える。引数の順番は上のlinkdコマンドと同じである。
C:\>mklink ……引数なしだとヘルプが表示される
シンボリック リンクを作成します。
MKLINK [[/D] | [/H] | [/J]] リンク ターゲット
/D ディレクトリのシンボリック リンクを作成します。既定では、
ファイルのシンボリック リンクが作成されます。
/H シンボリック リンクではなく、ハード リンクを作成します。
/J ディレクトリ ジャンクションを作成します。
リンク 新しいシンボリック リンク名を指定します。
ターゲット 新しいリンクが参照するパス (相対または絶対)
を指定します。
ディレクトリに対するジャンクションの作成オプションは「/D」と「/J」の2つがあるが、/Jがフォルダへのリンク(ジャンクション)を作成するためのオプションである。/Dはフォルダへのシンボリック・リンクを作成するオプションであり、こちらの方がより高機能である(詳細はTIPS「Windows Vista/Windows Server 2008でシンボリック・リンクを作成する」参照)。linkdコマンドと同様、新しく作成されるフォルダ(第1引数のフォルダ名)は、空のフォルダか、もしくは存在していないフォルダでなければならない。なおこのコマンドを実行するためにには、管理者権限のあるコマンド・プロンプト上で作業を行う必要がある(TIPS「Windows Vistaでプログラムを管理者モードで実行する」参照)。
C:\Project2>mklink /j prj_j d:\Data\Prj3 ……フォルダへのリンクの作成
prj_j <<===>> d:\Data\Prj3 のジャンクションが作成されました
C:\Project2>mklink /d prj_d d:\Data\Prj3 ……(参考)フォルダへのシンボリック・リンクの作成
prj_d <<===>> d:\Data\Prj3 のシンボリック リンクが作成されました
C:\Project2>mklink /j flp a:\ ……フロッピー・ドライブへのリンク
flp <<===>> a:\ のジャンクションが作成されました
C:\Project2>dir ……作成されたジャンクションの確認
ドライブ C のボリューム ラベルは WINDOWSVISTA です
ボリューム シリアル番号は FC43-2DF1 です
C:\Project2 のディレクトリ
2008/02/26 11:49 <DIR> .
2008/02/26 11:49 <DIR> ..
2008/02/26 11:49 <JUNCTION> flp [a:\] ……ジャンクション1
2008/02/26 11:49 <SYMLINKD> prj_d [d:\Data\Prj3] ……ジャンクション2
2008/02/26 11:49 <JUNCTION> prj_j [d:\Data\Prj3] ……ジャンクション3
0 個のファイル 0 バイト
5 個のディレクトリ 11,827,503,104 バイトの空き領域
C:\Project2>rd prj_j ……ジャンクションの削除
C:\Project2>
ここでフォルダへのリンク(ジャンクション1と3)だけでなく、フォルダへのシンボリック・リンク(ジャンクション2)も作成している。それぞれ属性が「<JUNCTION>」「<SYMLINKD>」となっていることが分かるだろう。
リンクを削除するには、単にrdコマンド(フォルダを削除するコマンド)を実行すればよい。
■更新履歴
【2013/01/31】mklinkコマンドのことを「mklink.exe」すなわち外部コマンドとして表記していましたが、mklinkはコマンド・プロンプトの内部コマンドでした。そこで「mklink.exe」を「mklink」に修正し、内部コマンドであることを追記しました。以上、お詫びして訂正いたします。
【2008/02/29】初版公開。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.