【问题标题】:PHP disk_total_space won't measure LVM partition sizePHP disk_total_space 不会测量 LVM 分区大小
【发布时间】:2013-08-13 17:54:21
【问题描述】:

我有一个 PHP 脚本,它需要检查磁盘的总大小。我已经成功使用了一段时间的 disk_total_space,并且刚刚移动到使用 LVM 的新服务器。 disk_total_space 现在报告完全不同的大小。我已经在第二个 LVM 服务器上重新创建了它。

df -h 在第一台服务器(CentOS 6.4,PHP v5.3.27)上显示

Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/vg-vg_root    99G   47G   47G  50% /
tmpfs                     32G     0   32G   0% /dev/shm
/dev/sda1                194M   65M  120M  36% /boot
/dev/mapper/vg-vg_backup 400G   33M  400G   1% /var/tmp
/dev/mapper/vg-vg_mysql  950G   81G  870G   9% /data

但是 disk_total_space('/dev/mapper/vg-vg_mysql') 返回 32G。事实上,无论我在命令中输入什么分区,它都会返回 32G。

在第二台服务器(Ubuntu 10.04.4LTS,PHP v5.3.6)上,我得到了同样的行为:

Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/batty-root  258G  217G   29G  89% /
none                    4.0G  208K  4.0G   1% /dev
none                    4.0G     0  4.0G   0% /dev/shm
none                    4.0G   88K  4.0G   1% /var/run
none                    4.0G     0  4.0G   0% /var/lock
none                    4.0G     0  4.0G   0% /lib/init/rw
none                    258G  217G   29G  89% /var/lib/ureadahead/debugfs

并且 disk_total_space('/dev/mapper/batty-root') 返回 4G。

在这两种情况下,它似乎都返回了 LVM 未处理的磁盘空间量。有没有办法使用 PHP 获取 LVM 分区的总大小?

【问题讨论】:

  • 所以基本上这不是 PHP 的问题,这意味着它不是编程问题,这意味着它最适合 Super User
  • 对我来说,这看起来就像是 PHP 的问题。 disk_total_space 应该返回分区的大小,但在某些情况下它不会。我很高兴得到纠正,但这对我来说似乎是一个编程问题。
  • 命令行中的行为是什么?如果都一样,那就和PHP没关系了。
  • 这一切都来自命令行,但我通过 Apache 得到了相同的行为。
  • 我正在取消我的近距离投票,但我真的认为你可以在超级用户那里获得更多帮助。如果不确定,您可以进入聊天室询问。

标签: php lvm


【解决方案1】:

我曾经遇到过类似的问题...我需要从 PHP 脚本中获取 LVM 逻辑卷上的总空间和已用空间...

我写了一个丑陋的小函数,它返回一个多维数组,其中包含来自df 的文件系统数据...

每个数组包含:

  • 文件系统
  • 安装点
  • 总空间
  • 已用空间

就像我说的,它很丑,但它有效......

function disk_space()
{
    $cmd    = 'df -P | gawk \'{ printf "%s\t%s\t%s\t%s\n", $1, $6, $2, $3 }\'';
    $data   = trim(shell_exec($cmd));

    $return = array();
    $lines  = explode("\n", $data);
    unset($lines[0]);

    foreach($lines as $line){
        $return[] = explode("\t", $line);
    }

    return $return;
}

【讨论】:

  • 它可能很难看,但效果很好(只要你有 shell_exec)。非常感谢!
猜你喜欢
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 2012-04-18
  • 2011-04-27
相关资源
最近更新 更多