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}"); } }
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"); } }