Linux

kvm 快照儲存在哪裡?

  • January 14, 2018

我在 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 程序終止。只有這樣,“刪除”的文件才會真正被刪除,其占用的空間才會作為空閒空間返回給文件系統。

引用自:https://serverfault.com/questions/238946