久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

基于Qt與libvirt構(gòu)建跨平臺(tái)虛擬機(jī)管理器:從連接到顯示

基于Qt與libvirt構(gòu)建跨平臺(tái)虛擬機(jī)管理器:從連接到顯示 簡(jiǎn)介qt-virt-manager 是基于 Qt/C 開(kāi)發(fā)的圖形化虛擬機(jī)管理工具面向系統(tǒng)管理員與運(yùn)維開(kāi)發(fā)人員解決異構(gòu)虛擬化平臺(tái)之間管理分散、操作門檻高的問(wèn)題。它通過(guò)統(tǒng)一界面覆蓋 VMware、LXC、BHYVE、Libvirt、Hyper-V、OpenVZ、QEMU-KVM 與 VirtualBox 等主流技術(shù)用戶無(wú)需在不同客戶端之間來(lái)回切換即可集中創(chuàng)建、刪除、啟動(dòng)、停止和監(jiān)控虛擬機(jī)并進(jìn)行資源分配、網(wǎng)絡(luò)配置、克隆、備份與遷移等操作。壓縮包大小約 3.08MB便于快速獲取目前已有 353 人學(xué)習(xí)瀏覽。針對(duì)各底層虛擬化技術(shù)Qt 界面下的操作思路對(duì)理解 LXC 容器與 BHYVE 原生虛擬化的差異、Libvirt 抽象層的作用、QEMU-KVM 硬件虛擬化加速原理以及 Hyper-V/OpenVZ 的適用場(chǎng)景都有幫助。借助 Qt 跨平臺(tái)特性工具在 Linux、Windows 等桌面環(huán)境下提供一致體驗(yàn)適合需要整合多種虛擬化技術(shù)、簡(jiǎn)化日常管理流程的系統(tǒng)工程師也適合作為虛擬化入門學(xué)習(xí)與教學(xué)演示的配套資源。1. Qt虛擬機(jī)經(jīng)理不用再羨慕virt-manager的圖形化體驗(yàn)我最初拿到 qt-virt-manager 這套資源時(shí)第一反應(yīng)是“它到底解決了什么”。畢竟桌面端早已有 virt-manager可它在技術(shù)棧上綁死了 GTK我想把它嵌進(jìn)自己的 Qt 主程序、想換一套 QSS 皮膚、想跨平臺(tái)復(fù)用同一套界面邏輯都等于從頭再造輪子。這份用 Qt/C 重寫的虛擬機(jī)經(jīng)理底層依然走 libvirt把 QEMU/KVM、VirtualBox、LXC、bhyve、Hyper-V 這些后端統(tǒng)一收進(jìn)來(lái)界面則換成完全可控的 Qt 控件。它解決的不只是“能看見(jiàn)虛擬機(jī)”而是讓桌面開(kāi)發(fā)者和運(yùn)維能拿到一套可編譯、可二次修改的虛擬化管理源碼。適合誰(shuí)適合正在做桌面虛擬化管理工具、或需要在自定義界面里操作虛擬機(jī)的朋友新手也能照著源碼把連接鏈路跑通。2. 連接后端URI、驅(qū)動(dòng)樹(shù)和安全認(rèn)證的拆解真正上手這套 Qt 虛擬機(jī)經(jīng)理之前建議先把連接層拆明白。因?yàn)樗泄δ堋斜怼?dòng)、快照、顯示——都建立在那一條連接 URI 上。URI 寫錯(cuò)一個(gè)斜杠后面全白搭。2.1 先弄清 libvirt 驅(qū)動(dòng)樹(shù)系統(tǒng)連接與用戶會(huì)話連接libvirt 不是虛擬化軟件本身它是一個(gè)統(tǒng)一管理接口。你用virConnectOpenAuth傳進(jìn)去的 URI決定它選擇哪個(gè)驅(qū)動(dòng)。驅(qū)動(dòng)名來(lái)自編譯進(jìn) libvirt 的那一組后端模塊常見(jiàn)的有qemu、vbox、lxc、bhyve、hyperv、openvz、phyp等。注意URI 里的:///system和:///session兩個(gè)路徑代表完全不同的權(quán)限邊界system走系統(tǒng)的 libvirtd 守護(hù)進(jìn)程需要 root 或加入libvirt組session走當(dāng)前用戶自己的進(jìn)程不需要 root但它只能管理用戶自己名下的虛擬機(jī)。我用一個(gè)表把這組 URI 記下來(lái)排查的時(shí)候?qū)χ春芸旌蠖薝RI 示例說(shuō)明QEMU/KVMqemu:///system最常用連接系統(tǒng)級(jí) libvirtdVirtualBoxvbox:///system通過(guò) vbox 驅(qū)動(dòng)管理 VirtualBox 實(shí)例LXC 容器lxc:///system管理本機(jī) LXC 容器bhyvebhyve:///systemFreeBSD 上的 bhyve 虛擬機(jī)Hyper-Vhyperv:///system通過(guò) WSMan 協(xié)議連 Windows Hyper-VOpenVZopenvz:///session管理 OpenVZ 容器IBM PowerVMphyp:///system連接 PowerVM 管理分區(qū)這套資源里默認(rèn)走的是qemu:///system。你要把它改成 vbox 或 lxc不需要改界面代碼只需要改連接配置項(xiàng)。我在 qt-virt-manager 的源碼里看到它把 URI 作為配置字符串放到首選項(xiàng)頁(yè)這個(gè)設(shè)計(jì)很實(shí)用——不要把一個(gè)后端寫死在構(gòu)造函數(shù)里運(yùn)行時(shí)切換能省去重新編譯。2.2 遠(yuǎn)程連接與認(rèn)證ssh 和 tcp 兩條路的參數(shù)差異跨機(jī)器管理虛擬機(jī)時(shí)URI 會(huì)帶上認(rèn)證方式。常見(jiàn)的有兩種寫法qemussh://userhost/system和qemutcp://host:16509/system。先說(shuō) ssh 這條。它依賴本機(jī) ssh 客戶端第一次連接時(shí) libvirt 會(huì)通過(guò) sshd 跳轉(zhuǎn)到遠(yuǎn)端再用遠(yuǎn)端 libvirtd 的權(quán)限模型驗(yàn)證。好處是傳輸加密、認(rèn)證簡(jiǎn)單因?yàn)槟惚緳C(jī)已經(jīng)生成過(guò) ssh key坑點(diǎn)是如果你用密鑰而非密碼登錄libvirt 的認(rèn)證回調(diào)會(huì)被跳過(guò)它直接走 ssh 層這時(shí)如果遠(yuǎn)端沒(méi)有把本地公鑰加進(jìn)authorized_keys就會(huì)收到一個(gè)讓人摸不著頭腦的連接錯(cuò)誤。再說(shuō) tcp 這條。它走 16509 端口通常要開(kāi)啟 SASL 認(rèn)證。打開(kāi)/etc/libvirt/libvirtd.conf把listen_tls 0、listen_tcp 1打開(kāi)然后配置auth_tcp sasl。注意如果 libvirtd 是以 systemd 方式啟動(dòng)還得修改/etc/libvirt/libvirtd.socket的監(jiān)聽(tīng)開(kāi)關(guān)。我在實(shí)際配置時(shí)踩過(guò)一次明明設(shè)置了listen_tcp 1服務(wù)卻不監(jiān)聽(tīng) 16509 端口后來(lái)發(fā)現(xiàn)是新版本 libvirt 默認(rèn)走 socket 激活需要在/etc/libvirt/libvirtd.conf里把listen_tcp相關(guān)注釋放開(kāi)并且重啟服務(wù)。tcp 連接如果不開(kāi) SASL測(cè)試時(shí)勉強(qiáng)能連上但生產(chǎn)環(huán)境絕對(duì)不要這么干——libvirt 的 tcp 不加認(rèn)證等于把主機(jī)的域管理接口裸奔在局域網(wǎng)里。2.3 C 側(cè)封裝連接virConnectOpenAuth 與 URI 校驗(yàn)qt-virt-manager 的連接層直接用 libvirt 的 C API用 Qt 的QString轉(zhuǎn)成const char*傳進(jìn)去。最關(guān)鍵的是認(rèn)證回調(diào)它決定你用什么方式完成 SASL/SSH 后的身份驗(yàn)證。我一般會(huì)這樣封裝// hypervisor_connection.cpp #include libvirt/libvirt.h #include libvirt/virterror.h #include QDebug // 認(rèn)證回調(diào)把用戶名和密碼交給 libvirt static int authCallback(virConnectCredentialPtr cred, unsigned int ncred, void* userdata) { auto* pair static_castQPairQString, QString*(userdata); for (unsigned int i 0; i ncred; i) { if (cred[i].type VIR_CRED_AUTHNAME) { // 把 Qt 字符串拷貝到 libvirt 的緩沖里 QByteArray name pair-first.toUtf8(); cred[i].result strdup(name.constData()); cred[i].resultlen name.size(); } else if (cred[i].type VIR_CRED_PASSPHRASE) { QByteArray pass pair-second.toUtf8(); cred[i].result strdup(pass.constData()); cred[i].resultlen pass.size(); } else { return -1; // 不認(rèn)識(shí)的憑據(jù)類型直接失敗 } } return 0; } virConnectPtr openHypervisor(const QString uri, const QString user, const QString pass) { QPairQString, QString authPair(user, pass); virConnectAuth auth; auth.credtype nullptr; auth.ncredtype 0; auth.cb authCallback; auth.cbdata authPair; // 這里先嘗試讀寫連接失敗再退化為只讀 virConnectPtr conn virConnectOpenAuth(uri.toUtf8().constData(), auth, 0); if (conn nullptr) { const virError* err virGetLastError(); qWarning() 連接失敗: err-message; } return conn; }這段代碼里有幾個(gè)參數(shù)值得解釋。VIR_CRED_AUTHNAME表示讓 libvirt 回調(diào)來(lái)填寫用戶名VIR_CRED_PASSPHRASE是密碼。cred[i].result必須用strdup分配內(nèi)存libvirt 會(huì)自己釋放。我一般不用QString::toLocal8Bit而是toUtf8因?yàn)?libvirt 對(duì)證書里的非 ASCII 用戶名處理有歷史包袱UTF-8 出錯(cuò)概率最低。打開(kāi)連接之后不要順手把virConnectClose寫進(jìn)析構(gòu)里就完事。如果界面里有多個(gè)窗口共享同一條連接你要自己維護(hù)引用計(jì)數(shù)。libvirt 的virConnectPtr不是線程安全的多個(gè)線程同時(shí)使用同一個(gè)指針時(shí)必須加鎖或保證串行訪問(wèn)。我的做法是連接對(duì)象放在一個(gè)單獨(dú)的管理類里所有 libvirt 調(diào)用都經(jīng)過(guò)這個(gè)類的同步方法避免在多個(gè)線程里直接操作同一個(gè)virConnectPtr。2.4 連接層參數(shù)速查flags、超時(shí)與日志virConnectOpenAuth的 flags 參數(shù)有三個(gè)常用值0表示讀寫連接VIR_CONNECT_RO表示只讀VIR_CONNECT_NO_ALIASES表示不做 URI 別名解析。如果你只是做一個(gè)只讀監(jiān)控面板用VIR_CONNECT_RO就夠了這樣即便口令泄露也只能看不能改。超時(shí)參數(shù)不在這個(gè)函數(shù)里它由 libvirt 內(nèi)部的網(wǎng)絡(luò)超時(shí)和 SASL 協(xié)商超時(shí)決定默認(rèn)比較久。我一般會(huì)在連接前設(shè)置環(huán)境變量LIBVIRT_DEFAULT_URI同時(shí)把域名解析和連接放到 Qt 的QRunnable里執(zhí)行界面等 8 秒還沒(méi)返回就提示用戶檢查網(wǎng)絡(luò)。日志方面libvirt 默認(rèn)只打印virError到 stderr你可以設(shè)置LIBVIRT_LOG_FILTERS來(lái)控制export LIBVIRT_LOG_FILTERS3.libvirt 4.libvirt.qemu export LIBVIRT_LOG_OUTPUTS1:file:/tmp/libvirt_qt.log3表示只記錄 warning 級(jí)別的 libvirt 全局日志4.libvirt.qemu表示 qemu 驅(qū)動(dòng)單獨(dú)記 debug。這個(gè)區(qū)分很重要全局日志寫太多會(huì)把文件撐爆qemu 驅(qū)動(dòng)的 debug 才是排查 XML 生成問(wèn)題的地方。3. 域?qū)ο蟛僮鲝?XML 定義到生命周期封裝連接建立之后下一個(gè)要處理的是域domain的增刪改查。libvirt 把所有虛擬機(jī)定義抽象成 XMLqt-virt-manager 也需要按照這個(gè)思路設(shè)計(jì)數(shù)據(jù)模型——不要自己發(fā)明結(jié)構(gòu)體存虛擬機(jī)配置直接把 XML 當(dāng)作源數(shù)據(jù)界面只是它的視圖。3.1 用 XML 定義一個(gè)最小可運(yùn)行的 KVM 域一個(gè)最小域定義長(zhǎng)這樣domain typekvm nameqt-demo/name memory unitKiB2097152/memory currentMemory unitKiB2097152/currentMemory vcpu placementstatic2/vcpu os type archx86_64 machinepc-q35-6.2hvm/type boot devhd/ /os features acpi/ apic/ /features clock offsetlocaltime/ on_poweroffdestroy/on_poweroff on_rebootrestart/on_reboot on_crashrestart/on_crash devices disk typefile devicedisk driver nameqemu typeqcow2/ source file/var/lib/libvirt/images/qt-demo.qcow2/ target devvda busvirtio/ /disk interface typebridge source bridgebr0/ model typevirtio/ /interface graphics typespice port5900 autoportyes listen127.0.0.1/ /devices /domain注意幾個(gè)參數(shù)的細(xì)節(jié)。內(nèi)存單位是 KiB2097152是 2 GiB如果你寫2會(huì)被解析成 2 KiB啟動(dòng)時(shí)直接內(nèi)存不足。currentMemory表示當(dāng)前分配量可以小于memory用來(lái)做內(nèi)存熱插拔預(yù)留。vcpu的placementstatic表示固定 vCPU 數(shù)量如果改成placementauto會(huì)讓宿主機(jī)自動(dòng)決定。虛擬機(jī)名稱我建議只用字母、數(shù)字、連字符和下劃線不要用中文。libvirt 對(duì)名稱中的非 ASCII 字符支持不徹底尤其在使用virDomainLookupByName時(shí)某些版本會(huì)返回domain not found但用virConnectListAllDomains又能看到它這就是名稱編碼問(wèn)題導(dǎo)致的索引不一致。3.2 生命周期方法封裝創(chuàng)建、關(guān)閉、重啟與強(qiáng)制結(jié)束qt-virt-manager 的生命周期操作都封裝在一個(gè)DomainController類里對(duì)外暴露的是 Qt 風(fēng)格的方法內(nèi)部再轉(zhuǎn)成 libvirt 調(diào)用// domain_controller.cpp #include libvirt/libvirt.h #include QDebug class DomainController { public: virDomainPtr domain nullptr; virDomainPtr defineFromXML(virConnectPtr conn, const QByteArray xml) { // 從 XML 定義但先不啟動(dòng) virDomainPtr dom virDomainDefineXML(conn, xml.constData()); if (dom nullptr) { const virError* err virGetLastError(); qCritical() 定義失敗: err-message; } return dom; } int start() { // 對(duì)已定義的域做啟動(dòng) int ret virDomainCreate(domain); if (ret ! 0) { const virError* err virGetLastError(); qWarning() 啟動(dòng)失敗: err-message; } return ret; } int shutdownByACPI() { // 模擬按電源鍵讓 guest 內(nèi)系統(tǒng)正常關(guān)機(jī) int ret virDomainShutdownFlags(domain, VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN); return ret; } int forceDestroy() { // 相當(dāng)于拔電源危險(xiǎn)操作需要二次確認(rèn) return virDomainDestroy(domain); } };virDomainDefineXML只定義不啟動(dòng)適合做配置校驗(yàn)virDomainCreateXML是定義加啟動(dòng)一步到位但前提是你的 XML 里沒(méi)有引用尚未創(chuàng)建的存儲(chǔ)卷。VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN是模擬物理電源鍵Windows guest 看到的是“關(guān)機(jī)”事件比網(wǎng)絡(luò)發(fā) RPC 更通用如果你裝了 qemu-guest-agent可以改用VIR_DOMAIN_SHUTDOWN_GUEST_AGENT這樣能走 guest 內(nèi)部的干凈關(guān)機(jī)流程但前提是 agent 已運(yùn)行。3.3 狀態(tài)輪詢與 Qt 事件循環(huán)不要在 GUI 線程里做阻塞調(diào)用這是我在讀這套資源源碼時(shí)最看重的一點(diǎn)。libvirt 的virDomainGetInfo和virDomainGetState都會(huì)阻塞如果直接在 QML 槽函數(shù)或 QWidget 按鈕事件里調(diào)用虛擬機(jī)數(shù)量一多界面就卡。正確做法是放到工作線程里。比如這樣// domain_worker.cpp #include QRunnable #include QThreadPool class RefreshDomainWorker : public QRunnable { public: virDomainPtr dom; void run() override { virDomainInfo info; if (virDomainGetInfo(dom, info) 0) { // 通過(guò)信號(hào)發(fā)回主線程更新界面 emit resultReady(info.state, info.nrVirtCpu); } } };這里的關(guān)鍵是QRunnable在QThreadPool里執(zhí)行得到結(jié)果后用信號(hào)槽傳回主線程。因?yàn)関irDomainPtr來(lái)自同一個(gè)連接工作線程之間如果同時(shí)調(diào)用需要保證它們操作的是不同域?qū)ο蠡蛘邔?duì)整個(gè)連接加互斥鎖。我采取的方案是連接層有一個(gè)QMutex每次調(diào)用前l(fā)ock調(diào)完再unlock性能損失不大但能避免同一連接下的未知崩潰。3.4 定義與啟動(dòng)的邊界持久域和臨時(shí)域用virDomainDefineXML創(chuàng)建的域是持久的重啟宿主機(jī)后依然存在用virDomainCreateXML創(chuàng)建的域是臨時(shí)的關(guān)閉虛擬化服務(wù)后自動(dòng)消失。qt-virt-manager 的“新建虛擬機(jī)”頁(yè)面里有兩個(gè)選項(xiàng)很多新手會(huì)把“定義”和“創(chuàng)建”混淆導(dǎo)致每次重啟宿主機(jī)后虛擬機(jī)列表變成空的。我在資源代碼里看到它把兩個(gè)操作分別做成了按鈕如果用戶選擇了“臨時(shí)域”界面會(huì)顯示一個(gè)顯眼的警告條這個(gè)交互值得借鑒。4. 顯示輸出接入SPICE 與 VNC 參數(shù)以及 Qt 窗口內(nèi)嵌的幾種做法管理虛擬機(jī)繞不開(kāi)顯示輸出。qt-virt-manager 要承擔(dān)的不只是“列表管理器”它還得把訪客畫面交給用戶看。這一章我拆解顯示協(xié)議選擇和 Qt 集成方式。4.1 先選協(xié)議SPICE 與 VNC 的差異表在配參數(shù)前先做技術(shù)選型。VNC 和 SPICE 在虛擬化場(chǎng)景里的地位不一樣對(duì)比項(xiàng)SPICEVNC圖形傳輸支持多顯示器、動(dòng)態(tài)分辨率調(diào)整固定分辨率分辨率變更需要重建會(huì)話音頻原生支持音頻轉(zhuǎn)發(fā)需要額外走 PulseAudio 端口剪貼板支持雙向剪貼板依賴 viewer 實(shí)現(xiàn)通常不支持視頻編碼自動(dòng)降級(jí)編碼局域網(wǎng)表現(xiàn)好簡(jiǎn)單編碼弱網(wǎng)表現(xiàn)一般客戶端支持spice-gtk / remote-viewer幾乎所有平臺(tái)都有 VNC client如果你管理的虛擬機(jī)以 Linux 桌面為主而且宿主機(jī)與訪客在同一局域網(wǎng)SPICE 是明顯更好的選擇。但如果訪客是 Windows 且沒(méi)裝 SPICE guest toolsSPICE 會(huì)退化成 VNC這時(shí)不如直接配 VNC少一層折損。4.2 從域配置里取圖形端口和密碼解析 XML 而不是調(diào)用隱藏 API很多剛開(kāi)始寫 Qt 虛擬化管理的人會(huì)去找virDomainGetGraphics這樣的函數(shù)我提醒一句libvirt 沒(méi)有這個(gè)公開(kāi) API。正確做法是用virDomainGetXMLDesc把整個(gè) XML 拉回來(lái)再解析graphics節(jié)點(diǎn)// graphics_parser.cpp #include libvirt/libvirt.h #include QDomDocument QString getGraphicsPort(virDomainPtr domain) { // 取帶安全字段的完整 XML密碼會(huì)被解出來(lái) char* xml virDomainGetXMLDesc(domain, VIR_DOMAIN_XML_SECURE); if (xml nullptr) return QString(); QDomDocument doc; doc.setContent(QString::fromUtf8(xml)); free(xml); const QDomNodeList graphicsList doc.elementsByTagName(QStringLiteral(graphics)); for (int i 0; i graphicsList.size(); i) { QDomElement g graphicsList.item(i).toElement(); if (g.attribute(type) spice || g.attribute(type) vnc) { QString port g.attribute(port); QString pass g.attribute(passwd); // 這里可以發(fā)給顯示頁(yè)面去連 return port; } } return QString(); }VIR_DOMAIN_XML_SECURE這個(gè) flag 必須帶否則graphics節(jié)點(diǎn)里的passwd屬性會(huì)被省略成空。解析時(shí)用 DOM 而不是正則是因?yàn)?XML 屬性順序可能變正則容易漏掉多graphics節(jié)點(diǎn)的情況。多顯示器虛擬機(jī)通常有多個(gè)graphics標(biāo)簽?zāi)阈枰A羧慷皇侵蝗〉谝粋€(gè)。4.3 在 Qt 窗口內(nèi)呈現(xiàn)訪客畫面三種方案第一種方案是調(diào)用remote-viewer外部進(jìn)程把它的窗口嵌入到 Qt 主界面。做法是用 Linux 窗口系統(tǒng)提供的嵌入接口把子進(jìn)程的winId塞進(jìn)QWidget::createWindowContainer。好處是實(shí)現(xiàn)簡(jiǎn)單不用管 SPICE 協(xié)議的細(xì)節(jié)壞處是跨平臺(tái)性差macOS 或 Windows 上表現(xiàn)不一致而且remote-viewer必須預(yù)先安裝。第二種方案是使用 spice-gtk 的 Qt 適配層核心類是SpiceSession和SpiceDisplay。它可以在 Qt 里直接渲染 SPICE 畫面支持鼠標(biāo)、鍵盤、剪貼板轉(zhuǎn)發(fā)。代價(jià)是你得把整個(gè) spice-gtk 庫(kù)鏈進(jìn)項(xiàng)目對(duì)資源要求較高。第三種方案是 VNC 的幀緩沖開(kāi)源庫(kù)比如 libvncclient你在 Qt 里用一個(gè)QWidget的子類接收幀緩沖數(shù)據(jù)然后轉(zhuǎn)成QImage渲染。這個(gè)方案不依賴外部程序但視頻編碼和解碼全得自己處理性能瓶頸明顯。我的評(píng)價(jià)是如果只是做管理工具第一種最省事如果要做完整桌面體驗(yàn)第二種子碼流最穩(wěn)第三種只適合臨時(shí)測(cè)試。4.4 圖形參數(shù)調(diào)整autoport 與端口沖突autoportyes的意思是讓 libvirt 自動(dòng)分配一個(gè)可用端口但自動(dòng)分配意味著你不知道具體端口必須在域啟動(dòng)后再去讀 XML才能拿到真實(shí)端口號(hào)。這在拼接spice://127.0.0.1:5900連接地址時(shí)是必須的。如果你指定固定端口port5900那么多個(gè)虛擬機(jī)不能同時(shí)設(shè)置相同端口否則后啟動(dòng)的域會(huì)失敗。我在資源里看到它封裝了一個(gè)“等待端口就緒”的狀態(tài)機(jī)域啟動(dòng)后每 500 毫秒輪詢一次 XML 里的graphics端口最多等 30 秒超過(guò)就報(bào)錯(cuò)。這個(gè)設(shè)計(jì)很實(shí)用因?yàn)?QEMU 從創(chuàng)建到監(jiān)聽(tīng) socket 有延遲立即讀端口會(huì)拿到空值。5. 避坑排查連接、權(quán)限、顯示三類問(wèn)題的根因清單這一章是我把常見(jiàn)問(wèn)題整理成清單的部分。所有條目都遵循“現(xiàn)象 → 原因 → 解決”的順序直接對(duì)應(yīng) qt-virt-manager 里最容易踩的五個(gè)坑。5.1 連接報(bào)錯(cuò)“認(rèn)證失敗”但用戶名密碼明明是對(duì)的現(xiàn)象使用qemussh://userhost/system連接遠(yuǎn)程宿主機(jī)程序提示authentication failed但在終端里用同樣的賬號(hào)執(zhí)行virsh list --all卻正常。原因SSH 密鑰與 libvirt 認(rèn)證回調(diào)的沖突。libvirt 通過(guò) ssh 管道連接遠(yuǎn)端后如果遠(yuǎn)端 libvirtd 要求 SASL它會(huì)繼續(xù)走virConnectAuth回調(diào)但本機(jī) SSH 層已經(jīng)用了密鑰登錄沒(méi)有可交互輸入的 TTYSASL 拿不到額外憑據(jù)。解決改用已經(jīng)配置好的 SSH 密鑰組合讓整個(gè)鏈路不需要交互。在本地執(zhí)行ssh-keygen并把公鑰加到遠(yuǎn)端然后確認(rèn)遠(yuǎn)端/etc/libvirtd/libvirtd.conf里auth_tcp設(shè)為none或者與 ssh 認(rèn)證不沖突。如果你堅(jiān)持要 SASL就要確保本機(jī)有可用的 keychain 代理而不是依賴回調(diào)輸密碼。5.2 啟動(dòng)域提示權(quán)限不足但用戶已經(jīng)加入了 libvirt 組現(xiàn)象普通用戶在 qt-virt-manager 里能列出域但啟動(dòng)時(shí)報(bào)internal error: process exited或者cannot access /var/lib/libvirt/images/xxx.qcow2。原因用戶雖然加入了libvirt組但磁盤鏡像文件的權(quán)限是 600屬于 root。libvirtd 啟動(dòng) QEMU 進(jìn)程時(shí)以 root 身份運(yùn)行所以 root 自己能讀寫但用戶會(huì)話對(duì)文件的訪問(wèn)仍然被系統(tǒng)權(quán)限攔截。libvirt組的權(quán)限只管 libvirt 的守護(hù)進(jìn)程控制不管是宿主機(jī)文件系統(tǒng)權(quán)限。解決給鏡像文件設(shè)置合理的 ACL例如把/var/lib/libvirt/images下所有 qcow2 文件的組改成libvirt并給組讀寫權(quán)限。另外一個(gè)隱蔽點(diǎn)AppArmor 對(duì) QEMU 的訪問(wèn)控制可能未放行特定路徑在 Ubuntu 上需要在/etc/apparmor.d/usr.sbin.libvirtd里添加路徑規(guī)則并 reload否則啟動(dòng)會(huì)直接被拒絕。5.3 SPICE 黑屏或連接后一直轉(zhuǎn)圈現(xiàn)象虛擬機(jī)域啟動(dòng)正常remote-viewer 連接 SPICE 地址看到黑屏或無(wú)限轉(zhuǎn)圈但 VNC 連接同一個(gè)域卻正常。原因SPICE 協(xié)議在 TLS 與非 TLS 端口之間切換時(shí)客戶端用了錯(cuò)誤的連接前綴。如果你在 libvirt 里沒(méi)有配置 TLS只監(jiān)聽(tīng)了普通端口客戶端卻用spice://默認(rèn)走 TLS就會(huì)一直握手失敗。另一個(gè)原因是 spice-guest-tools 沒(méi)裝guest 內(nèi)沒(méi)有 SPICE 的顯卡驅(qū)動(dòng)導(dǎo)致顯示輸出沒(méi)有推送到 SPICE 通道。解決在 Qt 代碼里拼接地址時(shí)顯式使用spice://127.0.0.1:端口同時(shí)確認(rèn) libvirt 的graphics節(jié)點(diǎn)里沒(méi)有開(kāi)啟tlsPort。如果 guest 是 Windows先安裝 spice-guest-tools如果是 Linux確認(rèn) spice-vdagent 服務(wù)運(yùn)行中。我還會(huì)用virsh domdisplay去對(duì)照實(shí)際生成的地址排除端口讀錯(cuò)的可能。5.4 列表里能看到域但雙擊啟動(dòng)無(wú)響應(yīng)現(xiàn)象qt-virt-manager 的域列表能正確顯示所有虛擬機(jī)狀態(tài)顏色也正常但雙擊啟動(dòng)一個(gè) shutdown 狀態(tài)的域時(shí)UI 沒(méi)有任何反饋后臺(tái)日志也沒(méi)有 libvirt 錯(cuò)誤。原因極可能是同時(shí)連接了多個(gè) libvirt 驅(qū)動(dòng)列表展示的數(shù)據(jù)來(lái)自qemu:///system而雙擊后的啟動(dòng)操作卻因?yàn)榇a內(nèi)部 URI 寫死或變量未更新被發(fā)送到另一個(gè)連接會(huì)話。更隱蔽的是界面上顯示的域是持久域但啟動(dòng)操作調(diào)用的是virDomainCreate而不是virDomainCreateXML而當(dāng)前域?qū)ο笫菑牧斜砭彺胬锬玫膶?duì)象過(guò)期。解決在程序初始化時(shí)只維護(hù)一個(gè)全局的連接狀態(tài)值。域列表的每個(gè)條目都必須保存它所屬的virConnectPtr指針雙擊時(shí)直接使用同一條連接。還要在啟動(dòng)前調(diào)用virDomainGetState刷新一次狀態(tài)避免操作一個(gè)大緩存里已經(jīng)失效的域?qū)ο蟆_@個(gè)坑在虛擬化面板里非常常見(jiàn)尤其是實(shí)現(xiàn)了跨后端列表合并之后。5.5 狀態(tài)輪詢把界面卡死甚至是假死現(xiàn)象虛擬機(jī)數(shù)量超過(guò) 5 個(gè)時(shí)界面開(kāi)始出現(xiàn)明顯卡頓數(shù)量達(dá)到 20 個(gè)時(shí)按鈕點(diǎn)擊后要等好幾秒才有反應(yīng)。原因在住線程里做了同步輪詢。virDomainGetInfo對(duì)每個(gè)域都要發(fā)一次 libvirt 調(diào)用如果虛擬機(jī)處于暫?;蜣D(zhuǎn)換狀態(tài)這個(gè)調(diào)用可能阻塞幾百毫秒。Qt 主線程一旦阻塞整個(gè)事件循環(huán)停擺表現(xiàn)為窗口無(wú)響應(yīng)。解決把所有輪詢邏輯移進(jìn)QThreadPool界面里只接收信號(hào)更新。輪詢間隔至少保持 2 秒不要低于 1 秒否則 QEMU 和 libvirt 內(nèi)部的鎖競(jìng)爭(zhēng)會(huì)拖慢原本正常的操作。我在資源里看到它還實(shí)現(xiàn)了“輪詢暫停機(jī)制”當(dāng)用戶正在執(zhí)行快照或遷移操作時(shí)自動(dòng)拉長(zhǎng)輪詢間隔減少干擾。6. 進(jìn)階技巧把域列表接進(jìn) Qt 模型層讓界面自己刷新做到這一步你已經(jīng)能把連接、域操作、顯示輸出跑通。最后一個(gè)值得長(zhǎng)期沿用的技巧是用QAbstractListModel管理域列表而不是在 QWidget 里直接 push 數(shù)據(jù)。這套模式的收益要等虛擬機(jī)數(shù)量變大、狀態(tài)頻繁變化時(shí)才能體會(huì)到模型驅(qū)動(dòng)視圖數(shù)據(jù)變化自動(dòng)通知界面代碼不用到處手動(dòng) update。一個(gè)簡(jiǎn)易的模型頭文件長(zhǎng)這樣// domain_list_model.h #include QAbstractListModel #include QVector struct DomainItem { virDomainPtr dom; QString name; int state; // libvirt 的狀態(tài)碼 }; class DomainListModel : public QAbstractListModel { Q_OBJECT public: enum Role { DomainNameRole Qt::UserRole 1, StateRole, DomainPtrRole }; int rowCount(const QModelIndex parent QModelIndex()) const override; QVariant data(const QModelIndex index, int role) const override; QHashint, QByteArray roleNames() const override; private: QVectorDomainItem m_items; };核心思想是重寫data()方法讓角色返回對(duì)應(yīng)字段。當(dāng)輪詢線程拿到新?tīng)顟B(tài)時(shí)不要整個(gè)模型重置只更新對(duì)應(yīng)行并發(fā)送dataChanged信號(hào)。這樣列表視圖只重繪變化的行刷新成本大幅降低。我在實(shí)現(xiàn)時(shí)會(huì)額外加一個(gè)state到顏色的映射比如 1running用綠色5shutdown用灰色讓用戶一眼看出運(yùn)行狀態(tài)。從那以后我每次把 qt-virt-manager 部署到新環(huán)境都強(qiáng)制走一遍流程先驗(yàn)證virsh -c qemu:///system list --all能看到正常列表再啟動(dòng)一個(gè)測(cè)試域再用 qt-virt-manager 連接并執(zhí)行一次啟動(dòng)和關(guān)閉最后用virsh domstate反向校驗(yàn)界面顯示和實(shí)際狀態(tài)一致。這套流程給過(guò)我很多次后悔藥也讓我少背了很多個(gè)“面板顯示正常但虛擬機(jī)起不來(lái)”的黑鍋。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
综合网欧| 亚洲国产91精品一区二区久久| 色色五月婷婷| 97精品网| 懂色av中文字幕一区二区三区天美 | 高清国产成人无码| 91 综合 色| 中文字幕狠狠玩| 91九色丨风韵犹存| 青青草中出视频| 96久久科窝| av在线一区二区三区| 色踪合AV| 91视频成人福利网站在线一区| 国产在线激情视频| 四季av一区二区凹凸精品小说| 激情五月天视频| 亚洲日韩精品久久久久一区壹牛| 精品久久9| 97综合在线观看| 国产aⅴ无码片毛片一级网站| 亚洲综合伊人无码久久| 校园春色欧美| 久久久久久久久9| 亚洲偷拍自拍在线视频| 最新亚洲黄色免费电影| 亚洲综合 欧美| 亚洲视频,小说| 伊人青青一区成人视频在线观看区| 中文字幕精品日韩中文字幕| 操高情无码| 伊人专区一区二区三区| 3p国产色噜噜一区| 思思99热| 欧美在线啊啊啊 | 国产后入精品| 国产超碰人人操| 精品人妻一区二区三区鲁大师| 秋霞福利网| 国产农村妇女精品一| 日韩免费人妻色情网站| 婷色五月天| 五月丁香综合| www四虎| 高清无码网址| 免费看美国人人爽,人人操| 五月丁香狠狠爱| 色狠狠色| 欧插网站| 日韩无码久久熟女一级片| 中文字幕在线观看网页| 青青草伊人久久| 99热超碰| 亚洲精品视频二区| 亚洲限制级在线| 亚洲国产精品久久久久婷婷青年| 欧美视频在线第3页| 天天影视综合网欧美精品| 亚洲精品三| 无码日韩网站| 日韩 人妻 精品| 91校园春色长篇| 日韩黄色成人性爱| 欧洲熟妇xxXx欧美老妇裸体| 中文字幕在线观看丝袜| 亚州宗合另类| 亚洲 图片 欧美 色图| 人人搡人人肉久久精品| 超碰九九| 亚洲h片在线免费观看| 一级岛国大片| 免费A V在线播放| 五月婷婷久久综合| 91成人在线| 国产精品久久久久久9999| 国产国产亚洲一二三久久| 高精欧美色| 99热这里只有精品18| 性夜影院爽黄A爽免费动漫| 亚洲超碰97| 无码外流操逼视频| xxx0国产在线播放| 9 9精品一区二区三区| 女同在线视频一区| 天堂av最新电影网| 亚洲精品一区二区日本| 激情综合网五月婷婷五月天| 一牛影视久久久一区二区三区| 天天做天天爱天天爽AV| 91成人亚洲色图| 九九九九国产| 亚洲欧洲精品视频发布| 五月婷婷激情| 91观看 国产白丝| 中文字幕熟女人妻丝袜丝| 99啪啪| 亚洲性少妇| SS久久| 爱妻综合网| 91亚洲狠狠色| 日韩特级毛片免费观看全集| 亚洲久久久久| 日韩美女操b| 日韩免费人妻色情网站| 中文字幕av一区二区三区人妻少妇 | 午夜一区| 国产高清无码一区二区三区四区皇冠| 久久发布国产伦子伦精品| 97欧美色资源| 插入逼91| 日本三级大片| 美日韩一二三区| 97碰| 情色五月天久久久| 欧美精品三级黄片| 狠狠躁AV| 青娱乐福利99| 日本不卡高清免v欧美日韩在线观看| 日本中文字幕一区| 亚洲av综合伊人久久| 天天综合91在线| 国产性刺激| 丰满人妻一区二区三区免费| 黄网在线播放| 亚洲精品国产熟女久久久| 97亚洲综合| 国产激情在线| 级品肉射| 亚洲熟伦熟妇AV无码春色| 欧美在线视频99| 800zy一区二区| 少妇色欲综合网2| 黄片视频观看| 韩国久久97| 欧美丝袜美女电影一二三四区| 色色九区| 日本天天吊| 国产成人精品一区| 日韩av电影成人在线| 久久不卡一区二区| 亚洲精品一区二区精品| 欧美精品双插| 亚洲国产欧美中日韩成人综合视频| 日本天天人人狠狠在线日美女 | 久久国内| 精品国产乱码久久久影院| 熟女人妻一区二区三区| 加勒比aⅴ| 激情综合五月婷婷| 久久久久久久| 久久欧洲| 午夜超爽| 欧日韩一二三f区| 三级特黄60分钟播放| 美女诱惑在线一区| 秋霞曰韩R级| 亚洲人妻久久久| 国内精品999| 国产真乱mangent| 伦理弟一页| 国产精品久久成人免费| 激情综合网亚洲| 久啪| 久久伊人大香蕉| 免费a级毛片av无码久久精品中文字幕| 中文字暮97| 日韩操逼性鲍| 一区二区三区不卡视频| 国产人妻精品久久久一区二区三区 | 国产精品操| www.一本大99| 99这里有精品| 99精品视频在线观看免费| 91国产大片| 国产一区二区成人av在线播放| 超碰69| av天堂影视中文在字幕在线中文| av毛片aaaaa免费看| 久久人妻无码毛片A片麻豆| 中文字幕 国产区| 白丝被操91| 综合色久欲| 黄色性爱网网| 欧美高清色| 亚洲经典啪啪| 久久黄片国产一区二区| 青青草好吊色| 大香蕉日亚洲日本亚大 | 中文字幕五区| 九月丁香综合网| 啪啪啪综合| 久久九九一区二区三区成人| 翔田千里av一区二区三区| 中文三一区| 91在线/欧洲| 色嘟嘟人妻天堂网| 91N五十路| 成人三级片无码| 永久电影三级在线观看| 日本天堂在线播放| 亚洲天天影视综合网| 宅男午夜在线视频| 色色色欧美| 男人网站婷婷| 熟妇视频一区二区三区在线观看| 婷婷久草| 在线观看色视频| 日本人妻最新在线中| 精品一区二区三区18| 超碰98综合网| 久久大线蕉一区| 精品久久視頻在线| 日本福利二区视频| 五月天大香蕉| 啊视频在线| 日本一本道A级黄色毛片试看60分钟| 欧美九一精品久久久熟妇| #NAME?| 欧美亚洲国内自拍| 综合国产97| 人妻丝袜无 码视频专区| 婷婷亚洲五月***久久| 黄页视频网站野外| 无码免费在线观看黄色片| 私人尤物在线精品不卡| 无码久久亚洲高清,| 射久久| 中文 人妻 制服| 中文字幕在线免费观看 | 日韩色图 一区二区| 中文字幕人乱码中文字的预防方法 | 好看的91视频| 欧美影音在线| 日日爽熟女| 日日躁狠狠躁天天躁精品| 伊人嫩草| 大香蕉78| 国产精品激情久久久久久久| 久久99人妖视频国产| 欧美亚洲日本视频久久久 | 欧色网址| 免费无码婬片AAAA片直播色戒| 久久久性| 熟女色综合久久| 岛国精品视频在线观看| 婷婷丁香五月激情啪啪| 91久久精品国产| 午夜呻吟欧美| 欧美日本不卡| 91香蕉国产尤物视频| 国产色综合亚洲色综合吹潮| 无码少妇精品一区二区60岁老人| 东北女人av| 欧美色五月| 校园春色五月天| 欧美天天综| 国产一区96在线| 超碰亚洲97| 国产18精品亚洲精品| 欧美大香蕉专区网| 99热精品在线播放| 日韩中文字幕av在线播放| 加勒比海成人视频网| 久久久久久99999国产精品| AV色图| av橘色网站| 97爱| 亚洲图片偷拍视频区| 99色| 久久久久久裸体| 97超碰欧美中文字幕| 操亚州| 亚洲欧美色综合| 国产久久男人天堂| 亚洲性天堂| 曰韩操B| 婷婷丁香五月激情啪啪| 啊啊啊啊啊在线视频| 风骚少妇视频中文字幕| 亚洲一区二区三区在线激情| 欧美日韩国内不卡| 性吧在线视频| 人人妻人人澡人人爽人人精品浪潮| 91亚洲黄色网| 亚欧成人综合影院| 熟女一区二区| 国产老女人久久毛| 亚洲超碰在线| 91网站18+| 欧美色www亚洲国产阿娇要播| 日逼国产| 91老熟女逼| 丝袜狂射91| 亚洲 欧美综合| 欧美大香蕉专区网| 人人搡人人肉久久精品| av网站在线看| 日本熟妇熟色97一本在线观看| 天天拍天| 青草草免费网站av| 91丝袜在线观看视频在线观看| 丝袜加勒比| 亚洲高清无码在线桃色| 欧洲精品在线播放| 日韩欧美日韩| 韩国一级婬片A片AAAAA| 91中文字幕在线观看| 亚洲制服aⅴ中文字幕| 久久久久久大| 蜜臀一区二区三区在线| 91青视频| 九九九国产精品| 国产日韩精品suv| 97超碰国产精品| 国产精品午夜精品| 国内自拍 日韩激情 99| 97中文综合| 亚洲中文字幕三级在线| 国产精品一区在线播放| 人人操人人干网页| 日日干夜夜欢| 九九黄色视频在线观看| 欧美少妇高潮| 97二区四区| 精品人妻视频入口| 一区二区三区色综合| 视频黄色国产一级| 伊人96在线| 亚洲五月天激情| 熟妇人妻精品一区二区| 美女露胸露奶头| 亚洲一区二区三区春色| 狠综合网| 91一区二区| 97久久精品| 天天摸夜夜摸| 国模无码一区二区三区在线| 日本孕妇孕交| 亚洲午夜AV| 日韩成年人性爱视频| 人妻啊啊人妻啊啊| www.亚洲成人一区| 亚洲在线A| 久久人妻丝袜一区二区三| 亚洲天天操| 日日橹狠狠爱欧美超碰| 国产亚洲综合欧美一区| 天天干天天舔| 久久久久久人| 九九九久久久久| 国产精品一区二区校花| 日韩欧美久久婷婷网站| 久久婷婷五月综合| 亚洲国产av中文字幕久久| 麻豆天美在线| 四虎免费视频| 久久黄黄| av午夜影院在线播放| 亚洲精品 欧美97色色| 天天综合色电影| 强奸乱伦AV网站| 国产美女91| 色女99一级片在线观看| 91麻豆天美国产欧美日| 精品国产一区二区三区香蕉欧美| 超碰欧美97资源| 国产网站在线播放| 日韩精品9区| 五月天开心网| 亚洲砖码砖专无区2023| 天天影视色香欲综合网小说| 久超碰这里只有精品| 欧美综合第一| 久久天堂婷婷网| 中国zzijzzijzzwww精品| 91亚洲网站| 涩涩久久精品| 日韩精品怡红院| 好看的久久不射无码影视影院| 麻豆久久久一区二区| 翔田千里无码中出中文字幕| 天天看夜夜看日日干| 999热日韩精品| 久久色激情一区二区三区| 自偷自拍的亚洲视频| 色天使亚洲综合在线观看| 中文字幕色AV| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 久操精品网| 欧洲综合色图| 亚洲天堂男| 日本免费二区三区| 99精品无码| 操曰本熟女| 好看的91视频| 久操97| 蜜臀99精品国产高清在线观看| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 蜜伊人色综合97| 欧美夜夜狠| 丁香五月偷拍| 吻戏激情性巴克| 超碰在线91| 九月婷婷久久| 天天添天天干电影| 手机看片1024你懂的国产| 午夜爽爽爽在线观看永久入口姬片| 国产丝袜欧美在线视频| 欧美的性爱网站免费| 亚洲性爱乱操x| 亚洲涩图欧美| 国产三级片在线观看| 日韩大香蕉| 9精品久久| 国产精品久久久久999| 黑人中出21连凳花野真衣| 久久成年精品| 亚洲图片在线| 色五月AV在线| 久久婷婷成人综合色怡春院| 97在线观看免费视频| 日本淫乱女一区二区三区视频| 测评在线观看AV| 欧美性爱第一区| 国产精品岛国片在线观看| 国产在线精品偷| 裸体美女国产免费久久久网站| 亚洲精品久| 夜夜综合| 偷拍视频青青草在线视频| 久久久国产精品亚洲精品| 后入日本1234| 91狠狠综| 富女玩鸭子一级毛片| 天天亚洲| av绯色| 99综合网| 91N综合网在线| 久久久久久久久久久久色网| 天堂性色| 国产成人无码啪| 天天干,天天日| 欧美久久婷婷| 久久久久久久久久9| 亚洲精品国产日韩无码AV永久免| 在线观看精品国产免费| 97蜜桃综合| 粉嫩av一区二区三区四季| 无码精品啪啪啪一区二区三区三州| 96精品久久| 日韩免费三级黄片电影| 天天插天天射| 久久久内射良家| 国产91亚洲精品一区二区三区| 亚欧Av| 综精品久久久aaaa| 亚洲激情视频| av婷婷色婷婷色六月| 国产午夜福利视频在线| 国产青视频| 91 国产丝袜在线放观看| 躁躁日曰躁2020| 本道综合精品| 色官网在线| 国产99热| 在线情色电影 91大| 97免费在线视频| 免费综合亚洲中文| 天天躁日日躁成人字幕aⅴ| 国产日韩区| 精品久久久九九九孕妇| 日本精品加勒比海一区| 中国熟女老妇仑乱一区二区三区| 啊啊啊啊一区| 欧美日韩亚洲少妇寂寞影院正在播放 | 日本 免费 一区二区三区 久久香蕉 | 巨爆乳一区二区爆乳区| 91九九九馒头| 亚洲国产综合视频| 人人插人人搞人人操| 麻豆国产成人精品| 不卡av在线中文字幕| 亚洲情色婷婷五月天| 亚洲综合另类色图| 亚洲古典另类欧美在线| 日本97久久久精品| 亚洲AV成人精品网站在AV| 美女超碰978| 人人妻人人澡人人爽久久av| 色婷五月天| 91美女国产在线| 五月丁香激情综合| 密臀在线视频| 黄色AV影视| 九九九九热| 射丝袜高跟鞋99| 国产毛片片精品天天看视频| 国产精品久久9| 欧美性爱日韩高清| 伊人991| 黑丝自慰喷水网站| 精品久久97观看在线视频| 日韩有码免费视频| 国产乱伦亚洲色图高清无码| 涩涩久久精品| 激情五月天丁香社区| 欧美综合色,www| 67194无码不卡| 国产Av超碰| 97欧美久久久久久久| 欧美一区二区福利在线| 日日干夜夜欢| 六月丁香五月婷婷| 欧美亚洲国产91在线| 日日夜夜草草草| 国产成人自拍视频在线| 欧美精品成人一区二区在线观看 | 亚洲色色探花| 传媒在线观看一区二区三区| 精品国产网站| 久久东京伊人一本到鬼色| 国产精品乱码久久久久久| 色色色色电影网| 岛国1区2区3区在线观看| 国产精品九九| 亚洲天堂人人妻| 天天激情综合站| 天美传媒精品久久视频| 欧亚第一综合网| 日本精品成人无码| 欧美日韩*字幕一区| 四虎免费视频| 在线99热| 丁香婷婷五月| 综合网少妇| 人妻少妇精品一区二区三区| 少妇一级婬片免费放一级a性色.| 欧美另类丝袜熟女| 亚洲情色五月天 | 欧美顶级黄色大片免费| 97在线免费看视频| 97色色色综合网站| 91色艳| 欧美亚洲日本激情在线| 色综合一区二区三区| 人妻少妇无码| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 中国AAAAAA黄色片| 日本黄色精品| 97国产精品在线观看| 少妇69中文| 婷婷五月成人| 欧美特大黄一级片片免费| 日韩有码 一区二区三区| 91综合天天看| 搡老女人老91妇女熟女| 欧美亚涩| 久久精品一区二区一8| 欧亚乱色熟女一区二区| a亚洲欧美色欲| 国产蜜臀精品一区二区尤物| 蜜桃狠狠色伊人亚洲综合 | 日韩性爱毛片操骚逼| 亚洲图片欧美色| 91欧美色| 欧美色图91| 久久一二三四五六七八九区| 死我十八禁| 激情五月天校园春色网| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 综合欧美日韩在线观看| 国产精品无码在线| 成人性爱全视频观看| 福利操逼| 综合av社区| 日韩性爱小视频| 一二三区操逼国产91| 无码九九| 67914在线兔费成人视频| 亚洲图片在线| 智利AV在线网| 九久久精品| 色99久草| 少妇一区二区三区| 97精品一区二区视频| 影音先锋日本乱伦| 精品亚洲国产成人精品| 天堂中文日本在线观看| 欧美黄片欧美黄片xxx| 亚洲av无线观看| 2020国产精品| 五月天黄色av| 欧美伦乱爱| 色偷偷超碰亚洲| 玖玖综合视频| 日韩性爱长视频免费| 国内精品嫩模A∨私拍小视频| 情趣丝袜无码操逼视频| 看一级特黄a大一片| 黑人黄片在线免费观看| 亚洲男人天堂Av| 亚洲永久AV无码精品秋霞| 中精品一区二区三区| av在线人气| 吉川爱美亚洲二区在线 | 一区二区三区精品黑丝白丝酒店对鸡| 亚洲 无码 偷拍| 亚洲国产97| 婷婷五月天基地| 亚洲 日韩 欧美 国产综合体| 青青操97| 亚州高清AV| 日韩天天综合| 欧美亚洲国产91在线| 3D污黄视频在线观看| 亚洲激情综合| 蜜臀久久久| 日本幼女18+| 五月亭亭六月丁香| 家庭乱伦麻豆| 大香蕉手机视频| 91视频成人福利网站在线一区| 超碰午夜| 家庭乱伦麻豆| 人妻av在线| wwe 天天干.com| 四虎884| 手机在线大香蕉| 韩日色费| 亚洲 日本 一 二 三| 色香伊人| 日产欧美电影一区二区三区| 天天干天天狼在线视频| 日韩欧美水蜜桃人妻| 五月天伊人网| 国产精品午夜高潮呻吟久久av| 91是天天| 啊啊啊啊好疼| 最新国产精品久久精品| 色五月激情AV在线| 日本性交操一区二区不卡系列| 97综合在线| 亚洲。天堂。日本在线观看| 精品人妻一区二区三区四区石在线| 国产精品亚洲免费| 国产精品高朝久久久久久久| 7777奇米影视久久| 久久综合乱子伦国产免费| 超碰九九| 六十路日本| 96久久久精品| 日韩欧美成人性爱在线| 国产农村妇女精品1区二区| 91人妻人人澡人人爽人人精品| 激情久久av一区av二区av| 亚州中文字幕超碰97| 人人妻人人狠人人| 天天操天天看| 激情小说成人日本无码一| 国产亚洲99久久精品| 伊人在线大香蕉二。| 日韩亚洲中文有码视频| 青青草大香蕉在线视频| 精品精品精品| 高树玛利亚无码流出| 91黑丝露脚| 大香蕉免费3| 成人AV素股で擦久久| 午夜黄色免费在线观看| 亚洲国产尤物yw在线观看| 97久久久久| 日韩一级二级三级免费看完整版国语版 | 91女日逼| 懂色av中文字幕| 91操熟女视频| 九九九九九九九九九九九蜜桃| 麻豆伊人网| 国产精品九9| 日本三级小说中文字幕| 色九九九综合| 不卡码视频| 久久天天摸| 91女网站| 夜夜春夜夜操| 国产综合日韩伦理| 欧美v亚洲v日韩v最新在线二区 | 久热这里只有精品9| 欧美少妇高潮久久91| 亚洲码和欧洲精品激情系列| 日韩在线视频1234| 青久操| 1240青青草一区二区三区视频天爱 | 国产91美女视频| 东北熟女91| PMv在线观看| 二男一女成人A片| 欧美偷偷网| 国产丝袜高跟美女av免费观看| 999综合色| 熟女人妻一区二区三区免费看| 亚洲天堂五月天国产| 91粉嫩萝控精品福利网站_精品影音先锋国 | 成人情色一区二区| 啊嗯嗯啊好大好爽| 国产亚洲精品农村妇女 | 爽极品影院| 人妻一区二区三区| 亚洲熟女综合一区二区| 亚洲图片激情综合另类| 欧美另类色图片| 日本ZZ高免费A级视频| 色呦呦呦在线观看视频| 久久久久中出| 久久久四区| www狠狠| 中文字日本乱码| 亚洲无码国产探花在线观看| av国产无码| 夜夜综合| 五月婷婷激情网| 夜夜无码| 噜噜在线| 蜜臀久久99精品久久久久久无删减| 老熟妇一区二区三区…| 清纯唯美第一页| 亚洲成?V人片在线观看福利| 96爱综合| 在线播放一级无码视频| 久久蜜色情在线视频xxx免费观看| 97视频在线免费看| 国产精品亚洲无码| 中文字幕女同在线| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 九九热男人天堂| www.91视频网| 日逼五月天| 色视频蜜乳| 九九九九九九九| 99999精品视频| 噜噜噜无码AV一级一级久久影院| 精品欧美日韩在线观看| 精品亚洲国产成人精品| 国产农村一一级特黄毛片| 色欧美综合| 麻豆伊人网| 成人在线日韩| 亚洲天堂东京热| 国产精品亚洲一级av第二区| 精品无码一区二区人妻久久蜜桃| 一线黄色免费性爱片| 久久精品无码熟妇一区二区三区视频导航| 五月丁香啪| 免费黄色A片| a片偷拍视频| 欧美综合天堂| AV中文字幕三四五| 破处bbq| 97国产色综合| 99久久久无码精品国产人| 久射吧| 97超视频在线观看| 97国产色图| 伊人久久亚洲中文字幕不卡| 国产九月婷婷| 翘臀vidoes| 久久综合18p| 欧美性Fer办公室秘书| 精品国产乱码久久久久久影片| 日日操免费视频| 欧美性爱第一页久久| 成人无遮挡毛片免费看| 日本成人免费一区二区三区| 久久久天堂| 91综合无码| 亚洲无992tv| 这里只有精品97| 欧美日韩色| 色综合一本| 亚洲高清视频在线免费观看| 国产高清自拍视频| 亚洲国产91精品一区二区久久| 麻豆美女丝袜人妻中文| 射综合网| 成人无遮挡毛片免费看| 成人a级高清视频在线观看| 性饥渴少妇av无码毛片| 视频在线观看免费一区二区三区 | 日韩无码成人电影| 麻豆福利视频导航| 精产品久久| 97精品网| 超碰成人国产| 四虎国产成人精品免费一女五男| 亚洲男人的天堂一区二区| 狠狠中文字幕| 屁股久久久久久久久| 超碰98综合网| 亚洲欧美国产精品久久久久久久| 欧美偷拍区| 五月天玖玖资源站| 97视频网站在线观看| 91在线|亚| 久久久神马影院| 欧美97在线欧| 强奸乱伦日韩AV| 啊啊啊啊啊好大好舒服想要| 97色碰| 亚洲91少妇| 激情综合网一盗摄| 日韩亚洲精品一区二区| 欧美日本天堂| 成 人片 黄色大片| 97人肏| 超碰日韩人妻| 久久有碼| 欧美性xxxxx狂欢| 日韩欧美中文| yazhouzaixian| 91午夜无码| 在线人妻熟女一区二区三区四区五区| 欧美天天弄| 激情五月天婷婷| 啪啪性爱免费视频| 亭亭丁香激情| 国产精品国产精品国产| 欧美亚洲日韩人妻在线观看| 97se亚洲| 亚洲1区| 97在线观看免费| 最新日韩黄片| 91热色| 97最新在线播放视频| 一区二区三区四区久久视1| 中文字幕蜜乳av| 91中文精品日韩欧美在线| 国产一区二区成人av在线播放| 99热这里只有精| 不卡av免费在线网址| 欧美91色| 日本天天吊| 欧美一区二区日韩三区| 亚欧美无遮挡| 在线观看综合精品亚洲| 亚洲欧美清纯| 无码视频一区二区| 人人看人人摸人人色| 少妇的嫩逼图片| 亚洲最大黄网| 蜜乳av首页| 啪啪啪精品| 国产日韩怡红院| 91成人在线| 情色日播放AV| 色噜噜狠狠色综无码久久合欧美| 国产日逼视频| 综合欧美激情网| 综合久久久久久久久91| 天天综合中文字幕 91| 伊人丝袜美腿高跟在线观看高清| 男人的天堂啪啪啪啪啪蜜桃不卡| 无码黑人精品一区二区三区三| 91在线一起| 成人热久久精品| 色一射色一射| 欧美午夜一区二区三区| 久久久日本电影| 久久婷婷电影网| 天天天干977| 天天综合站| 啊啊啊慢点| 性91| 九九九只有精品| 色97干| 国产v亚洲v日韩v欧美v片另类| 一二三四区电影| 婷婷丁香人妻 | 亚洲97网站| 久久久久幕乱码| 亚洲色欧| 日本人妻伦在线中文字幕| 激情久久av一区av二区av| 强奸乱伦免费网站| 国产精品另类| 少妇蹲下买菜露大唇0| wwe 天天干.com| 丝袜综合| 国产欧美后入| 中文在线视频| 国产精品麻豆成人av| 久久区| 欧美碰碰综合色| 国产精品乱码久久久久久| 东北女人的毛片| 人人操人人射人人干| 大香蕉男人的天堂| 久久久精品九| 日本欧美中文字幕| 国产精品亚洲一区二区三区四区| 大香蕉久操| 久婷婷一区| 在线看污网站| 久久午夜鲁丝片| 人人插人人摸人人| 黄色网址在线免费观看| 在线 制服丝袜中出 人妻| 97超碰在线资源网站| 天堂在线一区二区| 大肥女高潮bbwbbwhd视频| 无码国产Av| 五月婷婷六月丁香| 亚洲天堂少妇| 午夜福利免费精品视频| 丁香激情五月| 黄页网站成人免费| 国产色呦呦| 亚洲色欲天天人妻无码系列专区| www.99热在线只有精品| 九九热免费在线国产视频伊人五月| 中文字幕三四五区| 色网在线| 一区二区三区视频| 中国熟女老妇仑乱一区二区三区| 日韩天堂av电影在线观看| 亚洲欧综合另类无码一区| 五月天伊人| 欧美大码在线视频| 午夜久久久| 天天躁日日躁AAA片李宗瑞| 色婷婷亚洲婷婷| 99日视频在线免费| 久久,精品一二三| 久久久96| 九九热精品免费视频| 国产欧美日产一区二区三区 - 国产欧美日 | 日韩无码精品综合久久| 欧美伦乱爱| A 天堂在线观看视频| 亚洲丝袜少妇在线| 亚洲免费人妻在| 精品人妻视频一区二区在线播放| 久久男人精品| 男插女青青影院| 日韩国产精品人妻无码久久久| 久久久人体| 日韩免费三级黄片电影| 欧美99| 日韩欧美三级| 人人操天天爽| 大香蕉综合在线| 亚洲欧美日韩偷拍色图| 久久激情视频| 91女优在线观看 | 中文字幕狠狠玩| wwwxxx日本爽| 嗯嗯嗯,草死我| 男人的天堂色偷偷青青草视频婷婷网| 亚洲色 国产 欧美 日韩| 欧洲亚洲人人爽爽视频| 99热这里只有精品8| 尤物视频一区| 国产精品粉嫩福利在线| 国产女上位好爽在线| 国产懂色精品国产av| 亚洲一区二区三区春色| 久久精品国产亚洲av水密被窝| 一区二区三区无卡视频在线观看| 一区操逼| xxx亚洲午夜天堂| 影音先锋每日最新资源在线观看 | 人人操人人摸人| 中文字幕乱码人妻二区三区| 亚州一区二区| 久久激情婷婷| 亚洲a色| 亚州精品丝袜-不卡成人免费| 五月天开心网| 欧美天天插| 精品少妇后入一区二区三区四区人妻巨乳| 90后性网国产欧美| 婷婷99狠狠| 亚洲AV无码天美传媒一区| 亚洲不卡AV在线| 伊人97色天使| 美腿丝袜偷拍亚洲欧美| 另类专区加勒比| 一区e区三| 色在线视频导航| 9 1果冻精品视频| 97视频在线免费观看| 精品无码久久久久久久久果冻糖心| 国产在线播放成人免费| 在线播放一级无码视频| 亚洲色 国产 欧美 日韩| 日韩视频啪啪| 国产成人亚洲精品自产在线| 国产精品91一样| 天海翼久久| 熟妇视频一区二区三区在线| 成人五月天丁香激情综合| 男人高清无码一区二区| 国产 码在线成人网站| 中文字幕制服欧美久久一区| 中文欧丝袜诱惑| 白丝av| 成片免费观看视频大全| 亚洲永久永久永久永久一级一级一级精品| 玖玖资源中文字幕制服丝袜| 九九九九热只有精品| 中文字幕中文字幕一区二区| av爱爱爱| 日本国产二线女色| 99精品在线播放| 日本精品免费一区二区三区四区| 丰满人妻一区二区中文| 91精品操美女| 精品一区二区三区麻豆| 色9999日韩国产| 区日韩亚洲乱码av电影| 亚州欧美另类| 久久99热这里只频精品6学生| 97超碰色五月| 少妇精品久久| 人妻加勒比东京热| 久热久操| 日本一级二级三级网站| 亚洲国产青青| 国产av波波国产精品| 成人在线午夜视频一区| 久久久久免费看少妇A片特黄| 四虎国产成人精品免费一女五男| A级片日韩欧美国产欧美视频精选观看| 久久久中文| 91日日夜夜| 综合网色| 3PAV乱伦视频| 麻豆传媒一区二区在线观看| 亚欧无码在线| 91四海无码日韩欧美| 欧美成97爱| 爱爱动态120秒| 狠狠干2020| 日韩人妻中文视频| 国产农村妇女精品1区二区| 男女猛烈无遮掩视频免费软件| 亚洲AV不卡在线观看尤物| 91老熟女逼| 日韩一999精品| 高清无码在线播放网站| 美女让帅哥通她小鸡鸡| 久操精品网| 国产精品免费1区2区视频| 99久在线精品99re8a| 粉嫩在线一区二区懂色| 91狠狠综| 夜夜黄| 伊人伊人LD| 乱欲一区二区| 91丝袜在线观看| 9久久美女首页| 五月天激情综合网| 色官网色综合| 国产一区二区三区免费视频在性观看| 亚洲影视第一页| 久久久性| 97人人操人人摸| 欧美综合网| 亚洲综合有码| 97操97干| 久久九九热| 97草草| 亚洲蜜臀懂色| 成人精品在线观看| 免费久久精品麻豆一区二区av| 激情五月综合开心五月| 火箭成精品视频884必出精品| 超碰综合97在线| 色拍偷亚洲| 小草三级久久观看| 玖玖综合.com| 亚洲 中文 女同| 99免费在线视频| 五月天综合网| 熟妇熟女亚洲天堂网| 伊人色综合超碰| 啊啊啊在线观看免费视频| 久久夜嗨| 久久精品欧美一区蜜桃| 亚洲国产精品久久久久婷婷青年| 深田咏美亚洲精品福利社| 夜嗨影院| 色噜噜综合网| 粉嫩国产精品久久久| 欧美少妇性乱| 舔人妻中文免费视频| 超碰97网站| 天天弄天天操| 91狠狠综合久久久| 92人人操人人| av优播| 日本一二三免费久久| 中文人妻av高清一区| 强奸国产精品视频| 男人的天堂2019AV| 天天综合网1| 亚洲在饯| 秋霞影音一区二区三区 | 色爱天堂| 亚洲导航深夜福利| 蜜色网色哟哟| 亚洲,欧美,综合网| 久久精品国内Av熟女高清| 91人妻尻屄视频| 九热大香蕉| 亚洲AV永久无码精品成人调教| 日本操逼无码| 婷婷五月色| 亚洲丝袜色图| 成人怡红院| 亚洲精品精品一区二区| 中文字幕少妇色| 日韩色女精品| 久久无码成人| 情色五月天久久久| 国产在线观看一区二区三区| 久久亚洲AV无码专区首页| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 中文字幕超碰CAO| 国产粉嫩蜜臀av一区二区三区| 99热最新网址| 亚洲欧美综合网| 桃花色涩综合影院| 日韩精品99久久久久久中文字幕| 校园春色综合香蕉| 亚洲欧洲精品视频发布| 丝袜美腿诱惑亚洲欧美视频在线观看 | 亚洲av成人精品一区| 精品视频专区| 久久婷婷影院| 久久久穴999| 91人人臊| 天天天天天超碰| 少妇高潮特黄A片| 国产亚洲精品A在线观看下载| 91美女在线精品视频| 亚洲色图A| 囯产乱伦一区二区三女| 色小视频蜜乳| 美女大乳久久久久久久女人18| 盗摄女人妻在线| 97在线观看免费视频| 美女黄页网站| 激情婷婷丁香网| 久久久久人| 嫩草 我啊~嗯~在线| 99操碰| 无码乱人伦中文视频| 无码最新| 久久国内| www.久久最新地址| 国产www色在线观看|