Post

QEMU/KVM 공유 폴더(Virtio-FS) 부팅 시 자동 마운트 설정 (Cockpit 기준)

QEMU/KVM 공유 폴더(Virtio-FS) 부팅 시 자동 마운트 설정 (Cockpit 기준)

참고: 이 게시물은 AI의 도움을 받아 작성되었습니다. 하지만 여기에 제시된 해결 방법은 블로그 운영자가 직접 겪은 문제를 해결한 실제 경험에 바탕을 두고 있습니다. AI를 활용하여 정보를 신속하고 효과적으로 전달하되, 모든 내용은 운영자가 직접 검수하였음을 알려드립니다.

개요

이전 게시물에서 virtiofsd 문제를 해결하고 Virtio-FS를 이용한 호스트-게스트 간 폴더 공유에 성공했습니다. 하지만 가상 머신을 재부팅할 때마다 수동으로 mount 명령어를 실행하는 것은 번거로운 일입니다.

이번 게시물에서는 Cockpit 웹 인터페이스를 기준으로, 게스트 운영체제(Ubuntu Server 24.04)가 부팅될 때 호스트와 공유된 Virtio-FS 폴더를 자동으로 마운트하도록 설정하는 방법을 다룹니다.

목표: 호스트의 공유 폴더를 게스트의 특정 경로에 부팅 시 자동으로 마운트하기

1단계: Cockpit에서 공유 설정 확인 및 마운트 태그 찾기

자동 마운트를 설정하려면 게스트의 /etc/fstab 파일에 마운트 태그(Mount Tag)를 지정해야 합니다. 이 마운트 태그는 호스트에서 공유 폴더를 설정할 때 지정한 값입니다. 이미 공유 설정이 완료되었다고 가정하고, Cockpit에서 이 마운트 태그를 확인하는 방법을 안내합니다.

  1. Cockpit에서 가상 머신을 선택하여 상세 페이지로 들어간 후, 페이지를 가장 아래로 스크롤합니다.
  2. ‘Shared directories’ 메뉴를 찾습니다.
  3. 이미 설정된 공유 폴더 목록이 보일 것입니다. 여기서 자동 마운트하려는 공유 폴더의 ‘Mount tag’ 값을 확인하고 기록해 둡니다. (예: my_share)

만약 아직 공유 폴더를 설정하지 않았다면, ‘Add shared directory’ 버튼을 눌러 새 공유를 추가할 수 있습니다. ‘Source path’에 호스트 경로를, ‘Mount tag’에 원하는 태그를 입력하고 저장하면 됩니다.

참고: virt-manager (GUI)나 virsh (CLI) 같은 다른 도구를 사용해서도 동일한 설정을 확인하거나 변경할 수 있습니다. virt-manager에서는 가상 머신 하드웨어 세부 정보의 ‘파일 시스템’ 항목에서, virsh로는 virsh edit 명령으로 가상 머신의 XML 설정에 있는 <filesystem> 요소에서 마운트 태그를 찾을 수 있습니다.

2단계: 게스트에서 수동 마운트 테스트

자동 마운트를 설정하기 전에, 게스트 운영체제 안에서 해당 공유 폴더가 수동으로 정상 마운트되는지 확인하는 것이 좋습니다. 이 과정은 설정이 올바른지 검증하는 단계입니다.

Virtio-FS 마운트는 게스트 안의 특정 경로(마운트 포인트)에 연결되는 구조이므로, 마운트할 위치에 디렉터리가 미리 존재해야 합니다.

  • 호스트의 폴더 (예: /home/user/share): 실제 파일이 들어있는 원본 위치입니다.
  • 게스트의 폴더 (예: /mnt/share): 호스트 폴더의 내용이 보여질, 즉 연결될 위치(마운트 포인트)입니다.

