kvm 快照儲存在哪裡?
我在 KVM/ubuntu 上執行了幾個 VM,它們都從
-snapshot
參數開始(VM 只計算幾個可以在重啟後銷毀的東西)。在我讀過的文件中,更改不會寫回圖像,而是儲存在臨時文件中,並且在關機後會被刪除。
現在,我想知道這些“臨時文件”儲存在文件系統的什麼位置?
嘗試使用 lsof 查找快照儲存:
# ps aux | grep kvm $PID ? Sl 5289:40 /usr/bin/kvm ... # lsof -n -p $PID COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
或一個命令:
# lsof -n -p $(ps ax | grep [k]vm | awk '{print $1}' | head -1)
我只是想知道“-snapshot”將其更改儲存在哪裡,最終發現:它似乎使用與“mktemp”相同的算法。
也就是說,如果您將環境變數 TMPDIR 設置為某個目錄的路徑,那麼它將其臨時數據儲存在那裡。
否則,它將它們儲存在 /tmp 中。
因此,如果要將臨時快照保存在 /var/tmp/kvm 而不是 /tmp 中,請按如下方式執行 qemu:
$ TMPDIR=/var/tmp/kvm qemu-system-x86_64 -enable_kvm ...
或者,您可以先“導出”變數:
$ export TMPDIR=/var/tmp/kvm $ qemu-system-x86_64 -enable_kvm ...
如果您啟動多個 VM,這可能會更好,因為您不需要為每次呼叫指定變數。
此外,如果您希望能夠保留更改而不是在 VM 關閉時失去它們,請記住還要在 qemu 選項中添加“-no-shutdown”。
使用 -no-shutdown,vm 在關閉後進入停止狀態,但 vm 程序保持活動狀態。
這允許您連接到 KVM 監控控制台並發出“commit”命令,該命令會將臨時文件中的所有更改寫回 VM 映像文件。之後,您發出“quit”命令,它實際上終止了 VM 程序。
沒有“-no-shutdown”,你就沒有機會發出“commit”命令,沒有它,一旦VM程序關閉,臨時文件中的所有更改都會失去。
另一個注意事項:一旦虛擬機使用“-snapshot”啟動,$TMPDIR 指定的目錄中不會顯示任何文件。
該文件在那裡,但 qemu 在創建文件後立即刪除該文件,因此它不會顯示在目錄列表中。
但是 qemu 程序仍然持有對文件的引用,因此文件一直保持活動狀態,直到 qemu 程序終止。只有這樣,“刪除”的文件才會真正被刪除,其占用的空間才會作為空閒空間返回給文件系統。