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

virsh: перезаписать существующий снимок

Как я могу перезаписать существующий снимок с помощью virsh?

Если я попытаюсь использовать существующее имя, я получаю следующее сообщение об ошибке:

> virsh -c qemu+tls://virtserv5/system snapshot-create-as myvm --name snapshot-foo
error: internal error: unexpected domain snapshot snapshot-foo already exists

Расширение на @anon ответа на вопрос и комментариев @slm.

Как я могу перезаписать существующий снимок с помощью virsh?

Я могу придумать два решения этого вопроса.

  1. Чтобы удалить старый снимок и «перезаписать» его новым. По сути, это означает создание нового снимка текущего состояния. Поскольку вы все равно планируете перезаписать его, я не вижу необходимости или использования в сохранении старого, кроме как для сохранения шагов, как заявил Анон. Шаги ниже.
  2. К "переименовать / клонировать"снимок.

Для первый вариант (удалить), если вы используете внутренние привязки, вы можете попробовать:

sudo virsh snapshot-delete $VM_ID $SNAPSHOT_NAME
sudo virsh snapshot-create-as $VM_ID $SNAPSHOT_NAME

Который, к сведению, не так уж далек от перезаписи, вы даже можете сделать это в одной строке, используя &&. Не знаю причины запроса перезаписи (указание этого может помочь получить лучшие ответы или альтернативы).

Для второй вариант (переименовать), помните, что то страница руководства для вирша предупреждает следующее для настройки:

Если указан параметр --rename, при редактировании можно изменить имя снимка. Если указан --clone, то при изменении имени снимка создается клон метаданных снимка. Если ни один из них не указан, то при редактировании не должно изменяться имя снимка. Обратите внимание, что изменение имени снимка должно выполняться с осторожностью, поскольку содержимое некоторых снимков, таких как внутренние снимки в одном файле qcow2, доступно только по исходному имени.

А можно было попробовать:

snapshot-edit domain [snapshotname] [--current] {[--rename] | [--clone]}


Если же, с другой стороны, вы используете внешние снимки, вы также можете попробовать --reuse-external вариант для snapshot-create-as. Обратите внимание на предупреждение о существующем файле. Я не уверен, что он будет работать так, как вы хотите, без дополнительной информации о причинах, по которым у вас есть эта функция, поэтому вот информация со страницы руководства относительно этой опции:

Если указан --reuse-external, а параметр XML домена или diskspec запрашивает внешний моментальный снимок с местом назначения существующего файла, то место назначения должно существовать и быть предварительно созданным с правильным форматом и метаданными. Затем файл используется повторно; в противном случае снимок будет отклонен, чтобы избежать потери содержимого существующих файлов.


В любом слючае: Я рекомендую вам клонировать виртуальную машину и играть в копии, не пытайтесь использовать производственные системы.

Как я могу перезаписать существующий снимок с помощью virsh?

Вы, наверное, не сможете.

То, что вы просите, не соответствует семантике реализации моментальных снимков виртуальных машин. Это связано с тем, что у снимков обычно есть какой-то родительский элемент и набор вещей, который отличается от родительского. Если бы вы заменили один снимок другим, что бы произошло, если бы их родители были другими? Что делать, если снимок, который вы заменяете, изменил блоки, используемые в снимках-потомках? Это вещи, которые уже решаются путем комбинирования различных операций.

Типичный способ достичь того, что вы описываете, - это удалить старый снимок и создать новый, который случайно имеет то же имя, что и тот, который был удален.