interprism's blog

インタープリズム株式会社の開発者ブログです。

Windowsのジャンクションで複数ドライブをまとめて1つのドライブ的に使用する

この投稿は インタープリズム的「俺達私達の進捗を上げる25個前後のTips」 Advent Calendar 2015 - Qiitaの13日目 の記事です。

はじめに

この記事は使用しているOSがWindows7以降の方を対象としています。

Windowsでのフォルダへのリンク機能は、ジャンクション、ハードリンク、シンボリックリンクなどがあります。

これらのリンクはショートカットファイルとは違い、コマンドプロンプトやアプリケーションからリンク先のデータを通常のファイルやフォルダのように扱えます。

その中でも使いやすいジャンクションについて紹介します。

背景

仕事で使っているパソコンのストレージがCドライブ100GB、Dドライブ100GBの構成なんですが、

Dドライブの容量はたくさん残っているのにCドライブがかつかつになってしまい、なんとか容量を増やせないかと考えてたところにリンク機能に出会いました。

アプリケーションがデータを保存したり作業用フォルダとして使用しているけど、ユーザーからは場所を変更できない、それなのに容量をたくさん使っているというフォルダを

リンク機能を使えば別ドライブに移動することができます。

作成方法

ジャンクションはコマンドプロンプトで「mklink /j リンク ターゲット」を実行すれば作成できます。

ジャンクション作成の例(C:\Users\user\work\ へのリンクを C:\Users\user\work\link として作成)

C:\Users\user>cd work

C:\Users\user\work>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は FA7D-C115 です

 C:\Users\user\work のディレクトリ

2015/12/11  02:48    <DIR>          .
2015/12/11  02:48    <DIR>          ..
           0 個のファイル                   0 バイト
           2 個のディレクトリ  84,380,024,832 バイトの空き領域

C:\Users\user\work>mklink /j link C:\Users\user\work\
link <<===>> C:\Users\user\work\ のジャンクションが作成されました

C:\Users\user\work>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は FA7D-C115 です

 C:\Users\user\work のディレクトリ

2015/12/11  02:50    <DIR>          .
2015/12/11  02:50    <DIR>          ..
2015/12/11  02:50    <JUNCTION>     link [C:\Users\user\work\]
           0 個のファイル                   0 バイト
           3 個のディレクトリ  84,380,016,640 バイトの空き領域

C:\Users\user\work>

link という名前でジャンクションが作成されたのがわかると思います。

ちなみにエクスプローラーで見るとショートカットと同じように見えます。

f:id:interprism:20151211031547p:plain

コマンドプロンプトで表示するとショートカットは拡張子.lnkとなっています。

C:\Users\user\work>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は FA7D-C115 です

C:\Users\user\work のディレクトリ

2015/12/11  03:15    <DIR>          .
2015/12/11  03:15    <DIR>          ..
2015/12/11  02:50    <JUNCTION>     link [C:\Users\user\work\]
2015/12/11  03:15             1,166 link.lnk
           1 個のファイル               1,166 バイト
           3 個のディレクトリ  84,368,826,368 バイトの空き領域

C:\Users\user\work>

振る舞い

ショートカットを開いた場合とリンクを開いた場合ではフォルダのパスの扱いが異なります。

C:\Users\user\work\ へのショートカットを開いた場合は当然 C:\Users\user\work\ となりますが、ジャンクションの場合は違います。

パスの階層を維持したままリンク先へ移動するため、C:\Users\user\work\ の中身を表示しますが、 パスは C:\Users\user\work\link\ となります。(ジャンクション名がlinkの場合)

f:id:interprism:20151211032652p:plain

なので上記で作成した構成だとlinkを開き続けることができます。(パスが一定の長さを超えるとエラーになりますので注意して下さい)

f:id:interprism:20151211034409p:plain

使い方

冒頭の別ドライブへの移動方法を紹介します。(必ずしも安全な方法とは限りませんので実際にやる場合には注意して下さい)

まず、ジャンクションを作成するためには元のフォルダを別の場所に移動して元の場所に作成しなければなりません。 なので移動しても大丈夫か名前を変更してみます。

f:id:interprism:20151211043518p:plain

移動できない場合はエラーが出ます。

f:id:interprism:20151211043529p:plain

エラーが出た場合には使用しているアプリケーションを停止するか諦めましょう。

名前の変更が出来たら移動したい場所に移動、もしくはコピーします。

f:id:interprism:20151211043908p:plain

移動できたら元のフォルダ名でジャンクションを作成すれば完了です。

f:id:interprism:20151211044301p:plain

ジャンクションの削除、解除方法

作成したジャンクションの削除、解除方法はエクスプローラーから削除するか、 コマンドプロンプトのrmdirコマンドで削除、解除できます。 その際、リンク先のフォルダは消えないので注意して下さい。

ジャンクションのコピーと移動

ジャンクションをコピーすると通常のコピー同様に中身のファイルやフォルダをコピー先にコピーします。

移動の場合は通常と異なり、ジャンクションを残したままリンク先のフォルダの中身を移動先に移動します。 その際、リンク先の中身は移動するため空になります。

最後に

皆さんもストレージが切迫したきた際は不要ファイルを削除して解決すればベストですが、 それでも足りないという場合は検討してみてください。

インタープリズム的「俺達私達の進捗を上げる25個前後のTips」 Advent Calendar 2015 - Qiita14日目の記事

インタープリズムのページ

PAGE TOP