sudo mount -t virtiofs shared_dir /mnt/share 명령은 “shared_dir이라는 virtiofs 장치를 /mnt/share 디렉터리에 붙여라”는 의미입니다. 따라서 /mnt/share라는 빈 디렉터리가 미리 준비되어 있어야 합니다.

  1. 게스트 가상 머신에 접속하여 마운트 포인트로 사용할 디렉터리를 생성합니다.
    1
    
    sudo mkdir -p /mnt/host_share
    
  2. mount 명령어를 사용하여 수동으로 마운트합니다. 이때, 1단계에서 확인한 마운트 태그를 사용합니다.
    1
    2
    
    # mount -t [파일시스템타입] [마운트태그] [마운트포인트]
    sudo mount -t virtiofs my_share /mnt/host_share
    
  3. 마운트가 성공했는지 확인합니다.
    1
    
    ls -l /mnt/host_share
    

    위 명령어를 실행했을 때 호스트의 공유 폴더 내용이 보인다면 성공입니다.

3단계: /etc/fstab을 이용한 자동 마운트 설정

수동 마운트가 성공했다면, 이제 부팅 시 자동으로 마운트되도록 /etc/fstab 파일에 해당 정보를 등록합니다.

  1. 게스트에서 /etc/fstab 파일을 엽니다.
    1
    
    sudo nano /etc/fstab
    
  2. 파일의 맨 아래에 다음 줄을 추가합니다.
    # [마운트태그] [마운트포인트] [파일시스템타입] [옵션] [덤프] [체크]
    my_share    /mnt/host_share   virtiofs    defaults,_netdev  0  0
    
    • my_share: 1단계에서 확인한 마운트 태그입니다.
    • /mnt/host_share: 마운트될 게스트 내의 경로입니다.
    • virtiofs: 파일 시스템 타입입니다.
    • defaults: 대부분의 파일 시스템에 적용되는 기본 옵션입니다 (rw, suid, dev, exec, auto, nouser, async).
    • _netdev: 이 옵션이 매우 중요합니다. 결론부터 말하면, Virtio-FS는 네트워크를 사용하지 않습니다. 이 옵션은 부팅 순서 문제를 해결하기 위한 일종의 ‘안전장치’입니다.

      Virtio-FS는 NFS나 SMB처럼 네트워크를 통해 파일을 공유하는 방식이 아니라, 호스트와 게스트가 메모리 영역을 직접 공유하여 통신하는 고속 로컬 파일 시스템입니다. 따라서 방화벽이나 네트워크 설정과는 무관합니다.

      하지만 게스트 OS가 부팅될 때, /etc/fstab에 명시된 장치들은 병렬로 마운트될 수 있습니다. 이때 QEMU/KVM에 의해 Virtio-FS 가상 장치가 아직 준비되지 않은 상태에서 OS가 마운트를 시도하면 실패할 수 있습니다. _netdev 옵션은 시스템이 “네트워크 관련 장치를 모두 초기화한 후”에 이 파일 시스템을 마운트하도록 지시하여, 마운트 시점을 부팅 과정의 뒷부분으로 지연시킵니다. 이 지연 시간 덕분에 Virtio-FS 가상 장치가 준비될 시간을 벌 수 있어, 마운트 실패를 방지하는 효과가 있습니다. 즉, 네트워크가 필요해서가 아니라 부팅 순서를 늦추기 위한 목적으로 사용하는 것입니다.

4단계: 설정 검증 및 재부팅

fstab 파일 수정이 완료되면 설정을 검증합니다.

  1. 먼저 기존에 수동으로 마운트한 것을 해제합니다.
    1
    
    sudo umount /mnt/host_share
    
  2. mount -a 명령어로 /etc/fstab에 있는 모든 항목을 마운트합니다. 오류가 발생하지 않는지 확인합니다.
    1
    
    sudo mount -a
    

    이때 아무 메시지도 나타나지 않으면 성공입니다. ls -l /mnt/host_share로 다시 마운트되었는지 확인할 수 있습니다.

  3. 마지막으로, 가상 머신을 재부팅하고 부팅이 완료된 후 공유 폴더가 자동으로 마운트되었는지 최종 확인합니다.

결론

/etc/fstab에 Virtio-FS 공유 정보를 등록하고 _netdev 옵션을 추가함으로써, 가상 머신을 시작할 때마다 수동으로 폴더를 마운트해야 하는 번거로움을 해결했습니다. 이제 호스트와의 파일 공유가 자동화되어 훨씬 편리하게 가상 머신을 사용할 수 있습니다.

This post is licensed under CC BY 4.0 by the author.