皆さんこんにちは、グレキチです。
まだ2月中旬ですが、直近のウェブ天気予報を見ていると、すごく寒い時期はもう過ぎ去ったような感じを受けます。昨日もランニングしていたら、梅の花が咲き始めていたのを見かけたので、待ち望んだ春の息吹が感じられてきました☺️
さて今回は、ベアメタルはちょっと置いておいて、以前紹介したMacでの仮想環境設定ツールであるUTMに関する新しいネタです。
ベアメタルもそうなんですが、最近もっぱら仮想環境のLinuxを使うことが多いため、その使い方の改善などにかなり興味を持ってしまいます。仮想環境で色々作業をしていると、たまに物理環境とファイルのやり取りをしたくなることがあります。クラウドに保存できるアカウントなどを持っている場合、ネット経由でそれを使ってファイルのやり取りは出来るのですが、毎回クラウドを開くのがちょっと面倒だなと思いました。そんな方のために、フォルダ共有という機能をUTMでは設定出来るようになっています。
こちらの公式ドキュメントにその設定方法について記載されてはいるのですが、説明が省略されているところがあり、ちょっと何言っているかわかんない、と思うことがいくつかあって設定にちょっと手間取りました。よって、公式ドキュメントの補足情報として私なりにもっとわかりやすく解説したものを、自身の備忘録も兼ねて、皆さんと共有しようと思ったのが今回の主旨です😃
ということで今回は、UTMでの共有フォルダ設定について紹介します。ちなみに、今回の対象OSはUbuntu(Linux)です。
それでは行ってみましょう!
UTMメイン画面でやること
仮想環境を立ち上げる前に、まずはUTMのメイン画面でやることを説明します。
(※仮想環境を立ち上げているとこの設定は出来ませんので、必ず停止している状態で行います)
それは、物理環境側の共有フォルダ紐付けの作業です。なおこの設定は、実際には仮想環境側の設定後に実施しても問題ありませんが、先に実施しておくことを推奨します。
それではまず、設定を追加したい仮想環境を左のタスクバー内から選択し、下図の通り、右上の設定ボタンを押して、設定画面を開きます。

設定ボタンを押すと下記のようにウィンドウが立ち上がります。

左のタスクバーから“共有”をクリックします。そうすると以下の画面に切り替わります。

ディレクトリ共有モードを設定するので、赤矢印部分のプルダウンメニューを開きます。

プルダウンには、“SPICE WebDAV”と“VirtFS”のいずれかが選べますが、今回は“VirtFS”を選択します。理由は、“SPICE WebDAV”での設定は、私が何度か試してもうまくいかなかったからです💦
(※なお、公式マニュアルには、 Linuxの場合はVirtFSの方が転送速度がより高速だと記載されてます。その点からもこちらを推奨します)
そして次は、物理環境側の共有ファルダへのパスを設定します。

右側の赤枠部の“選択”ボタンを押すと、フォルダ選択画面が立ち上がるので、設定したいフォルダを設定します。フォルダが選択できると、以下のように、空白だったパスのセル部分に名前が追加されます。

今回の例では、物理環境での共有フォルダ名は“UTM_share”としました。
最後に、右下の保存ボタンを押すのを忘れずに☝️
以上で、物理環境側の共有フォルダ設定は完了です。
仮想環境内でやること
次に仮想環境側の設定について説明します。
とその前に、注意すべきことが3点ほどあるので、それをお伝えしておきます。
①VirtFSと、MacOS用のVirtioFSとを混同しないように☝️
2つは別物で、今回設定するのは“VirtFS”の方です。一文字しか違わないので、ややこしいんですよね😝
②Driver一覧を確認した時に、“CONFIG_VIRTIO_RING”が見当たらなくても、気にしなくて良い
しかし、以下の4つのドライバーはVirtFSでは必須なので、インストール状況を一応確認すること。(通常はデフォルトでインストールされています)
・CONFIG_NET_9P ・CONFIG_NET_9P_VIRTIO ・CONFIG_9P_FS ・CONFIG_9P_FS_POSIX_ACL
ちなみにドライバの確認は、“grep VIRTIO /boot/config-$(uname -r)” などで出来ます。
③bindfsがインストールされているか事前に確認しておこう
これは、ディレクトリを別の’場所にマウントするためのソフトです。
もし、インストールされていない場合は、ターミナルから“sudo apt install bindfs”でインスト ールできます。
次に、設定前の状態を一度確認してみます。
確認には以下のコマンドを使います。
# ディレクトリのマウント確認コマンド
systemctl list-units --type=mountこれを実行すると下記のような内容が表示されます。まだファイルが共有出来てない状態ですね。

前準備が終わったので、それではここから、具体的なディレクトリ共有作業を始めていきます。
まずは、共有したいフォルダをルートディレクトリ内のどこかに作成します。今回の例では、“share”という名前のフォルダをルートの/mediaディレクトリ内に作成しました。(つまり、共有フォルダは、“/media/share”です)
次に、ルートディレクトリにある設定ファイルディレクトリ“/etc”の中に、“fstab”というファイルがあるので、このファイルをVimなどのエディタソフトで書き込みモードで開いて、以下の記述をファイル内の最下部に追記します。
# Share folder setting ※この行は説明コメントとして記載してます
share /media/share 9p trans=virtio,version=9p2000.L,rw,_netdev,nofail,auto 0 0なお、記入する際、フォルダ指定部分以外の内容については、上記参考例の内容そのままを記述して下さい。特に、”trans=〜auto”までのカンマ区切りの部分は必ず一続きで記載し、カンマの後などに間違ってスペースを設けたりしないように気をつけます。
記載してファイルの保存が終わったら、下記のコマンドを実行して、記載内容をシステムに反映させます。
# システム反映コマンド
sudo systemctl daemon-reload
sudo systemctl restart remote-fs.target # もし失敗したら、network-fs.targetに変更して再度無事にコマンドが実行出来たら、今一度マウント確認コマンドを使って状態を確認してみます。

