환경
- SMB 네트워크 공유는
temp
다음과 같이 마운트됩니다. 사용자로 로그인하십시오dave
.sudo mount -t cifs -o username=dave,vers=3.11,uid=dave,gid=dave //nas/temp /media/nas/temp
- 효과적인
temp
마운트 폴더 권한:$ ls -al /media/nas/ drwxr-xr-x 2 dave dave 0 Nov 30 10:14 temp/
- libvirtd를 루트로 실행합니다:
$ ps aux | grep libvirt root 902 0.0 0.2 1559756 42420 ? Ssl Nov29 0:06 /usr/sbin/libvirtd
- 가상 관리자(나는 libvirt 프론트엔드를 사용하고 있습니다)
dave
사용자 권한으로 실행합니다: - 수정되지 않은 일반 QEMU 구성
- 위에서 설명한 대로 사용자 가
dave
그룹에 추가되었습니다.libvirt
kvm
여기(운영 체제는 Ubuntu 20.04입니다):sudo adduser `id -un` libvirt sudo adduser `id -un` kvm
- libvirt URI는
qemu:///system
질문
dave
temp
쉘이나 파일 애플리케이션에서 직접 쓰고 읽을 수 있습니다 . 공유 소유자는 및 에 속한 사용자인 으로 설정됩니다 uid=dave,gid=dave
. 가상 머신 실행kvm
libvirt
현지의 .qcow2
디스크 이미지 경로에는 문제가 없습니다. virt-manager에서는 /media/nas/temp
스토리지 풀(이미지가 포함된 디렉터리)을 정의할 수 있습니다 .
그러나 이 디스크 이미지 파일을 에 배치하거나 생성하려는 순간 /media/nas/temp
"권한 거부" 오류가 발생합니다. 내가 아는 한, VM은 qemu:///system
인스턴스화되어 root
. 시도해 보고 확인한 결과 루트로 쓸 sudo su
수 있습니다 ./media/nas/temp
오류를 직접 트리거하는 또 다른 방법(virt-manager 출력에서 복사)은 다음과 같습니다.
/usr/bin/qemu-img create -f qcow2 -o preallocation=metadata,compat=1.1,lazy_refcounts /media/nas/temp/ubuntu20.04 20971520K
질문
권한 문제와 해결 방법을 알고 싶습니다. 여기서 문제가 무엇입니까?
자세한 오류 메시지
새 디스크 이미지를 생성하려고 하면 .qcow2
다음이 트리거됩니다.
볼륨 생성 오류: 'ubuntu20.04' 스토리지 볼륨을 생성할 수 없습니다: '내부 오류: 하위 프로세스(/usr/bin/qemu-img create -f qcow2 -o preallocation=metadata,compat=1.1,lazy_refcounts /media/nas/ temp /ubuntu20.04 20971520K) 예기치 않은 종료 상태 1: qemu-img:/media/nas/temp/ubuntu20.04: qcow2 헤더에 쓸 수 없습니다: 권한이 거부되었습니다.'
역추적(가장 최근 호출 마지막): 파일 "/usr/share/virt-manager/virtinst/storage.py", 682행, install vol = self.pool.createXML(xml, createflags) 파일 "/usr/lib/ python3 /dist-packages/libvirt.py", line 3535, createXML, ret가 None인 경우: raise libvirtError('virStorageVolCreateXML() failed', pool=self) libvirt.libvirtError: 내부 오류: 하위 프로세스(/usr /bin/ qemu -img create -f qcow2 -o preallocation=metadata,compat=1.1,lazy_refcounts /media/nas/temp/ubuntu20.04 20971520K) 예기치 않은 종료 상태 1: qemu-img: /media/nas/temp/ubuntu20 .04: 사용할 수 없음 qcow2 헤더에 쓰려면: 권한이 거부되었습니다.
위 예외를 처리하는 과정에서 또 다른 예외가 발생했습니다.
역추적(마지막 호출 마지막): 파일 "/usr/share/virt-manager/virtManager/asyncjob.py", 75행, cb_wrapper 콜백(asyncjob, *args, **kwargs) 파일 "/usr/share /virt" -manager/virtManager/createvol.py", 339행, _async_vol_create vol.install(meter=meter) 파일 "/usr/share/virt-manager/virtinst/storage.py", 691행, RuntimeError("Unable to 설치 중 "스토리지 볼륨 생성" RuntimeError: 스토리지 볼륨 'ubuntu20.04'를 생성할 수 없습니다: '내부 오류: 하위 프로세스(/usr/bin/qemu-img create -f qcow2 -o preallocation=metadata, compat=1.1,lazy_refcounts /media /nas/temp/ubuntu20.04 20971520K) 예기치 않은 종료 상태 1: qemu-img:/media/nas/temp/ubuntu20.04: qcow2 헤더를 쓸 수 없습니다: 권한이 거부되었습니다.'
업데이트: 내가 더 시도한 것
- 다른 오류 유형 검색
journalctl -xf
(위 메시지 외에 다른 것은 없음) cat /var/log/syslog | grep DENIED | grep libvirt
(없음)을 통해 거부된 작업 검색- 실험을 통해 AppArmor 비활성화
systemctl stop apparmor
- 효과 없음 - 다른 로컬 폴더에 이미지가 성공적으로 생성되었습니다.
/var/lib/libvirt/images/
업데이트 2: nobrl
마운트 옵션 사용
nobrl
설치 옵션을 사용하는 경우 (감사해요 도착하다rudib) 소유자는 uid=dave,gid=dave
다음과 같습니다.
sudo mount -t cifs -o username=dave,vers=3.11,uid=dave,gid=dave,nobrl //nas/temp /media/nas/temp
, 스토리지 볼륨이 성공적으로 생성될 수 있습니다(virt-manager 마법사의 4/5단계). 5/5단계에서 이제 또 다른 "권한 거부" 오류가 발생합니다.
설치를 완료할 수 없습니다: '내부 오류: qemu가 예기치 않게 닫혔습니다. 모니터:2020-12-01T06:03:01.710704Z qemu-system-x86_64:-blockdev{"node-name":"libvirt-2-format","read - only":false,"driver":"qcow2","file":"libvirt-2-storage","backing":null}: 파일을 다시 열 수 없습니다: 권한이 거부되었습니다.'
역추적(마지막 호출 마지막): 파일 "/usr/share/virt-manager/virtManager/asyncjob.py", 75행, cb_wrapper 콜백(asyncjob, *args, **kwargs) 파일 "/usr/share /virt" -manager/virtManager/createvm.py", 2089행, _do_async_install guest.installer_instance.start_install(guest,meter=meter) 파일 "/usr/share/virt-manager/virtinst/install/installer.py", 542행, start_install 필드 = self._create_guest(파일 "/usr/share/virt-manager/virtinst/install/installer.py", 491행, _create_guest 필드 = self.conn.createXML( install_xml 또는 final_xml, 0) 파일 "/ usr/lib/python3/dist-packages/libvirt.py", line 4034, createXML, ret가 None인 경우: raise libvirtError('virDomainCreateXML() failed', conn=self ) libvirt.libvirtError: 내부 오류: qemu가 예기치 않게 닫혔습니다. monitor:2020-12-01T06:03:01.710704Z qemu-system-x86_64:-blockdev {"node-name":"libvirt-2-format","read-only" ": false, "driver": "qcow2 ", "file": "libvirt-2-storage", "backing": null}: 파일을 다시 열 수 없습니다: 권한이 거부되었습니다.
지정하지 않으면 다음 권한이 uid
발생합니다 .gid
$ ll /media/nas/
drwxr-xr-x 2 root root 0 Dez 1 07:01 temp/
, 오류는 이전과 동일합니다.
답변1
노트:원격으로 마운트된 활성 볼륨은 일부 문제를 일으키고 대기 시간을 증가시킬 수 있습니다.
qemu-img가 바이트 범위 잠금을 처리할 수 없는 것 같습니다 cifs
. 이 플래그는 nobrl
문제를 해결해야 합니다.
mount -t cifs -o username=dave,vers=3.11,nobrl,uid=libvirt-qemu //nas/temp /media/nas/temp
이미지 생성 중에 qemu:///system
uid=libvirt-qemu
루트로 virt-manager
실행할 필요는 없는 것 같습니다 qemu-img create
. 그러나 qemu:///system
시스템이 qemu 사용자( libvirt-qemu
[Ubuntu, Debian] 또는 qemu
[Fedora])로 부팅되므로 공유가 루트로 방금 마운트되면 또 다른 권한 거부 오류가 발생합니다.
nobrl Do not send byte range lock requests to the server. This is necessary for certain applications that break with cifs style mandatory byte range locks (and most cifs servers do not yet support requesting advisory byte range locks).
를 사용할 때 selinux
sebool 을 설정해야 할 수도 있습니다 virt_use_samba
.