use PVE::Storage::Plugin;
use PVE::Storage;
use PVE::QemuServer;
+use PVE::JSONSchema;
use IO::File;
use IPC::Open3;
PVE::VZDump::check_bin('qm');
- my $self = bless { vzdump => $vzdump };
+ my $self = bless { vzdump => $vzdump }, $class;
$self->{vmlist} = PVE::QemuServer::vzlist();
$self->{storecfg} = PVE::Storage::config();
return if PVE::QemuServer::drive_is_cdrom($drive);
+ my $volid = $drive->{file};
+
if (defined($drive->{backup}) && !$drive->{backup}) {
- $self->loginfo("exclude disk '$ds' (backup=no)");
+ $self->loginfo("exclude disk '$ds' '$volid' (backup=no)");
return;
} elsif ($drive->{iothread}) {
- die "disk '$ds' (iothread=on) can't use backup feature currently. Please set backup=no for this drive";
+ die "disk '$ds' '$volid' (iothread=on) can't use backup feature currently. Please set backup=no for this drive";
+ } else {
+ my $log = "include disk '$ds' '$volid'";
+ if (defined $drive->{size}) {
+ my $readable_size = PVE::JSONSchema::format_size($drive->{size});
+ $log .= " $readable_size";
+ }
+ $self->loginfo($log);
}
- my $volid = $drive->{file};
-
my ($storeid, $volname) = PVE::Storage::parse_volume_id($volid, 1);
push @$vollist, $volid if $storeid;
$drivehash->{$ds} = $drive;
$outcmd = "exec:cat";
}
- $outcmd .= ">$filename" if !$opts->{stdout};
+ $outcmd .= " > $filename" if !$opts->{stdout};
my $cmd = ['/usr/bin/vma', 'create', '-v', '-c', $conffile];
push @$cmd, '-c', $firewall if -e $firewall;
$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);
}
}
- $qmpclient->queue_execute();
+ eval { $qmpclient->queue_execute() };
+ my $qmperr = $@;
- 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);
}
}
+ die $qmperr if $qmperr;
die $qmpclient->{errors}->{$vmid} if $qmpclient->{errors}->{$vmid};
if ($cpid) {
my $statusline = "status: $per% ($transferred/$total), " .
"sparse ${zero_per}% ($zero), duration $duration, " .
- "$mbps_read/$mbps_write MB/s";
+ "read/write $mbps_read/$mbps_write MB/s";
my $res = $status->{status} || 'unknown';
if ($res ne 'active') {
$self->loginfo($statusline);