로컬 virt-manager 스토리지 풀 생성

로컬 virt-manager 스토리지 풀 생성

나는스토리지 풀virt-manager의 qcow2 이미지용내 홈 디렉토리에그런데 이상한 오류가 발생합니다.

Error creating pool: Could not define storage pool: XML error: name /home/matthias/virtual-guests/virt-manager cannot contain '/'

풀을 만드는 중에 오류가 발생했습니다.

질문

  • 내 홈 디렉토리에 스토리지 풀을 갖는 것이 가능합니까?
  • virt-manager가 디렉터리에 액세스하려면 특별한 권한이 필요합니까?

전체 오류 추적

Traceback (most recent call last): File "/usr/share/virt-manager/virtManager/asyncjob.py", line 89, in cb_wrapper callback(asyncjob, *args, **kwargs) File "/usr/share/virt-manager/virtManager/createpool.py", line 442, in _async_pool_create poolobj = self._pool.install(create=True, meter=meter, build=build) File "/usr/share/virt-manager/virtinst/storage.py", line 531, in install raise RuntimeError(_("Could not define storage pool: %s") % str(e)) RuntimeErError creating pool: Could not define storage poror: Could not define storage pool: XML error: name /home/matthias/virtual-guests/virt-manager cannot contain '/'

답변1

풀을 생성할 수 있지만 고려해야 할 몇 가지 사항이 있습니다.

  1. "이름"에는 '/'와 같은 특수 문자가 없어야 합니다. /tmp/test 풀을 생성하려면 이름을 "시험" (2단계 중 1단계에서) 경로를 지정하고 "/tmp/테스트" (2/2단계에서) 그러면 작동할 겁니다.

  2. 너무 드물게 가면 의류가 멈출 것입니다. 기본적으로 허용되는 경로 세트는 제한되어 있습니다. 어느 시점에서 이 경로를 벗어나면virt-aa-helper더 이상 파일에 액세스할 수 없습니다. 그러나 게스트별 사용자 정의 프로필에 대한 액세스를 허용하려면 이것이 필요합니다. 이에 대한 자세한 내용은 /etc/apparmor.d/local/README를 참조하여 기존 규칙을 확인 /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper하고 사용자 정의 규칙을 추가하세요 ./etc/apparmor.d/local/usr.lib.libvirt.virt-aa-helper

  3. 일부 수영장 유형은 아직 의류로 처리할 수 없습니다. virt-manager의 기본 풀 유형은 "디렉토리" 그러면 괜찮을 것입니다. 하지만 "LVM 그룹", 이러한 유형의 경우 게스트에 대해 즉석에서 의류 규칙을 생성할 수 없습니다(이것에 대한 버그를 참조하십시오), 이 경우 변경을 통해 필요한 추가 경로를 허용해야 합니다 /etc/apparmor.d/abstractions/libvirt-qemu.

답변2

예, 홈 디렉터리에 대한 풀을 생성할 수 있습니다. 아마도 "/" 기호가 포함된 "/home/matthias/virtual-guests/virt-manager"라는 이름의 풀을 생성하려고 시도했을 것입니다. 앞으로는 풀을 생성할 때 "/" 기호 없이 이름을 입력하세요.

나중에 다른 파티션에 QCOW2 파일(디스크 이미지 파일)을 생성해야 할 수도 있습니다. 이 단계를 참조하세요.가이드.
또한 당신은 이것이 유용하다고 생각할 수도 있습니다가이드.

답변3

다른 파티션에 qcow2 디스크 이미지 파일 생성

이 가이드는 Ubuntu 22.04 LTS, 22.10, 23.04, 23.10에서 테스트되었습니다.

디렉토리를 블록에 자동으로 연결(자동 파티션 마운트)

1. 새 디렉터리 만들기

$ sudo mkdir /media/username
$ sudo mkdir /media/username/Shared
$ sudo mkdir /media/username/Shared/kvm

중요한!소문자로 된 디렉토리 이름 kvm입니다.

2. blkid 명령을 실행하여 사용 가능한 블록 장치에 대한 정보를 표시합니다. UUID(Universally Unique Identifier)가 필요합니다.

$ sudo blkid

결과는 다음과 같아야 합니다.

