diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java
index 4d9ceb4bfee..4a99e892251 100644
--- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java
+++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java
@@ -996,15 +996,19 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
String volumeName = UUID.randomUUID().toString();
if (copyToSecondary) {
+ String destVolumeName = volumeName + ".qcow2";
KVMPhysicalDisk volume = primaryPool.getPhysicalDisk(cmd.getVolumePath());
String volumeDestPath = "/volumes/" + cmd.getVolumeId() + File.separator;
+ secondaryStoragePool = _storagePoolMgr.getStoragePoolByURI(secondaryStorageUrl);
+ secondaryStoragePool.createFolder(volumeDestPath);
+ secondaryStoragePool.delete();
secondaryStoragePool = _storagePoolMgr.getStoragePoolByURI(secondaryStorageUrl + volumeDestPath);
- _storagePoolMgr.copyPhysicalDisk(volume, volumeName, secondaryStoragePool);
+ _storagePoolMgr.copyPhysicalDisk(volume, destVolumeName, secondaryStoragePool);
return new CopyVolumeAnswer(cmd, true, null, null, volumeName);
} else {
- volumePath = "/volumes/" + cmd.getVolumeId() + File.separator + volumePath;
+ volumePath = "/volumes/" + cmd.getVolumeId() + File.separator;
secondaryStoragePool = _storagePoolMgr.getStoragePoolByURI(secondaryStorageUrl + volumePath);
- KVMPhysicalDisk volume = secondaryStoragePool.getPhysicalDisk(cmd.getVolumePath());
+ KVMPhysicalDisk volume = secondaryStoragePool.getPhysicalDisk(cmd.getVolumePath() + ".qcow2");
_storagePoolMgr.copyPhysicalDisk(volume, volumeName, primaryPool);
return new CopyVolumeAnswer(cmd, true, null, null, volumeName);
}
diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtStorageVolumeDef.java b/agent/src/com/cloud/agent/resource/computing/LibvirtStorageVolumeDef.java
index 7fc6a0df993..11b697dd0cb 100644
--- a/agent/src/com/cloud/agent/resource/computing/LibvirtStorageVolumeDef.java
+++ b/agent/src/com/cloud/agent/resource/computing/LibvirtStorageVolumeDef.java
@@ -71,6 +71,9 @@ public class LibvirtStorageVolumeDef {
}
storageVolBuilder.append("\n");
storageVolBuilder.append("\n");
+ storageVolBuilder.append("");
+ storageVolBuilder.append("0744");
+ storageVolBuilder.append("");
storageVolBuilder.append("\n");
if (_backingPath != null) {
storageVolBuilder.append("\n");
diff --git a/agent/src/com/cloud/agent/storage/KVMStoragePool.java b/agent/src/com/cloud/agent/storage/KVMStoragePool.java
index 7bdbb2a6a9a..36a088f1610 100644
--- a/agent/src/com/cloud/agent/storage/KVMStoragePool.java
+++ b/agent/src/com/cloud/agent/storage/KVMStoragePool.java
@@ -20,4 +20,5 @@ public interface KVMStoragePool {
public StoragePoolType getType();
public boolean delete();
PhysicalDiskFormat getDefaultFormat();
+ public boolean createFolder(String path);
}
diff --git a/agent/src/com/cloud/agent/storage/KVMStoragePoolManager.java b/agent/src/com/cloud/agent/storage/KVMStoragePoolManager.java
index 6e10ce8eed3..99e62d9aaf2 100644
--- a/agent/src/com/cloud/agent/storage/KVMStoragePoolManager.java
+++ b/agent/src/com/cloud/agent/storage/KVMStoragePoolManager.java
@@ -74,6 +74,4 @@ public class KVMStoragePoolManager {
public KVMPhysicalDisk getPhysicalDiskFromUrl(String url) {
return this._storageAdaptor.getPhysicalDiskFromURI(url);
}
-
-
}
diff --git a/agent/src/com/cloud/agent/storage/LibvirtStorageAdaptor.java b/agent/src/com/cloud/agent/storage/LibvirtStorageAdaptor.java
index e729220be3b..5d6bde44f74 100644
--- a/agent/src/com/cloud/agent/storage/LibvirtStorageAdaptor.java
+++ b/agent/src/com/cloud/agent/storage/LibvirtStorageAdaptor.java
@@ -60,6 +60,15 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
_manageSnapshotPath = Script.findScript("scripts/storage/qcow2/", "managesnapshot.sh");
}
+ @Override
+ public boolean createFolder(String uuid, String path) {
+ String mountPoint = _mountPoint + File.separator + uuid;
+ File f = new File(mountPoint + path);
+ if (!f.exists()) {
+ f.mkdirs();
+ }
+ return true;
+ }
public StorageVol getVolume(StoragePool pool, String volName) {
StorageVol vol = null;
@@ -590,7 +599,6 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
String destPath = newDisk.getPath();
Script.runSimpleBashScript("qemu-img convert -f " + disk.getFormat() + " -O " + newDisk.getFormat() + " " + sourcePath + " " + destPath);
-
return newDisk;
}
@@ -658,5 +666,7 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
return true;
}
+
+
}
diff --git a/agent/src/com/cloud/agent/storage/LibvirtStoragePool.java b/agent/src/com/cloud/agent/storage/LibvirtStoragePool.java
index cefd93d69aa..7c9cb302959 100644
--- a/agent/src/com/cloud/agent/storage/LibvirtStoragePool.java
+++ b/agent/src/com/cloud/agent/storage/LibvirtStoragePool.java
@@ -134,4 +134,9 @@ public class LibvirtStoragePool implements KVMStoragePool {
public boolean delete() {
return this._storageAdaptor.deleteStoragePool(this);
}
+
+ @Override
+ public boolean createFolder(String path) {
+ return this._storageAdaptor.createFolder(this.uuid, path);
+ }
}
diff --git a/agent/src/com/cloud/agent/storage/StorageAdaptor.java b/agent/src/com/cloud/agent/storage/StorageAdaptor.java
index c966c6ad1b5..f99717a6480 100644
--- a/agent/src/com/cloud/agent/storage/StorageAdaptor.java
+++ b/agent/src/com/cloud/agent/storage/StorageAdaptor.java
@@ -2,6 +2,8 @@ package com.cloud.agent.storage;
import java.util.List;
+import org.libvirt.StoragePool;
+
import com.cloud.agent.storage.KVMPhysicalDisk.PhysicalDiskFormat;
import com.cloud.storage.Storage.StoragePoolType;
@@ -22,5 +24,6 @@ public interface StorageAdaptor {
public KVMPhysicalDisk getPhysicalDiskFromURI(String uri);
public boolean refresh(KVMStoragePool pool);
public boolean deleteStoragePool(KVMStoragePool pool);
+ public boolean createFolder(String uuid, String path);
}