예제 #1
0
function mount_usb($pattern, $ID, $testwrite = true)
{
    $backup = new backup_protocols();
    $uuid = $backup->extractFirsRessource($pattern);
    $unix = new unix();
    $rsync = $unix->find_program("rsync");
    if ($uuid == null) {
        backup_events($ID, "initialization", "ERROR, (usb) usb protocol error {$pattern}", __LINE__);
        writelogs(date('m-d H:i:s') . " " . "[TASK {$ID}]: usb protocol error {$pattern}", __FUNCTION__, __FILE__, __LINE__);
        return false;
    }
    $usb = new usb($uuid);
    writelogs(date('m-d H:i:s') . " " . "[TASK {$ID}]: {$uuid} {$usb->path} FS_TYPE: {$usb->ID_FS_TYPE}", __FUNCTION__, __FILE__, __LINE__);
    if ($usb->ID_FS_TYPE == null) {
        backup_events($ID, "initialization", "ERROR, (usb) usb type error {$pattern}", __LINE__);
        return false;
    }
    if ($usb->path == null) {
        backup_events($ID, "initialization", "ERROR, (usb) usb dev error {$pattern}", __LINE__);
        return false;
    }
    $mount = new mount($GLOBALS["ADDLOG"]);
    $mount_path = "/opt/artica/mounts/backup/{$ID}";
    if (!$mount->ismounted($mount_path)) {
        backup_events($ID, "initialization", "ERROR, (usb) local mount point {$mount_path} not mounted");
        @mkdir($mount_path, null, true);
    }
    if (!$mount->usb_mount($mount_path, $usb->ID_FS_TYPE, $usb->path)) {
        backup_events($ID, "initialization", "ERROR, (usb) unable to mount target point");
        return false;
    }
    if (!$testwrite) {
        writelogs(date('m-d H:i:s') . " " . "[TASK {$ID}]: Test write has been cancelled", __FUNCTION__, __FILE__, __LINE__);
        return true;
    }
    $md5 = md5(date('Y-m-d H:i:s'));
    writelogs(date('m-d H:i:s') . " " . "[TASK {$ID}]: Test write Creating file \"{$mount_path}/{$md5}\"", __FUNCTION__, __FILE__, __LINE__);
    try {
        file_put_contents("{$mount_path}/{$md5}", time());
    } catch (Exception $e) {
        $IOERROR = $e->getMessage();
    }
    if (is_file("{$mount_path}/{$md5}")) {
        @unlink("{$mount_path}/{$md5}");
        if (is_file($rsync)) {
            $GLOBALS["COMMANDLINECOPY"] = "{$rsync} -ar {SRC_PATH} {NEXT} --stats --chmod=ug=rwX,o=rwX";
        } else {
            $GLOBALS["COMMANDLINECOPY"] = "/bin/cp -ru {SRC_PATH} {NEXT}";
        }
        $GLOBALS["COMMANDLINE_MOUNTED_PATH"] = $mount_path;
        writelogs(date('m-d H:i:s') . " " . "[TASK {$ID}]: OK !", __FUNCTION__, __FILE__, __LINE__);
        if ($GLOBALS["ONLY_TESTS"]) {
            writelogs(date('m-d H:i:s') . " " . "<H2>{success}</H2>", __FUNCTION__, __FILE__, __LINE__);
        }
        return true;
    } else {
        backup_events($ID, "initialization", "ERROR, (usb) {$mount_path}/{$md5} {$IOERROR}");
        backup_events($ID, "initialization", "ERROR, (usb) {$mount_path}/{$md5} should be a permission denied (I/O error)");
        $unix = new unix();
        $unix->send_email_events("Backup: task id {$ID} aborted, unable to write into the device {$usb->path} FS_TYPE: {$usb->ID_FS_TYPE}", "Artica has tried to write {$mount_path}/{$md5} into this mounted device but it seems that it is impossible\n{$IOERROR}", "backup");
        writelogs(date('m-d H:i:s') . " " . "[TASK {$ID}]: Failed !!!, umounting...{$mount_path}", __FUNCTION__, __FILE__, __LINE__);
        $umount = $unix->find_program("umount");
        exec("{$umount} -l {$mount_path}");
    }
}
예제 #2
0
function mount_usb($pattern,$ID,$testwrite=true){
	$backup=new backup_protocols();
	$uuid=$backup->extractFirsRessource($pattern);
	$unix=new unix();
	$rsync=$unix->find_program("rsync");
	
	
	
	if($uuid==null){
		backup_events($ID,"initialization","ERROR, (usb) usb protocol error $pattern");
		writelogs(date('m-d H:i:s')." "."[TASK $ID]: usb protocol error $pattern",__FUNCTION__,__FILE__,__LINE__);
		return false;
	}
	
	$usb=new usb($uuid);
	writelogs(date('m-d H:i:s')." "."[TASK $ID]: $uuid $usb->path FS_TYPE: $usb->ID_FS_TYPE",__FUNCTION__,__FILE__,__LINE__);	
	
	if($usb->ID_FS_TYPE==null){
		backup_events($ID,"initialization","ERROR, (usb) usb type error $pattern");
		return false;
	}
	
	if($usb->path==null){
		backup_events($ID,"initialization","ERROR, (usb) usb dev error $pattern");
		return false;
	}	
	
	$mount=new mount($GLOBALS["ADDLOG"]);
	$mount_path="/opt/artica/mounts/backup/$ID";
	
	if(!$mount->ismounted($mount_path)){
		backup_events($ID,"initialization","ERROR, (usb) local mount point $mount_path not mounted");
		@mkdir($mount_path,null,true);
	}	
	
	if(!$mount->usb_mount($mount_path,$usb->ID_FS_TYPE,$usb->path)){
		backup_events($ID,"initialization","ERROR, (usb) unable to mount target point");
		return false;	
		
	}
	
	if(!$testwrite){return true;}
	
	$md5=md5(date('Y-m-d H:i:s'));
	@file_put_contents("$mount_path/$md5","#");
	if(is_file("$mount_path/$md5")){
		@unlink("$mount_path/$md5");
		if(is_file($rsync)){
			$GLOBALS["COMMANDLINECOPY"]="$rsync -ar {SRC_PATH} {NEXT} --stats --chmod=ug=rwX,o=rwX";
		}else{
			$GLOBALS["COMMANDLINECOPY"]="/bin/cp -ru {SRC_PATH} {NEXT}";
		}
		
		$GLOBALS["COMMANDLINE_MOUNTED_PATH"]=$mount_path;		
		writelogs(date('m-d H:i:s')." "."[TASK $ID]: OK !",__FUNCTION__,__FILE__,__LINE__);
		if($GLOBALS["ONLY_TESTS"]){writelogs(date('m-d H:i:s')." "."<H2>{success}</H2>",__FUNCTION__,__FILE__,__LINE__);}
		return true;
	}else{
		backup_events($ID,"initialization","ERROR, (usb) $mount_path/$md5 permission denied");
		exec("umount -l $mount_path");
	}	
	
	
	
}