Commit f0f64cbc authored by Oleg Dzhimiev's avatar Oleg Dzhimiev
Browse files

work with disk devices

parent 36e20c2f
Loading
Loading
Loading
Loading
+18 −4
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@
*/
*/


include 'include/response.php';
include 'include/response.php';
include 'include/devices.php';


$cmd = "donothing";
$cmd = "donothing";
if (isset($_GET['cmd']))
if (isset($_GET['cmd']))
@@ -31,6 +32,7 @@ else if (isset($argv[1]))
#hardcoded for eyesis4pi
#hardcoded for eyesis4pi
$symlink = "/www/pages/ssd";
$symlink = "/www/pages/ssd";
$mountpoint = "/mnt/sda1";
$mountpoint = "/mnt/sda1";
$camogmdisk = "/home/root/camogm.disk";
  
  
switch($cmd){
switch($cmd){
  case "symlink":
  case "symlink":
@@ -38,8 +40,20 @@ switch($cmd){
    die(symlink($mountpoint,$symlink));
    die(symlink($mountpoint,$symlink));
    break;
    break;
  case "free_space":
  case "free_space":
    if ($_GET['mountpoint']=="/mnt/sda2"){
    // /dev/sda2 is not a mountpoint but a device because it does not have a file system
    if ($_GET['mountpoint']=="/dev/sda2"){
      //root@elphel393:~# cat /home/root/camogm.disk
      //Device          Start LBA       Current LBA     End LBA
      ///dev/sda2       195334335       545641716       976768065

      if (!is_file($camogmdisk)){
        
      }else{
        
      }
      
      respond_xml("test");
      respond_xml("test");
      
      //unpartitioned area
      //unpartitioned area
    }else{
    }else{
      if (is_dir($mountpoint)) $res = disk_free_space($mountpoint);
      if (is_dir($mountpoint)) $res = disk_free_space($mountpoint);
+2 −1
Original line number Original line Diff line number Diff line
@@ -22,7 +22,8 @@ PHP_SCRIPTS=i2c.php \
PHPINCLUDES=i2c_include.php \
PHPINCLUDES=i2c_include.php \
            show_source_include.php \
            show_source_include.php \
            parallel_requests.php \
            parallel_requests.php \
            response.php
            response.php \
            devices.php
            
            
all:
all:
	@echo "make all in src"
	@echo "make all in src"
+106 −0
Original line number Original line Diff line number Diff line
<?php
/*
*!***************************************************************************
*! FILE NAME  : devices.php
*! DESCRIPTION: get devices info
*! Copyright (C) 2016 Elphel, Inc.
*! --------------------------------------------------------------------------
*!  This program is free software: you can redistribute it and/or modify
*!  it under the terms of the GNU General Public License as published by
*!  the Free Software Foundation, either version 3 of the License, or
*!  (at your option) any later version.
*!
*!  This program is distributed in the hope that it will be useful,
*!  but WITHOUT ANY WARRANTY; without even the implied warranty of
*!  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*!  GNU General Public License for more details.
*!
*!  You should have received a copy of the GNU General Public License
*!  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*! --------------------------------------------------------------------------
*/

/** Get a list of suitable partitions. The list will contain SATA devices only and
 * will have the following format: "name" => "size_in_blocks".
 */
function get_partitions()
{
	$names = array();
	$regexp = '/([0-9]+) +(sd[a-z0-9]+$)/';
	exec("cat /proc/partitions", $partitions);

	// the first two elements of an array are table header and empty line delimiter, skip them
	for ($i = 2; $i < count($partitions); $i++) {
		// select SATA devices only
		if (preg_match($regexp, $partitions[$i], $name) == 1) {
			$names[$name[2]] = $name[1];
			$j++;
		}
	}
	return $names;
}

/** Get a list of disk devices which have file system and can be mounted. This function
 *  uses 'blkid' command from busybox.
 */ 
function get_mnt_dev()
{
	$partitions = get_partitions();
	$devices = array();
	$fs_types = array();
	foreach ($partitions as $partition => $size) {
		$res = array();
		$dev = "/dev/" . $partition;
		exec("blkid " . $dev, $res);
		if (!empty($res)) {
			$devices[$i] = preg_replace('/: +.*/', "", $res[0]);
			if (preg_match('/(?<=TYPE=")[a-z0-9]+(?=")/', $res[0], $fs) == 1)
				$fs_types[$i] = $fs[0];
			else
				$fs_types[$i] = "none";
			$i++;
		}
	}
	
	return array("devices" => $devices, "types" => $fs_types);
}

/** Get a list of devices whithout file system which can be used for raw disk storage from camogm. */
function get_raw_dev()
{
	$j = 0;
	$ret = get_mnt_dev();
	$devices = $ret["devices"]; 
	$types = $ret["types"];

	$names = get_partitions();
	
	// filter out partitions with file system 
	$i = 0;
	$raw_devices = array();

	foreach ($names as $name => $size) {
		$found = false;
		foreach ($devices as $device) {
			if (strpos($device, $name) !== false)
				$found = true;
		}
		if ($found === false) {
			// current partition is not found in the blkid list, add it to raw devices
			$raw_devices["/dev/" . $name] = $size;
			$i++;
		}
	}
	
	//special case
	if (count($raw_devices)>1) {
            foreach($raw_devices as $k=>$v){
                if (preg_match('/sd[a-z][0-9]/',$k)==0) {
                    unset($raw_devices[$k]);
                }
            }
	}
	return $raw_devices;
}

?>