黄色線で囲った部分を見ると、先ほど設定を実行した内容が反映されていることがわかります。なお、先ほどのファイルへの記述内容に1文字でも間違いがあると、この画面にはマウント結果が表示されません。その場合、どこか記載内容に間違いがあるはずなので、再度内容を確認してみて下さい。
無事にマウントできると、これで物理環境側のフォルダと一応は共有出来ています。一応という意味ですが、このままだと、物理環境側で共有フォルダに格納したデータやフォルダは仮想環境側から拾えますが、仮想環境側からはデータやフォルダが格納出来ず、物理環境側にデータなどを渡すことが出来ません。
これって不便だと思いませんか?どうせなら、双方向でデータのやり取りをしたいですよね?
ということで、以降では、双方向でのデータ入出力を可能にする設定について説明します。
双方向でのフォルダ共有設定
物理環境と仮想環境との双方向でのフォルダ共有設定にあたり、まずは“/home/(user)”のご自身のディレクトリ内に、好きな名前の共有用のフォルダを作成します。
今回私は、“utm_share”としました。(つまり、“/home/grekichi/utm_share”です。)
フォルダが作成出来たら、また“/etc/fstab”ファイルに設定内容を記述していきます。先ほど記載した内容の下部に、下記内容を記述します。まずは内容を確認してみて下さい。
# share folder setting
share /media/share 9p trans=virtio,version=9p2000.L,rw,_netdev,nofail,auto 0 0
# bindfs mount to remap UID/GID
/media/share /home/grekichi/utm_share fuse.bindfs map=502/1000:@20/@1000,x-systemd.requires=/media/share,_netdev,nofail,auto 0 0上の記述内容を見ると、 “map=”の記述の後に、502、1000、20、1000と数字が4つありますよね?この数字はUID(ユーザーID)およびGID(グループID)と言われるものの数字で、各々の数字の意味は、502(ホストUID)、1000(ゲストUID)と、20(ホストGID)、1000(ゲストGID)になります。
この数字が記載例の内容と、あなたの環境とで違っていないかどうかを確認しておく必要があります。もし違っていたら、確認した数字に書き換える必要があります。なお、実際の記載内容では、GIDの数字のみ接頭辞として“@”をつける必要があります。
UIDおよびGIDの確認方法は至って簡単で、各々の対象フォルダに宛てて、ターミナルで以下のコマンドを実行します。まずはルートディレクトリ側の確認です。
# ルートディレクトリの共有フォルダの確認 (*/media/shareは自身の設定内容に変更のこと)
ls -na /media/shareオプションコマンドは、“-na”なので注意して下さい。
私の環境で上のコマンドを実行すると下記の様になります。

記載例と同じく、502(UID)、20(GID) ですね。
次にホームディレクトリ側の確認を以下のコマンドで行います。
# ホームディレクトリの共有フォルダの確認
ls -na /home/grekichi/utm_share私の環境では、実行結果は以下の通りです。

こちらも記載例同様、1000(UID)、1000(GID) と同じです。
以上の様にして、ご自身の環境のUIDおよびGIDを確認し、正しい数字をファイルに記載する様にして下さい。
そして、fstabファイルへの記載が完了してファイルが保存出来たら、またシステム反映コマンドを使って内容を反映させます。コマンド反映が成功したら、マウント結果が下記のよう表示されます。

最初にマウントを追加した行の上に、今回の内容が反映されていることがわかります。
そして以下の通り、デスクトップのタスクバーに、自動的に共有フォルダへのショートカットが作成されていると思います。

念の為お伝えしておくと、物理環境側と双方向でデータのやり取りを行えるのは、こちらの/homeディレクトリ以下に設定したフォルダ(utm_share)のみです。
“/media/share”にも物理環境側で格納したファイルがutm_shareフォルダ同様に表示され、データを開いたり、仮想環境内の他のフォルダにコピーしたりは出来ます。しかし、データを削除したり、仮想環境内の他のフォルダからこのフォルダ(/media/share)へのデータ転送は出来ません(=物理環境へデータを送付出来ない)。混同しないように☝️
以上で、共有フォルダ設定は完了です。
それと、追加情報として1点お伝えしておきます。
勘の良い方は、「わざわざ“/media/share”を経由させずに、直接“/home/grekichi/utm_share”を最初の設定でフォルダ指定すればいいんじゃないか?🤔」と思われたかと思います。
私もそう思って試してみましたが、うまくいきませんでした💦
システム設定に関係する内容なので、こんな回りくどいことをしないといけないのかな!?😵っと思った次第です。以上、ご参考まで。
まとめ
サクッと記載しましたが、ご理解頂けましたでしょうか?
私の場合、物理環境で調べ物をしていて、Linuxで使いたいデータなどがあったら、ついクセでそのままダウンロードしたりするので、そんな時にこの設定をしておくと、結構便利なんですよね😄
ちなみに、UbuntuベースのKali linuxでも設定方法は同じでいけました👍
短い内容でしたが、今回は以上です。
それではまた🖐️
〆

