Структура директорий Disaster Recovery
Этот раздел описывает структуру директорий Disaster Recovery на стороне rv-backup и стороне rv-dr-sync.
Примерный вид структуры Disaster Recovery внутри хранилища rv-backup
/BACKUPS/
└── vm_078fd21e-7942-4c41-8281-560759dc6555
├── checkpoints.map
├── cp_cba7f969-bc30-40b6-b5a9-e8a1a4afe0c9
│ ├── config.ovf
│ └── db_0e2bf468-de52-44f2-94bd-1cc69c3c1367.qcow2
└── dr
├── 20251119T190416+0300
│ ├── 0e2bf468-de52-44f2-94bd-1cc69c3c1367.lease
│ ├── 0e2bf468-de52-44f2-94bd-1cc69c3c1367.meta
│ ├── cache.json
│ └── dump.sql
├── 20251120T181417+0300
│ ├── 0e2bf468-de52-44f2-94bd-1cc69c3c1367.lease
│ ├── 0e2bf468-de52-44f2-94bd-1cc69c3c1367.meta
│ ├── cache.json
│ └── dump.sql
├── 20251121T192406+0300
│ ├── 0e2bf468-de52-44f2-94bd-1cc69c3c1367.lease
│ ├── 0e2bf468-de52-44f2-94bd-1cc69c3c1367.meta
│ ├── cache.json
│ └── dump.sql
├── 20251121T194542+0300
│ ├── 0e2bf468-de52-44f2-94bd-1cc69c3c1367.lease
│ ├── 0e2bf468-de52-44f2-94bd-1cc69c3c1367.meta
│ ├── cache.json
│ └── dump.sql
└── 20251124T165718+0300
├── 0e2bf468-de52-44f2-94bd-1cc69c3c1367.lease
├── 0e2bf468-de52-44f2-94bd-1cc69c3c1367.meta
├── cache.json
└── dump.sql
8 directories, 23 files
```
Все данные, связанные с процедурой Disaster Recovery, находятся в директории dr, которая находится в директории ВМ хранилища rv-backup. Директория dr содержит поддиректории, которые называются рабочими директориями. В качестве имён рабочих директорий используются точные даты их создания. Также в рабочих директориях хранятся файлы, необходимые для правильного функционирования Disaster Recovery.
**Важно** ‒ Нельзя вручную изменять имена файлов или директорий, т. к. это может привести к нарушению протокола Disaster Recovery и потере данных.
## Описание файлов хранилища rv-backup
`20251124T165718+0300` ‒ рабочая директория с датой в формате %Y%m%dT%H%M%S%z,
где:
%Y‒ год, число из четырёх цифр,%m‒ месяц, число[1,12],%d‒ день, число[1,31],T‒ разделитель даты и времени,%H‒ часы в 24-х часовом формате[0, 23],%M‒ минуты[0, 59],%S‒ секунды[0, 59],%z‒ часовой пояс, например +0300, где 03 - часы, а 00 - минуты.
0e2bf468-de52-44f2-94bd-1cc69c3c1367.lease ‒ двоичный .lease-файл, необходимый для службы sanlock, где 0e2bf468-de52-44f2-94bd-1cc69c3c1367 ‒ UUID диска ВМ, для которого предназначается этот файл. Такой файл формируется для каждого из дисков ВМ.
Примерное содержание:
Leader record:
magic: 0x06152010
version: 0x00000006|0x00000004
flags: 0x00000010
sector_size: 0x00000200
num_hosts: 2000
max_hosts: 2000
owner_id: 0
owner_generation: 0
lver: 0
space_name: 7e91e01a-1f09-4d41-a60f-b8543b801760
resource_name: 80c58887-3e2c-4d31-aa40-0a37cf62effa
timestamp: 0
unused1: 0
checksum: 3090489723
unused2: 0
io_timeout: 0
write_id: 0
write_generation: 0
write_timestamp: 0
Request record:
magic: 0x08292011
version: 0x00000001|0x00000001
lver: 0x0000000000000000
force_mode: 0x00000000
0e2bf468-de52-44f2-94bd-1cc69c3c1367.meta ‒ текстовый .meta-файл содержит различную информацию о диске, например виртуальный размер и фактический, где 0e2bf468-de52-44f2-94bd-1cc69c3c1367 ‒ UUID диска ВМ, для которого предназначается этот файл.
Примерное содержание:
CAP=10737418240
CTIME=1763568259
DESCRIPTION=no_description
DISKTYPE=DATA
DOMAIN=7e91e01a-1f09-4d41-a60f-b8543b801760
FORMAT=COW
GEN=0
IMAGE=0e2bf468-de52-44f2-94bd-1cc69c3c1367
LEGALITY=LEGAL
PUUID=00000000-0000-0000-0000-000000000000
SEQ=1
TYPE=SPARSE
VOLTYPE=LEAF
EOF
cache.json ‒ текстовый файл, хранящий объекты и метаданные, создаваемые в процессе инициализации Disaster Recovery.
Примерное содержание:
{
"create_date": "2025-11-19T19:04:16+0300",
"last_check_db": "2025-11-20T18:14:15+0300",
"last_check_disks": "2025-11-20T18:14:16+0300",
"metadata": "b64_eNrUfQmcXFWxN1lmMpOZ... обрезано для документации"
"db_increment": "b64_eNrUfQmcHFXxPzk2... обрезано для документации"
"submitted_state": "cba7f969-bc30-40b6-b5a9-e8a1a4afe0c9"
}
dump.sql ‒ текстовый файл, содержащий выборочный SQL-дамп базы данных ОЦУ и различные метаданные, необходимые для утилиты rv-dr-sync. Содержимое файла хешируется и верифицируется.
Примерное содержание:
/*
MANUAL MODIFICATION OF THIS COMMENT IS NOT ALLOWED AND MAY RESULT IN DATA CORRUPTION!
rv-backup disaster recovery increment
date: 2025-11-19T19:04:16+0300
hash: fdb2b3c36193a1bac601016fd246105609d2a0fa8671d0581144217a593a89e7
vm: 078fd21e-7942-4c41-8281-560759dc6555
chain_id: 8e24cb187023ef24e0e57e95dfd61321af3a6a4d
checkpoint: cba7f969-bc30-40b6-b5a9-e8a1a4afe0c9
disks: [0e2bf468-de52-44f2-94bd-1cc69c3c1367]
disks_hash: af4c77251f468cffca67b93d0b04ccffcf4f48f773b944dcbf4639620b8bdb75
SQLAlchemy: 1.4.45, PostgreSQL: 16.8
*/
BEGIN ISOLATION LEVEL SERIALIZABLE;
INSERT INTO public.vm_static (vm_guid, vm_name, mem_size_mb, vmt_guid, os, description, cluster_id, creation_date, num_of_monitors, is_initialized, is_auto_suspend, num_of_sockets, cpu_per_socket, usb_policy, time_zone, is_stateless, _create_date, _update_date, auto_startup, vm_type, nice_level, default_boot_sequence, default_display_type, priority, iso_path, origin, initrd_url, kernel_url, kernel_params, migration_support, userdefined_properties, predefined_properties, min_allocated_mem, entity_type, child_count, template_status, quota_id, allow_console_reconnect, cpu_pinning, is_smartcard_enabled, host_cpu_flags, db_generation, is_delete_protected, is_disabled, is_run_and_pause, created_by_user_id, tunnel_migration, free_text_comment, cpu_shares, vnc_keyboard_layout, instance_type_id, image_type_id, sso_method, original_template_id, original_template_name, migration_downtime, template_version_number, template_version_name, serial_number_policy, custom_serial_number, is_boot_menu_enabled, is_spice_file_transfer_enabled, is_spice_copy_paste_enabled, cpu_profile_id, is_auto_converge, is_migrate_compressed, custom_emulated_machine, custom_cpu_name, small_icon_id, large_icon_id, provider_id, num_of_io_threads, console_disconnect_action, threads_per_cpu, custom_compatibility_version, migration_policy_id, max_memory_size_mb, lease_sd_id, resume_behavior, multi_queues_enabled, is_migrate_encrypted, use_tsc_frequency, namespace, is_template_sealed, bios_type, balloon_enabled, virtio_scsi_multi_queues, console_disconnect_action_delay, cpu_pinning_policy, parallel_migrations) VALUES (UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'fe', 2024, UUID('00000000-0000-0000-0000-000000000000'), 0, '', UUID('7c9a549e-bfe4-11f0-8554-000005a0b0c0'), '2025-11-19 17:23:46.369000+0300', 1, true, false, 2, 1, 1, 'Etc/GMT', false, '2025-11-19 17:23:46.368577+0300', NULL, false, 0, 0, 9, 1, 1, NULL, 3, NULL, NULL, NULL, 0, '', '', 2024, 'VM', 0, NULL, NULL, false, NULL, false, false, 12, false, false, false, NULL, NULL, '', 0, NULL, NULL, NULL, 'guest_agent', UUID('00000000-0000-0000-0000-000000000000'), 'Blank', NULL, 1, NULL, NULL, NULL, false, true, true, UUID('58ca604e-01a7-003f-01de-000000000250'), NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 'LOCK_SCREEN', 1, NULL, NULL, 8096, NULL, 'AUTO_RESUME', true, NULL, false, NULL, false, 3, true, 0, 0, 0, NULL) ON CONFLICT (vm_guid) DO UPDATE SET vm_name = excluded.vm_name, mem_size_mb = excluded.mem_size_mb, vmt_guid = excluded.vmt_guid, os = excluded.os, description = excluded.description, cluster_id = excluded.cluster_id, creation_date = excluded.creation_date, num_of_monitors = excluded.num_of_monitors, is_initialized = excluded.is_initialized, is_auto_suspend = excluded.is_auto_suspend, num_of_sockets = excluded.num_of_sockets, cpu_per_socket = excluded.cpu_per_socket, usb_policy = excluded.usb_policy, time_zone = excluded.time_zone, is_stateless = excluded.is_stateless, _create_date = excluded._create_date, _update_date = excluded._update_date, auto_startup = excluded.auto_startup, vm_type = excluded.vm_type, nice_level = excluded.nice_level, default_boot_sequence = excluded.default_boot_sequence, default_display_type = excluded.default_display_type, priority = excluded.priority, iso_path = excluded.iso_path, origin = excluded.origin, initrd_url = excluded.initrd_url, kernel_url = excluded.kernel_url, kernel_params = excluded.kernel_params, migration_support = excluded.migration_support, userdefined_properties = excluded.userdefined_properties, predefined_properties = excluded.predefined_properties, min_allocated_mem = excluded.min_allocated_mem, entity_type = excluded.entity_type, child_count = excluded.child_count, template_status = excluded.template_status, quota_id = excluded.quota_id, allow_console_reconnect = excluded.allow_console_reconnect, cpu_pinning = excluded.cpu_pinning, is_smartcard_enabled = excluded.is_smartcard_enabled, host_cpu_flags = excluded.host_cpu_flags, db_generation = excluded.db_generation, is_delete_protected = excluded.is_delete_protected, is_disabled = excluded.is_disabled, is_run_and_pause = excluded.is_run_and_pause, created_by_user_id = excluded.created_by_user_id, tunnel_migration = excluded.tunnel_migration, free_text_comment = excluded.free_text_comment, cpu_shares = excluded.cpu_shares, vnc_keyboard_layout = excluded.vnc_keyboard_layout, instance_type_id = excluded.instance_type_id, image_type_id = excluded.image_type_id, sso_method = excluded.sso_method, original_template_id = excluded.original_template_id, original_template_name = excluded.original_template_name, migration_downtime = excluded.migration_downtime, template_version_number = excluded.template_version_number, template_version_name = excluded.template_version_name, serial_number_policy = excluded.serial_number_policy, custom_serial_number = excluded.custom_serial_number, is_boot_menu_enabled = excluded.is_boot_menu_enabled, is_spice_file_transfer_enabled = excluded.is_spice_file_transfer_enabled, is_spice_copy_paste_enabled = excluded.is_spice_copy_paste_enabled, cpu_profile_id = excluded.cpu_profile_id, is_auto_converge = excluded.is_auto_converge, is_migrate_compressed = excluded.is_migrate_compressed, custom_emulated_machine = excluded.custom_emulated_machine, custom_cpu_name = excluded.custom_cpu_name, small_icon_id = excluded.small_icon_id, large_icon_id = excluded.large_icon_id, provider_id = excluded.provider_id, num_of_io_threads = excluded.num_of_io_threads, console_disconnect_action = excluded.console_disconnect_action, threads_per_cpu = excluded.threads_per_cpu, custom_compatibility_version = excluded.custom_compatibility_version, migration_policy_id = excluded.migration_policy_id, max_memory_size_mb = excluded.max_memory_size_mb, lease_sd_id = excluded.lease_sd_id, resume_behavior = excluded.resume_behavior, multi_queues_enabled = excluded.multi_queues_enabled, is_migrate_encrypted = excluded.is_migrate_encrypted, use_tsc_frequency = excluded.use_tsc_frequency, namespace = excluded.namespace, is_template_sealed = excluded.is_template_sealed, bios_type = excluded.bios_type, balloon_enabled = excluded.balloon_enabled, virtio_scsi_multi_queues = excluded.virtio_scsi_multi_queues, console_disconnect_action_delay = excluded.console_disconnect_action_delay, cpu_pinning_policy = excluded.cpu_pinning_policy, parallel_migrations = excluded.parallel_migrations;
INSERT INTO public.vnic_profiles (id, name, network_id, port_mirroring, custom_properties, description, _create_date, _update_date, network_qos_id, passthrough, network_filter_id, migratable, failover_vnic_profile_id) VALUES (UUID('0000000a-000a-000a-000a-000000000398'), 'ovirtmgmt', UUID('00000000-0000-0000-0000-000000000009'), false, NULL, NULL, '2019-11-04 11:42:42.683636+0300', NULL, NULL, false, UUID('d2370ab4-fee3-11e9-a310-8c1645ce738e'), false, NULL) ON CONFLICT (id) DO UPDATE SET name = excluded.name, network_id = excluded.network_id, port_mirroring = excluded.port_mirroring, custom_properties = excluded.custom_properties, description = excluded.description, _create_date = excluded._create_date, _update_date = excluded._update_date, network_qos_id = excluded.network_qos_id, passthrough = excluded.passthrough, network_filter_id = excluded.network_filter_id, migratable = excluded.migratable, failover_vnic_profile_id = excluded.failover_vnic_profile_id;
INSERT INTO public.base_disks (disk_id, wipe_after_delete, propagate_errors, disk_alias, disk_description, shareable, sgio, disk_storage_type, cinder_volume_type, disk_content_type, backup, backup_mode) VALUES (UUID('0e2bf468-de52-44f2-94bd-1cc69c3c1367'), false, 'Off', 'fe_Disk1', '', false, NULL, 0, NULL, 0, 'Incremental', 'Full') ON CONFLICT (disk_id) DO UPDATE SET wipe_after_delete = excluded.wipe_after_delete, propagate_errors = excluded.propagate_errors, disk_alias = excluded.disk_alias, disk_description = excluded.disk_description, shareable = excluded.shareable, sgio = excluded.sgio, disk_storage_type = excluded.disk_storage_type, cinder_volume_type = excluded.cinder_volume_type, disk_content_type = excluded.disk_content_type, backup = excluded.backup, backup_mode = excluded.backup_mode;
INSERT INTO public.images (image_guid, creation_date, size, it_guid, parentid, imagestatus, lastmodified, vm_snapshot_id, volume_type, volume_format, image_group_id, _create_date, _update_date, active, volume_classification, qcow_compat, sequence_number) VALUES (UUID('80c58887-3e2c-4d31-aa40-0a37cf62effa'), '2025-11-19 17:23:47.000000+0300', 10737418240, UUID('00000000-0000-0000-0000-000000000000'), UUID('00000000-0000-0000-0000-000000000000'), 1, '2025-11-19 18:46:31.471000+0300', UUID('02b4b8ca-bff9-4115-b563-d802b112a057'), 2, 4, UUID('0e2bf468-de52-44f2-94bd-1cc69c3c1367'), '2025-11-19 17:23:47.102667+0300', '2025-11-19 18:51:31.673016+0300', true, 1, 2, 1) ON CONFLICT (image_guid) DO UPDATE SET creation_date = excluded.creation_date, size = excluded.size, it_guid = excluded.it_guid, parentid = excluded.parentid, imagestatus = excluded.imagestatus, lastmodified = excluded.lastmodified, vm_snapshot_id = excluded.vm_snapshot_id, volume_type = excluded.volume_type, volume_format = excluded.volume_format, image_group_id = excluded.image_group_id, _create_date = excluded._create_date, _update_date = excluded._update_date, active = excluded.active, volume_classification = excluded.volume_classification, qcow_compat = excluded.qcow_compat, sequence_number = excluded.sequence_number;
INSERT INTO public.disk_image_dynamic (image_id, read_rate, write_rate, actual_size, read_latency_seconds, write_latency_seconds, flush_latency_seconds, _update_date, read_ops, write_ops) VALUES (UUID('80c58887-3e2c-4d31-aa40-0a37cf62effa'), 2329722, 277460, 4306186240, 0.011915897, 0.130857333, 0.000453685, '2025-11-19 18:51:31.673016+0300', 5421, 579) ON CONFLICT (image_id) DO UPDATE SET read_rate = excluded.read_rate, write_rate = excluded.write_rate, actual_size = excluded.actual_size, read_latency_seconds = excluded.read_latency_seconds, write_latency_seconds = excluded.write_latency_seconds, flush_latency_seconds = excluded.flush_latency_seconds, _update_date = excluded._update_date, read_ops = excluded.read_ops, write_ops = excluded.write_ops;
INSERT INTO public.vm_dynamic (vm_guid, status, vm_ip, vm_host, last_start_time, guest_cur_user_name, guest_os, run_on_vds, migrating_to_vds, app_list, acpi_enable, session, utc_diff, client_ip, guest_requested_memory, boot_sequence, exit_status, pause_status, exit_message, hash, console_user_id, guest_agent_nics_hash, console_cur_user_name, last_watchdog_event, last_watchdog_action, is_run_once, vm_fqdn, cpu_name, last_stop_time, current_cd, reason, exit_reason, guest_cpu_count, emulated_machine, spice_port, spice_tls_port, spice_ip, vnc_port, vnc_ip, ovirt_guest_agent_status, guest_timezone_offset, guest_timezone_name, guestos_arch, guestos_codename, guestos_distribution, guestos_kernel_version, guestos_type, guestos_version, guest_containers, boot_time, downtime, volatile_run, lease_info, runtime_name, qemu_guest_agent_status, current_cpu_pinning, current_sockets, current_cores, current_threads, current_numa_pinning) VALUES (UUID('078fd21e-7942-4c41-8281-560759dc6555'), 0, NULL, 'fedora', '2025-11-19 17:55:32.955000+0300', NULL, '6.14.0-63.fc42.x86_64', NULL, NULL, 'kernel-6.14.0-63.fc42.x86_64,qemu-guest-agent-9.2.2', true, 0, -1, NULL, NULL, 9, 0, 0, 'User shut down from within the guest', '-7444793545149495633', NULL, 0, NULL, NULL, NULL, false, NULL, NULL, '2025-11-19 17:57:09.382000+0300', 'db9c03e3-795d-48bd-9e0a-89fd1e9bbc42', NULL, 7, 2, NULL, NULL, NULL, NULL, NULL, NULL, 0, 180, 'MSK', 1, 'Xfce', 'Fedora Linux', '6.14.0-63.fc42.x86_64', 'Linux', '42', '[]', NULL, 0, false, NULL, NULL, 0, NULL, 0, 0, 0, NULL) ON CONFLICT (vm_guid) DO UPDATE SET status = excluded.status, vm_ip = excluded.vm_ip, vm_host = excluded.vm_host, last_start_time = excluded.last_start_time, guest_cur_user_name = excluded.guest_cur_user_name, guest_os = excluded.guest_os, run_on_vds = excluded.run_on_vds, migrating_to_vds = excluded.migrating_to_vds, app_list = excluded.app_list, acpi_enable = excluded.acpi_enable, session = excluded.session, utc_diff = excluded.utc_diff, client_ip = excluded.client_ip, guest_requested_memory = excluded.guest_requested_memory, boot_sequence = excluded.boot_sequence, exit_status = excluded.exit_status, pause_status = excluded.pause_status, exit_message = excluded.exit_message, hash = excluded.hash, console_user_id = excluded.console_user_id, guest_agent_nics_hash = excluded.guest_agent_nics_hash, console_cur_user_name = excluded.console_cur_user_name, last_watchdog_event = excluded.last_watchdog_event, last_watchdog_action = excluded.last_watchdog_action, is_run_once = excluded.is_run_once, vm_fqdn = excluded.vm_fqdn, cpu_name = excluded.cpu_name, last_stop_time = excluded.last_stop_time, current_cd = excluded.current_cd, reason = excluded.reason, exit_reason = excluded.exit_reason, guest_cpu_count = excluded.guest_cpu_count, emulated_machine = excluded.emulated_machine, spice_port = excluded.spice_port, spice_tls_port = excluded.spice_tls_port, spice_ip = excluded.spice_ip, vnc_port = excluded.vnc_port, vnc_ip = excluded.vnc_ip, ovirt_guest_agent_status = excluded.ovirt_guest_agent_status, guest_timezone_offset = excluded.guest_timezone_offset, guest_timezone_name = excluded.guest_timezone_name, guestos_arch = excluded.guestos_arch, guestos_codename = excluded.guestos_codename, guestos_distribution = excluded.guestos_distribution, guestos_kernel_version = excluded.guestos_kernel_version, guestos_type = excluded.guestos_type, guestos_version = excluded.guestos_version, guest_containers = excluded.guest_containers, boot_time = excluded.boot_time, downtime = excluded.downtime, volatile_run = excluded.volatile_run, lease_info = excluded.lease_info, runtime_name = excluded.runtime_name, qemu_guest_agent_status = excluded.qemu_guest_agent_status, current_cpu_pinning = excluded.current_cpu_pinning, current_sockets = excluded.current_sockets, current_cores = excluded.current_cores, current_threads = excluded.current_threads, current_numa_pinning = excluded.current_numa_pinning;
INSERT INTO public.vm_guest_agent_interfaces (vm_id, interface_name, mac_address, ipv4_addresses, ipv6_addresses) SELECT UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'enp1s0', '56:6f:14:34:00:00', '192.168.1.83', 'fe80::5ef7:cfe2:7149:f8e7'
WHERE NOT (EXISTS (SELECT public.vm_guest_agent_interfaces.vm_id, public.vm_guest_agent_interfaces.interface_name, public.vm_guest_agent_interfaces.mac_address, public.vm_guest_agent_interfaces.ipv4_addresses, public.vm_guest_agent_interfaces.ipv6_addresses
FROM public.vm_guest_agent_interfaces
WHERE public.vm_guest_agent_interfaces.vm_id = UUID('078fd21e-7942-4c41-8281-560759dc6555') AND public.vm_guest_agent_interfaces.interface_name = 'enp1s0' AND public.vm_guest_agent_interfaces.mac_address = '56:6f:14:34:00:00' AND public.vm_guest_agent_interfaces.ipv4_addresses = '192.168.1.83' AND public.vm_guest_agent_interfaces.ipv6_addresses = 'fe80::5ef7:cfe2:7149:f8e7'));
INSERT INTO public.vm_nvram_data (vm_id, nvram_data, nvram_hash) VALUES (UUID('078fd21e-7942-4c41-8281-560759dc6555'), '=0=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', 'a8be4d80743f0634d4824e97a9943049786edc0ece9590c7fccb2731d113c05d') ON CONFLICT (vm_id) DO UPDATE SET nvram_data = excluded.nvram_data, nvram_hash = excluded.nvram_hash;
INSERT INTO public.vm_statistics (vm_guid, cpu_user, cpu_sys, usage_mem_percent, usage_cpu_percent, disks_usage, _update_date, guest_mem_buffered, guest_mem_cached, usage_network_percent, elapsed_time) VALUES (UUID('078fd21e-7942-4c41-8281-560759dc6555'), 0, 0, NULL, NULL, NULL, '2025-11-19 17:57:09.383384+0300', NULL, NULL, NULL, 0) ON CONFLICT (vm_guid) DO UPDATE SET cpu_user = excluded.cpu_user, cpu_sys = excluded.cpu_sys, usage_mem_percent = excluded.usage_mem_percent, usage_cpu_percent = excluded.usage_cpu_percent, disks_usage = excluded.disks_usage, _update_date = excluded._update_date, guest_mem_buffered = excluded.guest_mem_buffered, guest_mem_cached = excluded.guest_mem_cached, usage_network_percent = excluded.usage_network_percent, elapsed_time = excluded.elapsed_time;
INSERT INTO public.vm_interface (id, vm_guid, mac_addr, name, speed, type, _create_date, _update_date, linked, vnic_profile_id, synced) VALUES (UUID('4be48db5-091a-476e-9be1-1a660cae7643'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), '56:6f:14:34:00:00', 'nic1', 10000, 3, '2025-11-19 17:23:46.730713+0300', '2025-11-19 17:23:46.931032+0300', true, UUID('0000000a-000a-000a-000a-000000000398'), true) ON CONFLICT (id) DO UPDATE SET vm_guid = excluded.vm_guid, mac_addr = excluded.mac_addr, name = excluded.name, speed = excluded.speed, type = excluded.type, _create_date = excluded._create_date, _update_date = excluded._update_date, linked = excluded.linked, vnic_profile_id = excluded.vnic_profile_id, synced = excluded.synced;
INSERT INTO public.disk_vm_element (disk_id, vm_id, is_boot, disk_interface, is_using_scsi_reservation, pass_discard) VALUES (UUID('0e2bf468-de52-44f2-94bd-1cc69c3c1367'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), true, 'VirtIO_SCSI', false, false) ON CONFLICT (vm_id, disk_id) DO UPDATE SET is_boot = excluded.is_boot, disk_interface = excluded.disk_interface, is_using_scsi_reservation = excluded.is_using_scsi_reservation, pass_discard = excluded.pass_discard;
INSERT INTO public.snapshots (snapshot_id, vm_id, snapshot_type, status, description, creation_date, app_list, vm_configuration, _create_date, _update_date, memory_metadata_disk_id, memory_dump_disk_id, vm_configuration_broken, changed_fields) VALUES (UUID('02b4b8ca-bff9-4115-b563-d802b112a057'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'ACTIVE', 'OK', 'Active VM', '2025-11-19 17:23:46.432000+0300', NULL, NULL, '2025-11-19 17:23:46.368577+0300', '2025-11-19 18:51:31.681342+0300', NULL, NULL, false, NULL) ON CONFLICT (snapshot_id) DO UPDATE SET vm_id = excluded.vm_id, snapshot_type = excluded.snapshot_type, status = excluded.status, description = excluded.description, creation_date = excluded.creation_date, app_list = excluded.app_list, vm_configuration = excluded.vm_configuration, _create_date = excluded._create_date, _update_date = excluded._update_date, memory_metadata_disk_id = excluded.memory_metadata_disk_id, memory_dump_disk_id = excluded.memory_dump_disk_id, vm_configuration_broken = excluded.vm_configuration_broken, changed_fields = excluded.changed_fields;
INSERT INTO public.image_storage_domain_map (image_id, storage_domain_id, quota_id, disk_profile_id) VALUES (UUID('80c58887-3e2c-4d31-aa40-0a37cf62effa'), UUID('7e91e01a-1f09-4d41-a60f-b8543b801760'), NULL, NULL) ON CONFLICT (image_id, storage_domain_id) DO UPDATE SET quota_id = excluded.quota_id, disk_profile_id = excluded.disk_profile_id;
INSERT INTO public.vm_interface_statistics (id, vm_id, rx_rate, tx_rate, rx_drop, tx_drop, iface_status, _update_date, rx_total, rx_offset, tx_total, tx_offset, sample_time) VALUES (UUID('4be48db5-091a-476e-9be1-1a660cae7643'), NULL, 0.0000, 0.0000, 0, 0, 0, '2025-11-19 17:57:09.383699+0300', 858677, 803743, 32841, 24995, 24587.504526782) ON CONFLICT (id) DO UPDATE SET vm_id = excluded.vm_id, rx_rate = excluded.rx_rate, tx_rate = excluded.tx_rate, rx_drop = excluded.rx_drop, tx_drop = excluded.tx_drop, iface_status = excluded.iface_status, _update_date = excluded._update_date, rx_total = excluded.rx_total, rx_offset = excluded.rx_offset, tx_total = excluded.tx_total, tx_offset = excluded.tx_offset, sample_time = excluded.sample_time;
INSERT INTO public.vm_backups (backup_id, from_checkpoint_id, to_checkpoint_id, vm_id, phase, _create_date, host_id, description, _update_date, backup_type, snapshot_id, is_stopped) VALUES (UUID('32b1b80c-937e-4707-a693-a1f5ae4f0513'), NULL, UUID('cba7f969-bc30-40b6-b5a9-e8a1a4afe0c9'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'Succeeded', '2025-11-19 18:46:31.507000+0300', NULL, '', '2025-11-19 18:51:35.161000+0300', 'hybrid', NULL, true) ON CONFLICT (backup_id) DO UPDATE SET from_checkpoint_id = excluded.from_checkpoint_id, to_checkpoint_id = excluded.to_checkpoint_id, vm_id = excluded.vm_id, phase = excluded.phase, _create_date = excluded._create_date, host_id = excluded.host_id, description = excluded.description, _update_date = excluded._update_date, backup_type = excluded.backup_type, snapshot_id = excluded.snapshot_id, is_stopped = excluded.is_stopped;
INSERT INTO public.vm_device (device_id, vm_id, type, device, address, spec_params, is_managed, is_plugged, is_readonly, _create_date, _update_date, alias, custom_properties, snapshot_id, logical_name, host_device) VALUES (UUID('7cc693ec-c646-4efd-9ba7-f2024239ce34'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'graphics', 'spice', '', NULL, true, true, false, '2025-11-19 17:23:46.493384+0300', NULL, '', NULL, NULL, NULL, NULL), (UUID('b0b3db4a-fd1a-46d3-a786-0f9b12bc7967'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'graphics', 'vnc', '', NULL, true, true, false, '2025-11-19 17:23:46.493384+0300', NULL, '', NULL, NULL, NULL, NULL), (UUID('8b4b0a08-0762-41c3-aee1-79033923279f'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'controller', 'usb', '{type=pci, slot=0x00, bus=0x02, domain=0x0000, function=0x0}', '{ "index" : "0", "model" : "qemu-xhci"}', true, true, false, '2025-11-19 17:23:46.493384+0300', '2025-11-19 17:56:11.189113+0300', 'ua-8b4b0a08-0762-41c3-aee1-79033923279f', '{ }', NULL, NULL, ''), (UUID('b3ce96df-77f2-45e8-afcf-e91ada5d5182'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'controller', 'virtio-serial', '{type=pci, slot=0x00, bus=0x03, domain=0x0000, function=0x0}', '{ }', true, true, false, '2025-11-19 17:23:46.493384+0300', '2025-11-19 17:56:11.189113+0300', 'ua-b3ce96df-77f2-45e8-afcf-e91ada5d5182', '{ }', NULL, NULL, ''), (UUID('c20483ba-38c7-46b4-8d35-297733861203'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'balloon', 'memballoon', '{type=pci, slot=0x00, bus=0x05, domain=0x0000, function=0x0}', '{ "model" : "virtio"}', true, true, true, '2025-11-19 17:23:46.493384+0300', '2025-11-19 17:56:11.189113+0300', 'ua-c20483ba-38c7-46b4-8d35-297733861203', '{ }', NULL, NULL, ''), (UUID('0e2bf468-de52-44f2-94bd-1cc69c3c1367'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'disk', 'disk', '{type=drive, bus=0, controller=0, target=0, unit=0}', '{ }', true, true, false, '2025-11-19 17:23:47.209027+0300', '2025-11-19 17:56:11.189113+0300', 'ua-0e2bf468-de52-44f2-94bd-1cc69c3c1367', '{ }', NULL, '/dev/sda', ''), (UUID('4be48db5-091a-476e-9be1-1a660cae7643'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'interface', 'bridge', '{type=pci, slot=0x00, bus=0x01, domain=0x0000, function=0x0}', '{ }', true, true, false, '2025-11-19 17:23:46.730713+0300', '2025-11-19 17:56:11.189113+0300', 'ua-4be48db5-091a-476e-9be1-1a660cae7643', '{ }', NULL, NULL, ''), (UUID('830bf826-683b-44b8-824e-817003278175'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'sound', 'ich9', '{type=pci, slot=0x1b, bus=0x00, domain=0x0000, function=0x0}', '{ }', true, true, true, '2025-11-19 17:23:46.493384+0300', '2025-11-19 17:56:11.189113+0300', 'ua-830bf826-683b-44b8-824e-817003278175', '{ }', NULL, NULL, ''), (UUID('533bb296-0813-4471-88a2-1c2aefe860e6'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'video', 'qxl', '{type=pci, slot=0x01, bus=0x00, domain=0x0000, function=0x0}', '{ "vgamem" : "16384", "heads" : "1", "ram" : "65536", "vram" : "8192"}', true, true, false, '2025-11-19 17:23:46.493384+0300', '2025-11-19 17:56:11.189113+0300', 'ua-533bb296-0813-4471-88a2-1c2aefe860e6', '{ }', NULL, NULL, ''), (UUID('652adaba-46e1-4c33-bbe8-3375f149490b'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'disk', 'cdrom', '{type=drive, bus=0, controller=0, target=0, unit=2}', '{ "path" : "db9c03e3-795d-48bd-9e0a-89fd1e9bbc42"}', true, true, true, '2025-11-19 17:23:46.493384+0300', '2025-11-19 17:56:11.189113+0300', 'ua-652adaba-46e1-4c33-bbe8-3375f149490b', '{ }', NULL, NULL, ''), (UUID('7ab87ea9-aa86-4f1a-b0bc-644f9323fa6a'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'rng', 'virtio', '{type=pci, slot=0x00, bus=0x06, domain=0x0000, function=0x0}', '{ "source" : "urandom"}', true, true, false, '2025-11-19 17:23:46.368577+0300', '2025-11-19 17:56:11.189113+0300', 'ua-7ab87ea9-aa86-4f1a-b0bc-644f9323fa6a', '{ }', NULL, NULL, ''), (UUID('e9937621-88d7-49d5-a3d6-7aa84f1ae715'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'channel', 'unix', '{type=virtio-serial, bus=0, controller=0, port=1}', '{ }', false, true, false, '2025-11-19 17:56:11.194576+0300', NULL, 'channel0', NULL, NULL, NULL, NULL), (UUID('5084aebc-dcc9-4923-a051-ca3de3f62283'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'channel', 'unix', '{type=virtio-serial, bus=0, controller=0, port=2}', '{ }', false, true, false, '2025-11-19 17:56:11.194576+0300', NULL, 'channel1', NULL, NULL, NULL, NULL), (UUID('1d0c5193-45d0-4cbd-86dc-b4b9508ab8e1'), UUID('078fd21e-7942-4c41-8281-560759dc6555'), 'channel', 'spicevmc', '{type=virtio-serial, bus=0, controller=0, port=3}', '{ }', false, true, false, '2025-11-19 17:56:11.194576+0300', NULL, 'channel2', NULL, NULL, NULL, NULL) ON CONFLICT (device_id, vm_id) DO UPDATE SET type = excluded.type, device = excluded.device, address = excluded.address, spec_params = excluded.spec_params, is_managed = excluded.is_managed, is_plugged = excluded.is_plugged, is_readonly = excluded.is_readonly, _create_date = excluded._create_date, _update_date = excluded._update_date, alias = excluded.alias, custom_properties = excluded.custom_properties, snapshot_id = excluded.snapshot_id, logical_name = excluded.logical_name, host_device = excluded.host_device;
COMMIT;
-- ===
Примерный вид структуры Disaster Recovery в хранилище РОСА Виртуализация
/data/hs
└── 7e91e01a-1f09-4d41-a60f-b8543b801760
├── disaster_data
│ ├── db_increments
│ │ └── 20251124T165718+0300.applied
│ └── state.json
Описание файлов хранилища РОСА Виртуализация
7e91e01a-1f09-4d41-a60f-b8543b801760 ‒ где 7e91e01a-1f09-4d41-a60f-b8543b801760 ‒ UUID резервного хранилища; точка монтирования резервного хранилища.
disaster_data ‒ директория Disaster Recovery, куда передаются файлы от rv-backup (диски, .lease- и .meta-файлы, инкременты базы данных). Изначально эта директория отсутствует в хранилище; создаётся приложением rv-backup.
db_increments ‒ директория Disaster Recovery, где хранятся инкременты базы данных. Отсюда их забирает rv-dr-sync и применяет к базе данных РЦУ.
20251124T165718+0300.applied ‒ файл инкремента базы данных, где:
20251124T165718+0300‒ дата создания рабочей директории;.applied‒ расширение файла и текущий статус инкремента.
Содержимое файла соответствует dump.sql. Возможные статусы:
.applied‒ инкремент был успешно применён;.busy‒ инкремент в процессе обработки;.skipped‒ инкремент был пропущен, т. к. имеется более актуальный;.failed‒ инкремент вызвал ошибку. Работа Disaster Recovery прервана.
state.json ‒ файл статуса Disaster Recovery хранит историю применения инкрементов базы данных, историю трансфера дисков, текущий статус.
Примерное содержание:
{
"disks_history": [
{
"transfer_id": 0,
"db_inc": "20251124T165718+0300",
"vm_id": "078fd21e-7942-4c41-8281-560759dc6555",
"disks": [
"0e2bf468-de52-44f2-94bd-1cc69c3c1367"]
},
{
"transfer_id": 1,
"db_inc": "20251124T165718+0300",
"vm_id": "078fd21e-7942-4c41-8281-560759dc6555",
"disks": [
"0e2bf468-de52-44f2-94bd-1cc69c3c1367"]
}
],
"current_state": {
"vm_id": "078fd21e-7942-4c41-8281-560759dc6555",
"checkpoint_id": "cba7f969-bc30-40b6-b5a9-e8a1a4afe0c9",
"db_inc": "20251124T165718+0300"
},
"apply_history": [
{
"vm_id": "078fd21e-7942-4c41-8281-560759dc6555",
"db_inc": "20251124T165718+0300",
"disks": [
"0e2bf468-de52-44f2-94bd-1cc69c3c1367"]
}
]
}