[原创]FreeBSD下用程序读出磁盘大小_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3467 | 回复: 0   主题: [原创]FreeBSD下用程序读出磁盘大小        下一篇 
wulcan
版主
等级:中校
经验:1795
发帖:124
精华:0
注册:2014-3-19
状态:离线
发送短消息息给wulcan 加好友    发送短消息息给wulcan 发消息
发表于: IP:您无权察看 2014-7-24 11:18:45 | [全部帖] [楼主帖] 楼主

有时候需要用程序读出硬盘的大小等信息,以下以php为例,演示整体的思路,其它语言也类似(当然有专用函数的语言除外)。

整体思路如下:

(1)选用sysctl kern.disks取出系统中的磁盘,这个结果是比较准确的,因为md等虚拟的磁盘不会出现在这个列表中。

(2)对每个磁盘执行diskinfo 命令,这个命令显示磁盘的名称,大小,簇大小,柱面,磁道等信息,我们只用第三列的磁盘大小,这个值是以字节为单位,比较大,所以我们再转换为G为单位。

程序如下:

//可以用sysctl输出磁盘列表,类似:kern.disks: cd0 ada0
$cmdstr = '/sbin/sysctl kern.disks';
$result = exec($cmdstr);
//两级preg_splite,只为了保险起见,其实只用后一级就可以,因为其他地方没有空格。
$result = preg_split("/:/",trim($result));
$result = preg_split("/\s+/",trim($result[1]));
foreach ( $result as $disk ){
//# diskinfo ada0的结果,其中第三列就是磁盘大小,单位是字节
//ada0 512 8589934592 16777216 0 0 16644 16 63
$cmdstr = '/usr/sbin/diskinfo ' . $disk;
$result2 = exec($cmdstr);
$result2 = preg_split('/\s+/',$result2);
$disksize = round(intval($result2[2]/1024/1024/1024));


 echo “磁盘” . $result2[0] . ‘大小为:’ . $disksize . ‘G字节’;

}

该贴被wulcan编辑于2014-7-24 11:19:54

该贴由hui.chen转至本版2014-11-5 17:04:56




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论