Назад | Перейти на главную страницу

где хранятся kvm-снимки?

Я запускаю несколько виртуальных машин на 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, как вам нравится.

Поскольку я проверял то же самое и не мог найти их нигде на жестком диске, я мог бы предположить, что они останутся в памяти? Это также объяснило бы, почему они не настойчивы.

Если вы хотите записать их на диск, используйте команды сохранения / восстановления. Здесь вы можете указать путь.