From 1a988fd2e84dcd2c6f6cf5becbe7eb0025a77336 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Fri, 10 Nov 2017 09:47:43 +0100 Subject: [PATCH] check if ga runs before a fsfreeze-freeze/thaw since the guest-fsfreeze-freeze command has a timeout of 1 hour, we want to check if the guest-agent even runs before executing that, or else we wait 1 hour and then continue Signed-off-by: Dominik Csapak Reviewed-by: Thomas Lamprecht --- PVE/QemuServer.pm | 5 +++-- PVE/VZDump/QemuServer.pm | 10 ++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 2e822f37..7104ba2d 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -6079,7 +6079,8 @@ sub qemu_drive_mirror_monitor { last if $skipcomplete; #do the complete later if ($vmiddst && $vmiddst != $vmid) { - if ($qga) { + my $agent_running = $qga && qga_check_running($vmid); + if ($agent_running) { print "freeze filesystem\n"; eval { PVE::QemuServer::vm_mon_cmd($vmid, "guest-fsfreeze-freeze"); }; } else { @@ -6090,7 +6091,7 @@ sub qemu_drive_mirror_monitor { # if we clone a disk for a new target vm, we don't switch the disk PVE::QemuServer::qemu_blockjobs_cancel($vmid, $jobs); - if ($qga) { + if ($agent_running) { print "unfreeze filesystem\n"; eval { PVE::QemuServer::vm_mon_cmd($vmid, "guest-fsfreeze-thaw"); }; } else { diff --git a/PVE/VZDump/QemuServer.pm b/PVE/VZDump/QemuServer.pm index 65ca09d0..a6308293 100644 --- a/PVE/VZDump/QemuServer.pm +++ b/PVE/VZDump/QemuServer.pm @@ -404,7 +404,13 @@ sub archive { $qmpclient->queue_cmd($vmid, $add_fd_cb, 'getfd', fd => $outfileno, fdname => "backup"); - if ($self->{vmlist}->{$vmid}->{agent} && $vm_is_running){ + my $agent_running = 0; + + if ($self->{vmlist}->{$vmid}->{agent} && $vm_is_running) { + $agent_running = PVE::QemuServer::qga_check_running($vmid); + } + + if ($agent_running){ eval { PVE::QemuServer::vm_mon_cmd($vmid, "guest-fsfreeze-freeze"); }; if (my $err = $@) { $self->logerr($err); @@ -413,7 +419,7 @@ sub archive { $qmpclient->queue_execute(); - if ($self->{vmlist}->{$vmid}->{agent} && $vm_is_running ){ + if ($agent_running){ eval { PVE::QemuServer::vm_mon_cmd($vmid, "guest-fsfreeze-thaw"); }; if (my $err = $@) { $self->logerr($err);