diff --git a/plugins/backup/nas/src/main/java/org/apache/cloudstack/backup/NASBackupProvider.java b/plugins/backup/nas/src/main/java/org/apache/cloudstack/backup/NASBackupProvider.java index 83c55f62512..33a648ac8fb 100644 --- a/plugins/backup/nas/src/main/java/org/apache/cloudstack/backup/NASBackupProvider.java +++ b/plugins/backup/nas/src/main/java/org/apache/cloudstack/backup/NASBackupProvider.java @@ -134,8 +134,9 @@ public class NASBackupProvider extends AdapterBase implements BackupProvider, Co throw new CloudRuntimeException("No valid backup repository found for the VM, please check the attached backup offering"); } + final Date creationDate = new Date(); final String backupPath = String.format("%s/%s", vm.getInstanceName(), - new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new java.util.Date())); + new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(creationDate)); TakeBackupCommand command = new TakeBackupCommand(vm.getInstanceName(), backupPath); command.setBackupRepoType(backupRepository.getType()); @@ -151,12 +152,12 @@ public class NASBackupProvider extends AdapterBase implements BackupProvider, Co throw new CloudRuntimeException("Operation to initiate backup timed out, please try again"); } - if (answer != null) { + if (answer != null && answer.getResult()) { BackupVO backup = new BackupVO(); backup.setVmId(vm.getId()); backup.setExternalId(backupPath); backup.setType("FULL"); - backup.setDate(new Date()); + backup.setDate(creationDate); backup.setSize(answer.getSize()); Long virtualSize = 0L; for (final Volume volume: volumeDao.findByInstance(vm.getId())) { diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtTakeBackupCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtTakeBackupCommandWrapper.java index d228c48296a..af02f2aa06a 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtTakeBackupCommandWrapper.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtTakeBackupCommandWrapper.java @@ -45,7 +45,7 @@ public class LibvirtTakeBackupCommandWrapper extends CommandWrapper commands = new ArrayList<>(); commands.add(new String[]{ libvirtComputingResource.getNasBackupPath(), - "-b", "backup", + "-o", "backup", "-v", vmName, "-t", backupRepoType, "-s", backupRepoAddress, @@ -55,11 +55,9 @@ public class LibvirtTakeBackupCommandWrapper extends CommandWrapper result = Script.executePipedCommands(commands, libvirtComputingResource.getCmdsTimeout()); - logger.debug("VM Backup Result: " + result.second() + ", exit code: " + result.first()); - if (result.first() != 0) { logger.debug("Failed to take VM backup: " + result.second()); - return new BackupAnswer(command, false, result.second()); + return new BackupAnswer(command, false, result.second().trim()); } List outputLines = Arrays.asList(result.second().trim().split("\n")); @@ -68,7 +66,7 @@ public class LibvirtTakeBackupCommandWrapper extends CommandWrapper" > $dest/backup.xml - for disk in $(virsh -c qemu:///system domblklist $vm --details 2>/dev/null | awk '/disk/{print$3}'); do - echo "" >> $dest/backup.xml + for disk in $(virsh -c qemu:///system domblklist $VM --details 2>/dev/null | awk '/disk/{print$3}'); do + volpath=$(virsh -c qemu:///system domblklist $VM --details | awk "/$disk/{print $4}" | sed 's/.*\///') + echo "" >> $dest/backup.xml deviceId=$((devideId+1)) name="datadisk" done echo "" >> $dest/backup.xml - virsh -c qemu:///system backup-begin --domain $vm --backupxml $dest/backup.xml > /dev/null 2>/dev/null - virsh -c qemu:///system dumpxml $vm > $dest/domain-$vm.xml 2>/dev/null + # Start push backup + virsh -c qemu:///system backup-begin --domain $VM --backupxml $dest/backup.xml > /dev/null 2>/dev/null - until virsh -c qemu:///system domjobinfo $vm --completed --keep-completed 2>/dev/null | grep "Completed" > /dev/null; do + # Backup domain information + virsh -c qemu:///system dumpxml $VM > $dest/domain-config.xml 2>/dev/null + virsh -c qemu:///system dominfo $VM > $dest/dominfo.xml 2>/dev/null + virsh -c qemu:///system domiflist $VM > $dest/domiflist.xml 2>/dev/null + virsh -c qemu:///system domblklist $VM > $dest/domblklist.xml 2>/dev/null + + until virsh -c qemu:///system domjobinfo $VM --completed --keep-completed 2>/dev/null | grep "Completed" > /dev/null; do sleep 5 done rm -f $dest/backup.xml sync # Print statistics - virsh -c qemu:///system domjobinfo $vm --completed + virsh -c qemu:///system domjobinfo $VM --completed du -sb $dest | cut -f1 umount $mount_point