マルチブート環境におけるシンボリックリンクを用いたAppデータ共有
マルチブート環境において、シンボリックリンクを用いてアプリケーションデータを共有しようという試み。
マルチブート環境とは、1台のPCに複数のOSをインストールして排他的に使用できる環境ことです。
通常、アプリケーションソフトを使うには、マルチブート環境の場合はそれぞれの環境でインストール作業を行う必要があります。もちろん、アプリケーションの設定データはそれぞれの環境に別々に保存されます。これはたいていの場合はそれほど問題になりませんが、例えばPCゲームの場合はセーブデータファイルをコピーしたりという作業が面倒になります。そこで、アプリケーションデータをシンボリックリンクを使ってデータのファイルを共有させようと思います。(共有というよりは、アプリケーションデータの場所をだますように設定します。)
○シンボリックリンクとは
→ シンボリックリンクとは【symbolic link】 - 意味/解説/説明/定義 : IT用語辞典
シンボリックリンクはWindows Vista以降で使用できます。また標準で存在するMKLINKコマンドを使ってシンボリックリンクを作成できます。
シンボリックリンクではありませんが、これと似た機能を持つ「ジャンクション」がWindows Vista以降のユーザーフォルダーに使われています。これはおそらくXP以前のソフトウェアと互換性を保つためのものだと思います。
○シンボリックリンクを作る上での注意点
- ファイルシステムはNTFSでなければならない。
→ シンボリックリンクを作るには、そのドライブのファイルシステムがNTFSでなければなりません。 - シンボリックリンクを作る必要性があるのか。
→ 初期設定だけを済ませればいいようなアプリケーションのデータにシンボリックリンクを作るべきではありません。シンボリックリンクでデータを共有させると管理が複雑になるので、多用は避けるべきです。 - アプリケーションの設定でデータの保存先を変えられるのなら、そちらを優先。
→ アプリケーションによっては設定データの保存先を変えるオプションが存在することがあります。例えばメールソフトのMicrosoft Outlookでは読み込むメールデータファイルを追加・変更することができます。設定の保存先を変えてアプリケーションデータを共有できるのなら、シンボリックリンクを作るよりもそちらの方法を優先したほうがいいでしょう。
→ マルチブート環境でメールデータを共有する [MS Outlook] - データを共用して問題がないのか。
→ 保存されるデータに環境依存の情報が含まれていないでしょうか。例えばほかの場所に作成したデータが必要になる場合、そのデータをディレクトリ構成を変えずにコピー・配置する必要があるかもしれません。 - アプリケーションのバージョンは同じか。
→ アプリケーションのバージョンによって情報の形式が異なる場合があります。違うバージョン同士のアプリケーションでアプリケーションデータを共有させるべきではありません。 - 原本データを管理(把握)できるか。
→ シンボリックリンクを作っていたことを忘れて、原本データがコピーされたものと勘違いして削除してしまうことがないか。何かの拍子に削除されてしまうことがないか、注意する必要があります。
○アプリケーションの設定データの保存先
- レジストリ
- 各ユーザーのドキュメントフォルダー(C:\Users\[ユーザー名]\Documents)
- 各ユーザーのAppData(C:\Users\[ユーザー名]\Documents\AppData\Roaming)
- アプリケーションと同じフォルダーの中
ほとんどの市販ビジネスソフトはレジストリに設定情報を保存します。PCゲームやフリーソフトはそれ以外の場所にファイルとして設定情報を保存します。シンボリックリンクで共有できるのは、ファイルとして設定情報が保存されている場合のみです。
○方法
今回は別のドライブにあるWindowsにインストールしたファルコムの「ぐるみん」(PCゲーム)のセーブデータにシンボリックリンクを作ってみます。
1. アプリケーションの設定データの保存先を探す。
シンボリックリンクはファイルまたはディレクトリで作ることができます。どちらでシンボリックリンクを作るか検討しておきます。
2. シンボリックリンクを置く側のファイルを削除しておく。
アプリケーションを一度でも起動すると設定ファイルが作られてしまう場合があるので、シンボリックリンクを置く側に既に設定ファイルが存在する場合はそれを削除します。
3. シンボリックリンクを作る。
本来の設定データの保存先にシンボリックリンクを作るための作業をします。
まずコマンドプロンプトを管理者権限で起動します。
「cd %appdata%\FALCOM」でカレントディレクトリがC:\Users\UserName\Appdata\Roaming\FALCOMに移動します。
共有したいデータがDドライブにあるとすると、
「mklink /d GURUMIN D:\Users\UserName\AppData\Roaming\FALCOM\GURUMIN」を実行します。
C:\Users\UserName\AppData\Roaming\FALCOM>mklink /d GURUMIN D:\Users\UserName\AppData\Roa ming\FALCOM\GURUMIN GURUMIN <<===>> D:\Users\UserName\AppData\Roaming\FALCOM\GURUMIN のシンボリック リン クが作成されました C:\Users\UserName\AppData\Roaming\FALCOM>
これによって、GURUMINという名前のディレクトリのシンボリックリンクが作成されます。例えば、アプリケーションがC:\Users\UserName\Appdata\Roaming\FALCOM\system.savというファイルにアクセスすると、実際にはD:\Users\UserName\AppData\Roaming\FALCOM\GURUMIN\system.savにアクセスしたことになります。
「DIR」コマンドを実行すると、シンボリックリンクの所在を確認することができます。
2012/12/06 23:58 <SYMLINKD> FALCOM [D:\Users\UserName\AppData\Roaming\FALCO M\GURUMIN]
試しにぐるみんを起動してみます。
シンボリックリンクを作る前
シンボリックリンクを作った後
シンボリックリンクを作ったことで、別の場所にあるセーブデータを読み込むようになりました。もちろん、セーブデータをコピーしたわけではありません。
シンボリックリンクをエクスプローラーから見た場合はこうなります。
アイコンはショートカットと同じものになっていますが、種類は「ファイルフォルダー」になっています。これがシンボリックリンクであることの説明はなく、エクスプローラーで確実に判断することはできません。
○シンボリックリンクの代わりにジャンクションを使う
ジャンクションはUNCパス(\\Computer1\Shared Folderなど)や相対パスが使えないことを除けば、シンボリックリンクと同等です。シンボリックリンクはWindows Vista以降でないと使えませんが、ジャンクションはWindows 2000/XPでも使えます。(ただしWindows 2000/XPにはジャンクションを作成するプログラムがないため、→Junctionなどのソフトを別途用意する必要があります。)
Windows Vista以降でジャンクションを作成するには、MKLINKコマンドでJスイッチを使います。
C:\Users\UserName\AppData\Roaming\FALCOM>mklink /j GURUMIN D:\Users\UserName\AppData\Roa ming\FALCOM\GURUMIN GURUMIN <<===>> D:\Users\UserName\AppData\Roaming\FALCOM\GURUMIN のジャンクションが 作成されました C:\Users\UserName\AppData\Roaming\FALCOM>
同じく「DIR」コマンドを実行すると、ジャンクションの所在を確認することができます。
2012/12/06 23:58 <JUNCTION> FALCOM [D:\Users\UserName\AppData\Roaming\FALCO M\GURUMIN]
○シンボリックリンク・ジャンクションを削除する。
ディレクトリのシンボリックリンクやジャンクションをそのままDELコマンドで削除すると、リンク先のデータがすべて削除されてしまいます。ディレクトリのシンボリックリンクを削除するにはRD(RMDIR)コマンド(ディレクトリを削除するコマンド)を使います。
C:\Users\UserName\AppData\Roaming\FALCOM>rd GURUMIN
これでリンク先のファイルを削除せずにシンボリックリンク・ジャンクションだけを削除できます。