Commit f0f64cbc authored by Oleg Dzhimiev's avatar Oleg Dzhimiev

work with disk devices

parent 36e20c2f
...@@ -21,6 +21,7 @@ ...@@ -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])) ...@@ -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,13 +40,25 @@ switch($cmd){ ...@@ -38,13 +40,25 @@ 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);
else $res = 0; else $res = 0;
respond_xml($res); respond_xml($res);
} }
break; break;
default: default:
......
...@@ -22,7 +22,8 @@ PHP_SCRIPTS=i2c.php \ ...@@ -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"
......
<?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;
}
?>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment