QEMU/監控器
當 QEMU 執行時,它提供一個監控器控制檯,用於與 QEMU 互動。透過各種命令,監控器允許您檢查正在執行的來賓作業系統、更改可移動介質和 USB 裝置、擷取螢幕截圖和音訊抓取,以及控制虛擬機器的各個方面。
從 QEMU 內部訪問監控器,方法是按住 Ctrl 和 Alt 鍵(或任何“滑鼠抓取”鍵),然後按 Ctrl-Alt-2。進入監控器後,Ctrl-Alt-1 切換回來賓作業系統。在監控器中鍵入 help 或 ? 將顯示所有命令的列表。或者,可以使用 -monitor <dev> 命令列選項將監控器重定向。使用 -monitor stdio 將監控器傳送到標準輸出,這在命令列使用 qemu 時最為有用。
- 幫助 [命令]或者? [命令]
沒有引數時,幫助命令會列出所有可用的命令。要了解另一個命令的更多資訊,請鍵入幫助 命令例如
(qemu) help info
在小螢幕/VM 視窗上,命令列表會滾動得過快,無法讓你閱讀它們。要滾動來回以便閱讀整個列表,請按住 Control 鍵並按 Page Up 和 Page Down。
- 資訊 選項
顯示有關來賓作業系統某些方面的資訊。可用選項為
- 塊– 塊裝置,如硬碟驅動器、軟盤驅動器、CDROM
- blockstats– 讀取和寫入塊裝置的統計資訊
- 捕獲– 活動捕獲(音訊抓取)
- 歷史記錄– 控制檯命令歷史記錄
- irq– 中斷的統計資訊(如果已編譯到 QEMU 中)
- jit– QEMU 的即時編譯器的統計資訊
- kqemu– kqemu 核心模組是否正在使用
- 記憶體– 列出活動虛擬記憶體對映
- 滑鼠– 接收事件的來賓上的滑鼠
- 網路– 網路裝置和 VLAN
- pci– 正在模擬的 PCI 裝置
- pcmcia– PCMCIA 卡 裝置
- pic– i8259(PIC)的狀態
- 配置檔案– 內部分析器的資訊,如果已編譯到 QEMU 中
- 暫存器– CPU 暫存器
- 快照– 列出 VM 快照
- tlb– 列出 TLB (轉換旁路緩衝區),即物理記憶體和虛擬記憶體之間的對映
- usb– 虛擬 USB 集線器上的 USB 裝置
- usbhost– 主機作業系統上的 USB 裝置
- 版本– QEMU 版本號
- vnc– VNC 資訊
- 更改 裝置 設定
更改 命令允許您更改可移動介質(如 CD-ROM),更改 VNC 的顯示選項,以及更改 VNC 上使用的密碼。
當您需要更改 CD 或 DVD 驅動器中的光碟,或在不同的 .iso 檔案之間切換時,請使用 資訊 查詢 CD 或 DVD 驅動器的名稱,並使用 更改 進行更改。
(qemu) info block ide0-hd0: type=hd removable=0 file=/path/to/winxp.img ide0-hd1: type=hd removable=0 file=/path/to/pagefile.raw ide1-hd1: type=hd removable=0 file=/path/to/testing_data.img ide1-cd0: type=cdrom removable=1 locked=0 file=/dev/sr0 ro=1 drv=host_device floppy0: type=floppy removable=1 locked=0 [not inserted] sd0: type=floppy removable=1 locked=0 [not inserted] (qemu) change ide1-cd0 /path/to/my.iso (qemu) change ide1-cd0 /dev/sr0 host_device
- 彈出 [-f] 裝置
使用 彈出 命令釋放連線到指定可移動介質裝置的裝置或檔案。-f 引數可用於強制執行,如果它最初拒絕!
通知 QEMU 塊裝置已調整大小。
$ info block drive-virtio-disk3 (#block790): /guest/mud_vdd (raw) $ block_resize drive-virtio-disk3 16G
將主機檔案新增為 USB 快閃記憶體裝置(您需要預先建立主機檔案:dd if=/dev/zero of=/tmp/disk.usb bs=1024k count=32)
usb_add disk:/tmp/disk.usb
使用資訊 usb 獲取 usb 裝置列表
(qemu) info usb Device 0.1, Speed 480 Mb/s, Product XXXXXX Device 0.2, Speed 12 Mb/s, Product XXXXX (qemu) usb_del 0.2
這將刪除裝置
向來賓傳送滑鼠移動事件。mouse_move dx dy [dz] -- 傳送滑鼠移動事件。示例:[qemu]mouse_move -20 20
您可以透過 sendkey 命令模擬鍵盤事件。語法為:sendkey keys。要獲得鍵列表,請鍵入sendkey [tab]。示例
- sendkey a
- sendkey shift-a
- sendkey ctrl-u
- sendkey ctrl-alt-f1
從 QEMU 0.12.5 開始,存在以下鍵:
| shift | shift_r | alt | alt_r | altgr | altgr_r |
| ctrl | ctrl_r | menu | esc | 1 | 2 |
| 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 0 | minus | equal | backspace | tab |
| q | w | e | r | t | y |
| u | i | o | p | ret | a |
| s | d | f | g | h | j |
| k | l | z | x | c | v |
| b | n | m | comma | dot | slash |
| asterisk | spc | caps_lock | f1 | f2 | f3 |
| f4 | f5 | f6 | f7 | f8 | f9 |
| f10 | num_lock | scroll_lock | kp_divide | kp_multiply | kp_subtract |
| kp_add | kp_enter | kp_decimal | sysrq | kp_0 | kp_1 |
| kp_2 | kp_3 | kp_4 | kp_5 | kp_6 | kp_7 |
| kp_8 | kp_9 | < | f11 | f12 | |
| home | pgup | pgdn | end | left | up |
| down | right | insert | delete |
- screendump filename
捕獲螢幕截圖並儲存到 PPM 圖片檔案。
- wavcapture filename
捕獲虛擬機器的音訊並將其儲存到指定 .wav 檔案中。
- stopcapture index
停止記錄 wavcapture。第一個 wavcapture 的索引為 0。
- commit device或者commit all
在使用 -snapshot 選項執行 QEMU 時,將更改提交到裝置或所有裝置。
- quit或者q
立即退出 QEMU。
- savevmname
將虛擬機器儲存為標籤 'name'。並非所有檔案系統都支援此功能。raw 不支援,但 qcow2 支援。
- loadvmname
載入標籤為 'name' 的虛擬機器。這也可以在命令列上完成-loadvmname
使用info snapshots命令,您可以請求可用機器的列表。
刪除標籤為 'name' 的虛擬機器。
掛起 VM 的執行。
反轉上一次 stop 命令 - 恢復 VM 的執行。
這類似於 PC 上的物理重置按鈕。警告:檔案系統可能處於不乾淨狀態。
這類似於現代 PC 上的物理電源按鈕。VM 將收到 ACPI 關機請求,通常會乾淨地關閉。
- log option
- logfile filename
將日誌寫入指定檔案,而不是預設路徑 /tmp/qemu.log。
為 GNU 偵錯程式 (gdb) 啟動遠端偵錯程式會話。要從主機連線到它,請執行以下命令
shell$ gdb qemuKernelFile (gdb) target remote localhost:1234
x /format address
使用指定格式顯示指定虛擬地址的記憶體。
有關 format 和 address 的詳細資訊,請參閱 xp 部分。
xp /format address
使用指定格式顯示指定物理地址的記憶體。
format:用於指定顯示記憶體的輸出格式。格式分解為 /[count][data_format][size]
- count:要顯示的專案數量(以 10 為底)
- data_format:'x' 表示十六進位制,'d' 表示十進位制,'u' 表示無符號十進位制,'o' 表示八進位制,'c' 表示字元,'i' 表示(反彙編的)處理器指令
- size:'b' 表示 8 位,'h' 表示 16 位,'w' 表示 32 位或 'g' 表示 64 位。在 x86 上,'h' 和 'w' 可以選擇指令反彙編程式碼格式。
address:
- 直接地址,例如:0x20000
- 暫存器,例如:$eip
示例 - 顯示 x86 處理器從當前指令開始的 3 條指令
(qemu) xp /3i $eip
示例 - 顯示 x86 處理器堆疊上的最後 20 個字
(qemu) xp /20wx $esp
Print(或 p)評估並列印給定的表示式。結果將以十六進位制形式列印,但表示式中也可以使用十進位制。如果結果溢位,它將環繞。要在一個 CPU 暫存器中使用值,請使用 $<register name>。暫存器名稱應為小寫。您可以使用 info registers 命令檢視暫存器。
qemu 模擬 i386 的示例。
(qemu) print 16 0x10 (qemu) print 16 + 0x10 0x20 (qemu) print $eax 0xc02e4000 (qemu) print $eax + 2 0xc02e4002 (qemu) print ($eax + 2) * 2 0x805c8004 (qemu) print 0x80000000 * 2 0
有關特定於體系結構的暫存器名稱的更多資訊,可以在以下 qemu 原始碼檔案中找到
用法: sum <地址> <大小>
計算指定記憶體區域的校驗和
用法: memsave <地址> <大小> <檔名>
QEMU 文件中的監視器:https://www.qemu.org/docs/master/system/monitor.html