Я запускаю несколько виртуальных машин на KVM / ubuntu, и все они начинаются с -snapshot
параметр (виртуальные машины вычисляют только несколько вещей, которые могут быть уничтожены после перезагрузки).
Из документов, которые я прочитал, изменения не записываются обратно в изображение, а сохраняются во временных файлах, которые удаляются после завершения работы.
Теперь мне интересно, где в файловой системе хранятся эти "временные файлы"?
Попробуйте использовать 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 ...
Это может быть лучше, если вы запустите несколько виртуальных машин, потому что вам не нужно указывать переменную для каждого вызова.
Кроме того, не забудьте добавить «-no-shutdown» в параметры qemu, если вы хотите сохранить изменения, а не терять их при выключении виртуальной машины.
С -no-shutdown виртуальная машина переходит в состояние остановки после завершения работы, но процесс виртуальной машины остается в рабочем состоянии.
Это позволяет подключиться к консоли монитора KVM и выполнить команду «commit», которая записывает все изменения из временного файла обратно в файл образа виртуальной машины. После этого вы вводите команду «quit», которая фактически завершает процесс виртуальной машины.
Без «-no-shutdown» у вас нет возможности выполнить команду «commit», и без нее все изменения во временном файле будут потеряны после завершения процесса виртуальной машины.
И еще одно замечание: не удивляйтесь, что ни один файл не появляется в каталоге, указанном $ TMPDIR, после того, как виртуальная машина была запущена с помощью «-snapshot».
Файл есть, но qemu удаляет файл сразу после его создания, поэтому он не отображается в списке каталогов.
Но процесс qemu по-прежнему содержит ссылку на файл, и поэтому файл остается активным до завершения процесса qemu. Только тогда «удаленный» файл будет действительно удален, а занимаемое им пространство будет возвращено файловой системе в качестве свободного места.
Вот немного более сжатая версия lsof
команда, использованная выше. В этом варианте есть несколько улучшений. Во-первых, в нем будут перечислены ВСЕ виртуальные машины KVM.
$ lsof -n -p $(pgrep kvm | tr '\012' ,)
Затем вы можете найти результат поиска .img
и .qcow2
файлы, если вы знали, что используете эти расширения для именования образов виртуальных машин.
$ sudo lsof -n -p $(pgrep kvm | tr '\012' ,) |grep -E ".img|.qcow2"
qemu-kvm 3836 root 11u REG 253,0 10737418240 19169281 /var/lib/libvirt/images/vm1.img
qemu-kvm 3895 root 11u REG 253,0 48318382080 19890183 /kvm/vm2.img
qemu-kvm 3924 root 11u REG 253,0 10737418240 19890185 /kvm/vm3.img
qemu-kvm 13594 root 11u REG 253,0 43881005056 69173572 /var/lib/libvirt/images/vm4.qcow2
Вы также можете сделать это и запросить libvirtd
чтобы узнать, какие пулы хранения доступны.
$ sudo virsh pool-list
Name State Autostart
-----------------------------------------
default active yes
$ sudo virsh vol-list default
Name Path
-----------------------------------------
vm1-d-disk0 /var/lib/libvirt/images/vm1-d-disk0
vm2-d-disk0 /var/lib/libvirt/images/vm2-d-disk0
vm3.img /var/lib/libvirt/images/vm3.img
...
Таким образом, путь по умолчанию будет выглядеть следующим образом: /var/lib/libvirt/images
для виртуальных машин, которые используют default
бассейн. Это будет тот же каталог, в котором находятся временные файлы, относящиеся к -snapshot
активность также будет проживать.
Снимки хранятся там, где вы их настраиваете. на моем F14 это в /var/lib/libvirt/images
, но вы можете поиграть с доменами хранения в virt-manager
или virsh
, как вам нравится.
Поскольку я проверял то же самое и не мог найти их нигде на жестком диске, я мог бы предположить, что они останутся в памяти? Это также объяснило бы, почему они не настойчивы.
Если вы хотите записать их на диск, используйте команды сохранения / восстановления. Здесь вы можете указать путь.