logger_.info(String.format("mode is %s.", mode.toString()));
/* Get config/profile. */
ConfigGlobal cfgGlobal = vmArcMgr.getConfigGlobal();
ProfileGeneration profGen = vmArcMgr.getTargetGeneration();
assert cfgGlobal != null;
assert profGen != null;
String vmdkBkp = cfgGlobal.getVmdkBkpPath();
assert vmdkBkp != null;
List<String> cmds = new LinkedList<String>();
//cmds.add("echo");
cmds.add(vmdkBkp);
cmds.add("dump");
cmds.add("--mode");
if (mode == BackupMode.UNKNOWN) {
logger_.warning("backup mode is unknown.");
return false;
}
cmds.add(mode.toString());
cmds.add("--server");
cmds.add(cfgGlobal.getServername());
cmds.add("--username");
cmds.add(cfgGlobal.getUsername());
cmds.add("--password");
cmds.add(cfgGlobal.getPassword());
cmds.add("--vm");
cmds.add(vmMoref);
cmds.add("--snapshot");
cmds.add(profGen.getSnapshotMoref());
cmds.add("--remote");
cmds.add(profGen.getRemoteDiskPath(diskId));
if (isSan) { cmds.add("--san"); }
String prevDumpPath = null;
if (mode == BackupMode.DIFF || mode == BackupMode.INCR) {
cmds.add("--dumpin"); /* dumpIn */
prevDumpPath = vmArcMgr.getPrevDumpPath(diskId);
cmds.add(prevDumpPath);
}
cmds.add("--dumpout"); /* dumpOut */
cmds.add(profGen.getDumpOutFileName(diskId));
String prevDigestPath = null;
if (mode == BackupMode.DIFF || mode == BackupMode.INCR) {
cmds.add("--digestin"); /* digestIn */
prevDigestPath = vmArcMgr.getPrevDigestPath(diskId);
cmds.add(prevDigestPath);
}
cmds.add("--digestout"); /* digestOut */
cmds.add(profGen.getDigestOutFileName(diskId));
if (mode == BackupMode.INCR) {
cmds.add("--bmpin"); /* bmpIn */
cmds.add(profGen.getBmpInFileName(diskId));
}
if (mode == BackupMode.DIFF || mode == BackupMode.INCR) {
cmds.add("--rdiffout"); /* rdiffOut */
cmds.add(profGen.getRdiffOutFileName(diskId));
}
String joined = FormatString.join(cmds, " ");
logger_.info(String.format("exec: %s\n", joined)); /* debug */
//String squated = FormatString.toSingleQuatedString(joined);
//logger_.info(String.format("squated: %s\n", squated)); /* debug */
List<String> cmds2 = new LinkedList<String>();
cmds2.add("/bin/sh");
cmds2.add("-c");
cmds2.add(joined);
/* get working directory */
String workDir = profGen.getDirectory();
/* prepare output files for stdout/stderr. */
String outFilePath = workDir + "/" + diskId + ".log";
String errFilePath = workDir + "/" + diskId + ".err";