19장. 호스트와 가상 머신 간 파일 공유

호스트 시스템과 실행되는 VM(가상 머신) 간에 데이터를 공유해야 하는 경우가 많습니다. 이를 신속하고 효율적으로 수행하려면 시스템에 NFS 파일 공유를 설정할 수 있습니다. RHEL 9에서 새로 지원되는 기능은 virtiofs 파일 시스템을 사용하여 Linux VM과 데이터를 공유할 수도 있습니다.

19.1. NFS를 사용하여 호스트와 가상 시스템 간의 파일 공유

연결된 RHEL 9 호스트 시스템과 VM(가상 머신) 간의 효율적인 파일 공유를 위해 VM이 마운트하고 액세스할 수 있는 NFS 공유를 내보낼 수 있습니다. 그러나 Linux VM에서는 일반적으로 virtiofs 기능을 사용하는 것이 더 편리합니다.

사전 요구 사항

  • nfs-utils 패키지가 호스트에 설치되어 있습니다.

    # dnf install nfs-utils -y
  • VM과 공유할 디렉터리입니다. 기존 디렉터리를 공유하지 않으려면 새 디렉터리(예: shared-files )를 만듭니다.

    # mkdir shared-files
  • VM의 네트워크를 통해 호스트를 표시하고 연결할 수 있습니다. 일반적으로 VM이 NAT 및 가상 네트워크의 브리지 유형을 사용하여 연결된 경우입니다.
  • 선택 사항: 향상된 보안을 위해 VM이 NFS 버전 4 이상과 호환되는지 확인합니다.

절차

  1. 호스트에서 NFS(네트워크 파일 시스템)로 공유할 파일이 있는 디렉터리를 내보냅니다.

    1. 파일을 공유할 각 VM의 IP 주소를 가져옵니다. 다음 예제에서는 testguest1testguest2 의 IP를 가져옵니다.

      # virsh domifaddr testguest1
      Name       MAC address          Protocol     Address
      ----------------------------------------------------------------
      vnet0      52:53:00:84:57:90    ipv4         192.168.124.220/24
      
      # virsh domifaddr testguest2
      Name       MAC address          Protocol     Address
      ----------------------------------------------------------------
      vnet1      52:53:00:65:29:21    ipv4         192.168.124.17/24
    2. 호스트에서 /etc/exports 파일을 편집하고 공유할 디렉토리, 공유할 VM의 IP 및 공유 옵션이 포함된 행을 추가합니다.

      <shared_directory> <VM1-IP(options)> <VM2-IP(options)> [...]

      예를 들어 다음에서는 testguest1testguest2 를 사용하여 호스트의 /usr/local/shared-files 디렉터리를 공유하고 VM이 디렉터리의 콘텐츠를 편집할 수 있습니다.

      /usr/local/shared-files/ 192.168.124.220(rw,sync) 192.168.124.17(rw,sync)
      참고

      Windows VM과 디렉터리를 공유하려면 Windows NFS 클라이언트에 공유 디렉터리에 쓰기 권한이 있는지 확인해야 합니다. 간단한 방법은 /etc/exports 파일에서 all_squash,anonuid, anongid 옵션을 사용하는 것입니다.

      예를 들면 다음과 같습니다.

      /usr/local/shared-files/ 192.168.124.220(rw,sync,all_squash,anonuid=<directory-owner-UID>,anongid=<directory-owner-GID>)

      < directory-owner-UID > 및 < directory-owner-GID >는 호스트에서 공유 디렉터리를 소유한 로컬 사용자의 UID 및 GID입니다.

      NFS 클라이언트 권한 관리를 위한 다른 옵션을 살펴보려면 보안 NFS 가이드를 따르십시오.

    3. 업데이트된 파일 시스템을 내보냅니다.

      # exportfs -a
    4. nfs-server 서비스가 실행 중인지 확인합니다.

      # systemctl start nfs-server
    5. 호스트 시스템의 IP 주소를 가져옵니다. 이는 나중에 VM에 공유 디렉터리를 마운트하는 데 사용됩니다.

      # 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.168.124.1/24 brd 192.168.124.255 scope global virbr0
             valid_lft forever preferred_lft forever
      [...]

      관련 네트워크는 파일을 공유하는 VM에서 호스트에 연결하는 데 사용되는 네트워크입니다. 일반적으로 virbr0 입니다.

  2. /etc/exports 파일에 지정된 Linux VM에 공유 디렉터리를 마운트합니다.

    # mount 192.168.124.1:/usr/local/shared-files /mnt/host-share

    이 예제에서는 다음을 수행합니다.

    • 192.168.124.1 은 호스트의 IP 주소입니다.
    • /usr/local/shared-files 는 호스트에서 내보낸 디렉토리에 대한 파일 시스템 경로입니다.
    • /mnt/host-share 는 VM의 마운트 지점입니다. 마운트 지점이 빈 디렉토리여야 합니다.
  3. /etc/exports 파일에 지정된 Windows VM에 공유 디렉터리를 마운트하려면 다음을 수행합니다.

    1. 관리자로 PowerShell 쉘 프롬프트를 엽니다.
    2. NFS-Client 패키지를 설치합니다. 설치 명령은 Windows의 서버 및 데스크탑 버전에 따라 다릅니다.

      서버 버전의 Windows에서 다음을 수행합니다.

      # Install-WindowsFeature NFS-Client

      데스크탑 버전의 Windows에서 다음을 수행하십시오.

      # Enable-WindowsOptionalFeature -FeatureName ServicesForNFS-ClientOnly, ClientForNFS-Infrastructure -Online -NoRestart
    3. 호스트에서 내보낸 디렉터리를 Windows VM에 마운트합니다.

      # C:\Windows\system32\mount.exe -o anon \\192.168.124.1\usr\local\shared-files Z:

      이 예제에서는 다음을 수행합니다.

      • 192.168.124.1 은 호스트의 IP 주소입니다.
      • /usr/local/shared-files 는 호스트에서 내보낸 디렉토리에 대한 파일 시스템 경로입니다.
      • z: 마운트 지점으로 사용될 드라이브 문자입니다. 시스템에서 사용하지 않는 드라이브 문자를 선택해야 합니다.

검증

  • 호스트와 VM 간에 파일을 공유할 수 있는지 확인하려면 VM에서 공유 디렉터리의 콘텐츠를 나열합니다. 다음 예에서 < mount_point> 를 마운트된 공유 디렉터리의 파일 시스템 경로로 바꿉니다.

    $ ls <mount_point>
    shared-file1  shared-file2  shared-file3