/dev/sda1: LABEL="Ubuntu" UUID="azazazaz-azaz-azaz-azaz-azazazazazaz" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Ubuntu" PARTUUID="a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1"
/dev/sda2: LABEL="Shared" UUID="abababab-abab-abab-abab-abababababab" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Shared" PARTUUID="a2a2a2a2-a2a2-a2a2-a2a2-a2a2a2a2a2a2"

3. fstab 파일을 편집합니다.

$ sudo nano /etc/fstab

fstab 파일에 올바른 UUID가 포함된 다음 두 줄을 추가합니다.

# Shared
UUID=abababab-abab-abab-abab-abababababab       /media/username/Shared        ext4    defaults        0       2

최종 결과는 다음과 같습니다.

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/nvme0n1p3 during installation
UUID=azazazaz-azaz-azaz-azaz-azazazazazaz /               ext4    errors=remount-ro 0       1
# Shared
UUID=abababab-abab-abab-abab-abababababab       /media/username/Shared        ext4    defaults        0       2

4. mount -a명령 실행

$ sudo mount -a

가능한 문제:

  1. 에뮬레이터에 '/media/username/Shared/kvm/Disk.qcow2' 경로에 대한 검색 권한이 없을 수 있습니다.
  2. 도메인 시작 오류: 저장소 파일 '/media/username/Shared/kvm/Disk.qcow2'에 액세스할 수 없습니다(uid:10101, gid:101): 권한이 거부되었습니다.

5. 권한 문제 수정

$ sudo chown root:root '/media'
$ sudo chmod 775 '/media'

$ sudo chown root:root '/media/username'
$ sudo chmod 775 '/media/username'

$ sudo chown username:username '/media/username/Shared'
$ sudo chmod 775 '/media/username/Shared'

$ sudo chown username:username '/media/username/Shared/kvm'
$ sudo chmod 777 '/media/username/Shared/kvm'

libvirt의 기본 스토리지 풀 변경

6. 현재 풀 나열

$ virsh pool-list

다음 텍스트가 표시됩니다.

Name                 State      Autostart 
-------------------------------------------
default              active     yes 

7. 기본 풀을 삭제합니다.

$ virsh pool-destroy default

다음 텍스트가 표시되어야 합니다. 풀 기본값이 삭제됨

8. 풀 정의 해제

$ virsh pool-undefine default

다음 텍스트가 표시되어야 합니다. 풀 기본값이 정의되지 않았습니다.

9. "default"라는 새 풀을 정의합니다.

$ virsh pool-define-as --name default --type dir --target /media/username/Shared/kvm

다음 텍스트가 표시되어야 합니다. 풀 기본값이 정의됨

10. libvirt 데몬이 시작될 때 시작되도록 풀을 설정합니다.

$ virsh pool-autostart default

다음 텍스트가 표시되어야 합니다. 풀 기본값이 자동 시작으로 표시됨

11. 풀 시작

$ virsh pool-start default

다음 텍스트가 표시되어야 합니다. 풀 기본값이 시작됨

12. 수영장 상태를 확인하세요

$ virsh pool-list

다음 텍스트가 표시됩니다.

Name                 State      Autostart 
-------------------------------------------
default              active     yes 

이제 가상 머신을 생성할 때 Virtual Machine Manager는 qcow2 파일을 /media/username/Shared/kvm 디렉터리에 저장합니다.

새로운 게스트 머신 또는 qcow2 파일 생성

13. virt-manager 실행

$ virt-manager

14. 가상 머신용 디스크 이미지를 생성하거나 새 머신을 생성합니다.

답변4

제 경우에는 실수였습니다. 특히 명확하지는 않습니다. 디렉토리에 스토리지 풀을 생성하려고 했기 때문에dir:Filesystem Directory

2단계가 있습니다:

  1. type및 을 지정 name하지만 여기서는name 경로가 아니다. 예:test
  2. 다음 단계에서는 제안된 경로 /var/lib/libvirt/images /libvirt-images-pool2/ /libvirt-images-pool2/test```를 Target Path제공합니다./var/lib/libvirt/images/**test**. Simple **change**to whatever you want. Example:(which will result in

참고: 소유권과 권한을 조정해야 할 수도 있지만 완료를 클릭하면 libvirt가 이를 수정한다고 생각합니다.

누군가에게 도움이 되기를 바랍니다.

관련 정보