如何將獨立 QEMU 會話連接到 libvirt 使用者會話?

如何將獨立 QEMU 會話連接到 libvirt 使用者會話?

我想讓 qemu 啟動在用戶空間中運行的機器,但在開發過程中我想使用virtsh. (注意,這並不是因為我需要virtsh,而是QEMU 開發人員隻公開與virtsh 一起使用的API。我想我還可以問「如何透過命令列操作正在運行的QEMU 的快照,而不是交互式qemu 監控會話?

手冊不是很清楚如何使用 和 附加 qemu 到 libvirt 實例qemu:///sessionqemu+unix:///session它只是假設您將讓 libvirt 啟動所有掛鉤,因此它不會解釋任何內容。

而我什麼思考是解決方案,qemu:///embed對於非 libvirt 開發人員來說極其缺乏細節且神秘https://libvirt.org/drvqemu.html#embedded-driver

$ ps aux | grep qemu
gcb    ...    qemu-system-x86_64 -machine pc...

$ virsh -c qemu+unix:///session list --all
 Id   Name   State
--------------------

$ virsh -c qemu:///session list --all
 Id   Name   State
--------------------

$ id
uid=1000(gcb) ...

libvirt 究竟如何找出使用者會話 qemu?我如何簡單地使用 virtsh 命令與來自同一用戶的正在運行的 qemu 進行交互,如上所示?

答案1

希望我錯了,但閱讀他們的文檔後:

答,這是不可能的。

libvirt 是一個 redhat+gnome 專案。因此,它的設計很糟糕(並且是從上到下推的,就像 systemd 一樣)。手冊中充滿了居高臨下的段落,他們沒有解釋,而是偷工減料,現在他們擔心任何超出他們控制的操作都會導致錯誤,他們斥責用戶對基本的事情沒有任何好處,比如獲取正在運行的PID虛擬機。手冊的深層部分是指向 gnome.org 中的個人部落格的完整 404 連結。

關於如何為新虛擬機器編寫配置 xml 的文檔很少。你應該依賴 GUI 程式或更糟糕的記錄的 hacky 腳本 virsh-install。它們都假設您已經完整安裝了一個專門用於運行 libvirtd 和其他服務的系統,並且將徹底拒絕執行任何操作(甚至吐出 xml 模板),除非您啟動了這些服務。在某些時候,他們有一個從 qemu args 到 xml 的便捷翻譯器,但這早已不復存在(已經達到了吸引其他專案貢獻者的目的)。

除非您的雇主使用 libvirt,否則請避免使用它。現在保留 qemu 前端。

編輯:也許是一個解決方法,到目前為止未經測試:

virt-install --import --connect qemu://session --qemu-commandline '-m ...' 在沒有系統範圍的 libvirtd 的情況下啟動 qemu 機器。

編輯2:不,這最終會與虛擬機器管理程式互動。此外,截至 2024 年,他們qemu-commandline從文件中刪除了 param 的文檔。

相關內容