vagrantでwindows側との共有フォルダへのシンボリックリンク作成に失敗するときの対応

Windows10
この記事は約5分で読めます。
スポンサーリンク

VirtualBox + vagrant での開発環境構築は、バージョンや構成の柔軟性が高く、重宝します。また、ホストOSへの共有フォルダを利用することにより、開発自体は、ホストOSであるWindows上で行って、実行は仮想マシン側で行うこともできます。

しかし、仮想マシン側でシンボリックリンクを作成する処理は、失敗してしまいます。そんな時、Windows側でシンボリックリンクを作ることで、対応可能な場合があります。この記事では、仮想マシン側で、共有フォルダへのシンボリックリンク作成に失敗したとき、windows側でシンボリックリンクを作成して対応する方法を説明します。

vagrantでwindows側との共有フォルダへのシンボリックリンク作成に失敗するときの対応

ホストOSがWindows、ゲストOSがLinuxの時にこういうシンボリックリンク作成の問題が発生することがあります。

そんな時、Windowsのコマンドプロンプト内蔵コマンドであるmklinkを使って、windows側からシンボリックリンクを作りましょう。下に手順を説明します。

手順1. コマンドプロンプトを管理者権限で起動する

リンクを作成するツールは、mklinkと言います。コマンドプロンプトの内蔵コマンドであるため、PowerShell や Git Bash などからは実行することができません。

また、mklink は管理者権限で実行する必要があるため、起動時に気を付けましょう。たとえ普段、PowerShell や Git Bashなど使っていたとしても、mklinkを実行するときだけは、コマンドプロンプトを起動しましょう。

スタートメニュー から、「Windowsシステムツール→コマンドプロンプト」を右クリックし、「その他→管理者として実行」をクリックします。

手順2. mklinkコマンドでリンクを作成する

mklinkコマンドの使い方

mklinkコマンドを引数なしで実行すると、ヘルプが表示されます。

 

フォルダのシンボリックリンクを作成するには、/D オプションを指定します。また、引数の順番は、「作成するリンクの名称」、「ターゲットとなる元フォルダ名」の順になります。

リンクの作成

下リストでは、フォルダ「test_org」へのシンボリックリンク「test_link1」を作成しています。

 

注意事項

絶対パスで指定するとvagrantからシンボリックリンクとみなされない

フルパスで指定すると、リンクの文字列が、「c:/パス」 というようになります。おそらくvagrantの中のlinuxでは、「/c/パス」でcドライブを指定しないとディレクトリ(=フォルダ)として認識できないからか、

シンボリックリンクがあるフォルダから見た相対パスで指定しましょう。

コマンドプロンプトでフルパス指定のシンボリックリンクを作成したときのふるまいを下に示します。下リストがコマンドプロンプトでリンク作成したところです。

コマンドプロンプトでは、フルパス指定したリンクが普通に使えます。

vagrant側でアクセスしてみると、フォルダへのリンクが、機能していません。

mklinkは元フォルダの指定が間違っていてもエラーにならない

mklinkの元フォルダの名前が間違っていても、エラーにならず、存在しないフォルダへのリンクを作ることができるので注意してください。

下リストは、存在しないtest_org2 という名前へのフォルダリンクを作成したときの作業ログです。エラー発生なく正常終了しています。

 

 

当然、存在しないフォルダへのリンクにはアクセスできません。

 

相対パスはシンボリックリンクから見たパスで指定

シンボリックリンクから見た相対パスで設定するように注意してください。コマンドを実行したフォルダから見たパスではありません。間違えていてもエラーにはなりませんので、間違えてても気づきにくいです。

下ログは、相対パスでサブディレクトリへのシンボリックリンクを作る例です。

仮想マシンのゲストOSからのアクセスチェック

vagrantのゲストOSから、 ls -lF コマンド で確認すると、見た目で有効なシンボリックリンクになっているかチェックできます。

下図のように、青色で表示されているのが、有効なシンボリックリンクです。フルパス指定したリンクや、存在しないフォルダへのリンクは、赤文字で表示されてます。

また、test_link1 の中にあるファイルの中身の表示もできてます。

 

スポンサーリンク

まとめ

vagrant の仮想マシンが Linux 、ホストOSがWindowsのとき、Windowsの共有フォルダ内に、仮想マシンからシンボリックリンクを張ることができません。

そんな時、Windows側のmklink というコマンドでシンボリックリンクを作ることができます。また、仮想マシンからもそのリンクへアクセスすることが可能です。

mklink は、コマンドプロンプトの内蔵コマンド、また、管理者権限が必要なので、mklinkを使うときは、コマンドプロンプトを管理者権限で起動するようにしましょう。また、相対パスで指定するように注意してください。

 

 

 

この記事が気に入ったら
いいね ! しよう

コメント