15時56分00秒 [ソフトウェア]
Cドライブに強制インストールされたファイルを別ドライブに移すには、シンボリックリンクを作成すると良い
莫大なデータファイルも一緒にCドライブに入れてしまう行儀の悪いインストーラに困る
ソフトウェアによっては、プログラムファイルとは別に大量のデータをインストールしようとするものがあります。
プログラムとデータそれぞれのインストール先を選択させてくれる行儀の良いインストーラなら問題ないのですが、何もかもを問答無用でCドライブにインストールしてしまうインストーラもあって、時々困ります。
PCのストレージ(HDDなりSSDなり)には定期的なバックアップが欠かせませんが、バックアップの望ましい頻度はデータの内容によって異なります。もちろんPC内の全部を毎日バックアップしても良いのですが、バックグラウンドで処理されるとはいえ無駄に時間がかかりますし、更新頻度が高ければ高いほど、昔のバージョンのデータをサルベージしにくくなりますから、(私は)内容に応じたバックアップ頻度を設定しておく方が良いと考えています。
というわけで、個人的には以下のような3段階のバックアップ頻度を用意しています。
- ①頻度[高]:自分で作成するデータ
- ②頻度[中]:システムファイル、ソフトウェア
- ③頻度[低]:ソフトウェアに付随するデータ、もはや更新しない古いデータ等
これらの内容に応じてバックアップ頻度を分けるには、それぞれを格納するドライブを分割しておく方が楽です。特にシステムドライブは、「ドライブイメージ」の形でパーティションを丸ごとバックアップしておく方が、トラブル発生時の復旧が早いですから。(というか、そういう形でバックアップしておかないとバックアップの意味が薄いでしょう。)
一般的なWindowsなら②はCドライブになりますから、例えば①をDドライブにして、③をEドライブにする、とかです。
ところが、ソフトウェアと同時に莫大なデータも一緒にCドライブにインストールしてしまうような(行儀の悪い)インストーラがあると、②の中に③も含んでしまって、②(=システムドライブ)のバックアップサイズが無駄に大きくなってしまう問題があります。
これがなかなか地味に困るのですよね。自分のPCなのに、自分の思い通りのバックアップ体制を作りにくくなってしまう点で。
そんなときに便利なのが、シンボリックリンクという仕組みです。
シンボリックリンクを使って、見かけ上の存在位置と、実際の存在位置を別にする
シンボリックリンクとは、簡単に言えば、「あるフォルダの実体を別のフォルダに移しながらも、OS上では元のフォルダに存在しているかのように見せかけられる仕組み」です。
※実際にはもう少し豊富な役割のある機能ですけども、ここではその解説が本題ではないのでざっくり上記のように理解して頂ければ良いと思います。。詳しくは「シンボリックリンク」でググって下さい。
この機能を使うと、「実際にはEドライブ上に存在するフォルダなのに、あたかもCドライブ上に存在するフォルダであるかのように見せる」というようなこともできます。
シンボリックリンクはWindowsでも作れる
シンボリックリンクをWindows上で作る方法は簡単で、「管理者権限付きのコマンドプロンプト」(※注)から、mklinkコマンドを以下の書式で実行するだけです。※ディレクトリ(フォルダ)のシンボリックリンクを作る場合
mklink /d リンク名 実体パス
たとえば今、カレントディレクトリが C:\Program Files\hogehoge\ のとき、
mklink /d sakura E:\storage\tomoyo
のようにコマンドを実行すると、「 E:\storage\tomoyo\ 」というフォルダが、「 C:\Program Files\hogehoge\sakura\ 」というパスでも見えるようになります。
実体はEドライブの方にあります。
※注:Windows PowerShellではmklinkコマンドは使えませんので、コマンドプロンプトを起動して下さい。その際、管理者権限付きのコマンドプロンプトを起動する必要がある点にも注意して下さい。
無駄なファイルをCドライブ内に置いておきたくないなら、フォルダごと別ドライブに移動してからシンボリックリンクを作成すると良い
Cドライブ内にやたらと無駄に大きなデータが含まれるフォルダが問答無用で作られてしまった場合には、以下の手順で操作すれば、そのフォルダだけを別のドライブに移せます。(ここでは例として待避先をEドライブとします。)
- Cドライブ内にある問題のフォルダを、そのままEドライブに移動する。
- Cドライブ内に、そのフォルダ名を使ってEドライブの移動先へシンボリックリンクを作成する。
このようにしておくと、Cドライブに大きなデータが格納されてしまうのを防げます。(大きなデータの存在1つ1つに対して手動で作業する必要がありますけども。)
例:筆まめの最近のバージョンは、問答無用でCドライブにイラストデータを入れてしまう仕様になったので、データだけEドライブに移動させた
私が長年愛用している宛名印刷ソフトの「筆まめ」は、CREO時代には(システムのインストール先とは別に)データのインストール先を尋ねてくれていたのですが、ソースネクスト製になってから(なのかどうかは分かりませんが最近のバージョンでは)問答無用でデータもCドライブにまとめて入れる仕様になってしまったようです。
インストール後に調べると "C:\Program Files (x86)\SOURCENEXT\Mamew31\Contents" フォルダに1.2GBくらいの画像データ等がインストールされていました。
そこで、このContentsフォルダだけを別ドライブ(Eドライブ)に移動させて、Cドライブにはシンボリックリンクを作成します。
以下の説明では、次のようなフォルダ間の移動を例にして説明します。
- 移動元フォルダ: C:\Program Files (x86)\SOURCENEXT\Mamew31\Contents
- 移動先フォルダ: E:\AppDataStorage\Mamew\Contents
▼1. Cドライブ内にある問題のフォルダを、そのままEドライブに移動する
まずは、「移動元フォルダ」をフォルダごと移動先に移動します。「コピー」ではなく「移動」です。
この時点では何の工夫も必要ないので、エクスプローラ上でフォルダをドラッグ&ドロップすれば良いでしょう。
▼2. コマンドプロンプトを管理者権限付きで起動する
次に、mklinkコマンドを使うために、コマンドプロンプトを管理者権限付きで起動します。
スタートメニュー内の「コマンドプロンプト」項目を右クリックして、「その他」→「管理者として実行」を選択するなどの方法で起動できます。そのほか、[Windowsキー]+[X]でメニューを出してから「コマンドプロンプト(管理者)」を選択する方法でも起動できますが。とにかく、管理者権限付きのコマンドプロンプトを起動します。Windows PowerShellではダメなので注意して下さい。(mklinkコマンドはコマンドプロンプトでないと使えないため。)
コマンドプロンプトのカレントディレクトリはどこでも構いませんが、「移動元フォルダ」が存在していた場所(親ディレクトリ)へ移動しておくと入力がちょっと楽だろうとは思います。
今回の例では、C:\Program Files (x86)\SOURCENEXT\Mamew31\Contents
を移動させたので、
コマンドプロンプトで、C:\Program Files (x86)\SOURCENEXT\Mamew31\
に移動しておきます。
C:\Users\Sakura>cd C:\Program Files (x86)\SOURCENEXT\Mamew31\ C:\Program Files (x86)\SOURCENEXT\Mamew31>
cd 移動先
で、カレントディレクトリを移動できます。
ドライブを変更する必要がある場合は、C:
でCドライブに移動できます。(元々Cドライブに居る場合はこのコマンドは不要です。)
▼3. Cドライブ内に、そのフォルダ名を使ってEドライブの移動先へシンボリックリンクを作成する
あとは、mklinkコマンドを使ってシンボリックリンクを作成するだけです。
コマンドの文法は先程も書きましたが、mklink /d (リンク名) (リンク先)
です。
- mklink
- /d :ディレクトリのシンボリックリンクを作成する指示
- (リンク名) :ここでは「 Contents 」(フルパスで書いても可)
- (リンク先) :ここでは「 E:\AppDataStorage\Mamew\Contents 」
なので、下記のように入力します。
C:\Program Files (x86)\SOURCENEXT\Mamew31>mklink /d Contents E:\AppDataStorage\Mamew\Contents Contents <<===>> E:\AppDataStorage\Mamew\Contents のシンボリック リンクが作成されました C:\Program Files (x86)\SOURCENEXT\Mamew31>
これで、シンボリックリンクが作成できました。
dirコマンドでディレクトリ(フォルダ)の中身を見ると、下記のようにディレクトリへのシンボリックリンクである「SYMLINKD」という表示とリンク先が見えます。
C:\Program Files (x86)\SOURCENEXT\Mamew31>dir ドライブ C のボリューム ラベルは Windows です ボリューム シリアル番号は 4B85-ACEA です C:\Program Files (x86)\SOURCENEXT\Mamew31 のディレクトリ 2020/12/22 19:51 <DIR> . 2020/12/22 19:51 <DIR> .. 2020/12/22 16:48 <DIR> AddInstall 2020/12/22 19:51 <SYMLINKD> Contents [E:\AppDataStorage\Mamew\Contents] 2020/06/11 18:31 126,792 ConvICF.dll 2020/06/11 18:33 89,416 ConvPrfsMamew.dll 2020/06/11 18:31 179,528 CreateQRCode3.dll 2019/06/27 14:35 1,699,920 Deactivate.exe 2020/06/11 18:31 118,600 DecodeQRCode6.dll 2020/12/22 16:48 <DIR> DefaultData 2020/06/19 11:14 234,392 ExtDBAutoImporter16.exe : : 中略 : : 2020/06/11 18:32 115,528 zlib_Win32_Release_v142.dll 128 個のファイル 181,868,114 バイト 16 個のディレクトリ 199,733,305,344 バイトの空き領域 C:\Program Files (x86)\SOURCENEXT\Mamew31>
これで、Cドライブ内にあったフォルダを、「Cドライブ内にあるように見せかけつつ」実体はEドライブに置くことができました。
巨大なデータファイル群をCドライブに入れられてしまったときなどに便利
ワープロソフトがインストールする素材データとか、葉書印刷ソフトがインストールする素材データなどは、いつでも製品DVD-ROMからインストールし直せるのでバックアップの必要性が乏しい割にサイズはとても大きいので、Cドライブにインストールするには向いていないのですよね。
あとは、ブラウザのキャッシュデータなんかもシステムドライブに入れておく必要性はありません。
そういうものを、別ドライブに待避させるためにこのシンボリックリンクを作成して移動する方法をよく使っています。