SMB / CIFSネットワーク共有でQEMU / KVM仮想マシンのディスクイメージを使用する方法:権限が拒否されました。

SMB / CIFSネットワーク共有でQEMU / KVM仮想マシンのディスクイメージを使用する方法:権限が拒否されました。

環境

  • 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をrootとして実行します。
    $ ps aux | grep libvirt 
    root         902  0.0  0.2 1559756 42420 ?       Ssl  Nov29   0:06 /usr/sbin/libvirtd
    
  • 仮想管理者(私はlibvirtフロントエンドを使用しています)daveユーザー権限で実行します。
  • 変更されていない一般 QEMU 構成
  • 上記のように、ユーザーがdaveグループに追加されました。libvirtkvmここ(オペレーティングシステムはUbuntu 20.04です):
    sudo adduser `id -un` libvirt
    sudo adduser `id -un` kvm
    
  • libvirt URIはqemu:///system

質問

davetempシェルまたはファイルアプリケーションから直接書き込んで読み取ることができます。共有所有者はおよびに属するユーザーに設定されますuid=dave,gid=dave。仮想マシンの実行kvmlibvirt地元の .qcow2ディスクイメージパスに問題はありません。 virt-managerでは、/media/nas/tempストレージプール(イメージを含むディレクトリ)を定義できます。

ただし、このディスクイメージファイルをに配置または作成しようとすると、/media/nas/temp「許可拒否」エラーが発生します。私が知っている限り、VMはqemu:///systemインスタンス化されていますroot。試してみて確認した結果、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/ubuntu2 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","re​​ad - 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","re​​ad-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-qemurootとしてvirt-manager実行する必要はないようですqemu-img create。ただし、qemu:///systemシステムはqemuユーザー(libvirt-qemu[Ubuntu、Debian]、またはqemu[Fedora])で起動するため、共有がrootとしてマウントされた場合は別の権限拒否エラーが発生します。

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).

を使用するときにselinuxseboolを設定する必要があるかもしれませんvirt_use_samba

おすすめ記事