第20章 ホストとその仮想マシン間でのファイルの共有
ホストシステムと、そのホストが実行する仮想マシンとの間で、データを共有することが頻繁に必要になります。これを迅速かつ効率的に行うために、システムに NFS ファイル共有をセットアップできます。または、virtiofs
を使用して、Linux および Windows 仮想マシンとデータを共有することもできます。
20.1. NFS を使用してホストとその仮想マシン間でファイルを共有する
RHEL 9 ホストシステムと仮想マシンの間でファイルを効率的に共有するために、仮想マシンがマウントしてアクセスできる NFS 共有をエクスポートできます。
ただし、Linux VM では、通常、virtiofs
機能を使用する方が便利です。
前提条件
nfs-utils
パッケージがホストにインストールされている。# dnf install nfs-utils -y
-
NAT
またはbridge
タイプの仮想ネットワークが、ホストを仮想マシンに接続するように設定されている。 - オプション: セキュリティーを強化するには、仮想マシンが NFS バージョン 4 以降と互換性があることを確認します。
手順
ホストで、ネットワークファイルシステム (NFS) として共有するファイルを含むディレクトリーをエクスポートします。
既存のディレクトリーを仮想マシンと共有します。既存のディレクトリーを共有したくない場合は、新しいディレクトリーを作成します。
# mkdir shared-files
ホストからファイルを共有するために各仮想マシンの IP アドレスを取得します (例: testguest1 と testguest2)。
# virsh domifaddr testguest1 Name MAC address Protocol Address ---------------------------------------------------------------- vnet0 52:53:00:84:57:90 ipv4 192.0.2.2/24 # virsh domifaddr testguest2 Name MAC address Protocol Address ---------------------------------------------------------------- vnet1 52:53:00:65:29:21 ipv4 192.0.2.3/24
ホスト上の
/etc/exports
ファイルを編集し、共有するディレクトリー、共有する仮想マシンの IP、および追加のオプションを含む行を追加します。/home/<username>/Downloads/<shared_directory>/ <VM1-IP(options)> <VM2-IP(options)> ...
たとえば、以下は、testguest1 および testguest2 があるホストの
/usr/local/shared-files
ディレクトリーを共有し、仮想マシンがディレクトリーのコンテンツを編集できるようにします。/usr/local/shared-files/ 192.0.2.2(rw,sync) 192.0.2.3(rw,sync)
注記Windows の仮想マシンとディレクトリーを共有するには、Windows NFS クライアントに共有ディレクトリーへの書き込み権限があることを確認する必要があります。
/etc/exports
ファイルでは、all_squash
、anonuid
、およびanongid
オプションを使用できます。/usr/local/shared-files/ 192.0.2.2(rw,sync,all_squash,anonuid=<directory-owner-UID>,anongid=<directory-owner-GID>)
<directory-owner-UID> と <directory-owner-GID> は、ホスト上の共有ディレクトリーを所有するローカルユーザーの UID と GID です。
NFS クライアントの権限を管理するその他のオプションについては、NFS サービスの保護 ガイドに従ってください。
更新したファイルシステムをエクスポートします。
# exportfs -a
nfs-server
サービスを起動します。# systemctl start nfs-server
ホストシステムの IP アドレスを取得して、仮想マシンに共有ディレクトリーをマウントします。
# ip addr ... 5: virbr0: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:32:ff:a5 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global virbr0 valid_lft forever preferred_lft forever ...
関連するネットワークはホストと仮想マシンを接続してファイルを共有することに注意してください。通常、これは
virbr0
です。
/etc/exports
ファイルで指定されている Linux 仮想マシンに共有ディレクトリーをマウントします。# mount 192.0.2.1:/usr/local/shared-files /mnt/host-share
-
192.0.2.1
: ホストの IP アドレスです。 -
/usr/local/shared-files
: ホスト上のエクスポートされたディレクトリーへのファイルシステムパスです。 /mnt/host-share
: 仮想マシン上のマウントポイントです。注記マウントポイントは空のディレクトリーである必要があります。
-
/etc/exports
ファイルに指定されているように Windows 仮想マシンに共有ディレクトリーをマウントするには、次の手順を実行します。- 管理者として PowerShell シェルプロンプトを開きます。
Windows に
NFS-Client
パッケージをインストールします。サーバーバージョンにインストールするには、次のように入力します。
# Install-WindowsFeature NFS-Client
デスクトップバージョンにインストールするには、次のように入力します。
# Enable-WindowsOptionalFeature -FeatureName ServicesForNFS-ClientOnly, ClientForNFS-Infrastructure -Online -NoRestart
ホストによってエクスポートされたディレクトリーを Windows 仮想マシンにマウントします。
# C:\Windows\system32\mount.exe -o anon \\192.0.2.1\usr\local\shared-files Z:
この例では、以下が適用されます。
-
192.0.2.1
: ホストの IP アドレスです。 -
/usr/local/shared-files
: ホスト上のエクスポートされたディレクトリーへのファイルシステムパスです。 Z:
: マウントポイントのドライブ文字です。注記システムで使用されていないドライブ文字を選択する必要があります。
-
検証
ホストと仮想マシンの間でファイルを共有できるように、仮想マシン上の共有ディレクトリーの内容をリスト表示します。
$ ls <mount_point> shared-file1 shared-file2 shared-file3
この例では、<mount_point> を、マウントされた共有ディレクトリーへのファイルシステムパスに置き換えます。
関連情報