Таки возможно ли делать полное резервное копирование QEMU/KVM'овской машины без остановки ея?
Вот например, если мы размещаем машину на LVM/RAW, то можем делать снимки LV, но в этом случае мы будем делать резервные копии блочного устройства. Состояние ОЗУ и кэшей записи не учитывается.
Насколько я понял, если мы будем делать QEMU snapshot'ы, то состояние ОЗУ опять не будет сохранено, но все отложенные дисковые операции будут совершены.
И наконец бэкап псевдомиграцией. Так вообще можно делать резервные копии? Кроме того, в описании алгоритма миграции:
--------------------------
- Setup
- Start guest on destination, connect, enable dirty page logging and more
- Transfer Memory
- Guest continues to run
- Bandwidth limitation (controlled by the user)
- First transfer the whole memory
- Iteratively transfer all dirty pages (pages that were written to by the guest).
- Stop the guest
- And sync VM image(s) (guest's hard drives).
- Transfer State
- As fast as possible (no bandwidth limitation)
- All VM devices' state and dirty pages yet to be transferred
- Continue the guest
- On destination upon success
- Broadcast «I'm over here» Ethernet packet to announce new location of NIC(s).
- On source upon failure (with one exception).
--------------------------
Меня смущает пункт 3. Если мы размещаем образы блочных устройств как требуют:
VM image is accessible on both source and destination hosts (located on a shared storage, e.g. using nfs).
, то зачем нам синхронизация? Что с чем синхронизируется?
Ещё вопрос, если мы делаем бэкап псевдомиграцией в файл. То что будет в этом файле? Можно ли из него вытащить dump памяти и смонтировать файловую систему только для чтения? Могу ли я собрать такой файл состояния из имеющегося дампа памяти и директории с файлами? Если это возможно, то я смогу делать инкрементальные бэкапы. Алгоритм копирования такой:
- Делаю псевдомиграцию в файл.
- Вытаскиваю из получившегося файла дамп памяти и файлы файловой системы.
- Копирую дамп и файлы Bacul'ой на ленту.
- Удаляю всё что стало ненужным.
Восстановление:
- Вытаскиваю из Bacul'ы дамп памяти и файлы
- Собираю из дампа и файлов файл состояния виртуальной машины.
- Запускаю виртуальную машину используя файл состояния
- Удаляю всё что стало ненужным.