2013-08-12 27 views
5

Tôi có một tập lệnh PHP cần kiểm tra tổng dung lượng của đĩa. Tôi đã sử dụng thành công disk_total_space một thời gian và đã chuyển sang một máy chủ mới sử dụng LVM. disk_total_space hiện báo cáo một kích thước hoàn toàn khác. Tôi đã tạo lại điều này trên một máy chủ LVM thứ hai.PHP disk_total_space sẽ không đo kích thước phân vùng LVM

df -h trên máy chủ đầu tiên (CentOS 6.4, PHP v5.3.27) cho thấy

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 

nhưng disk_total_space ('/ dev/mapper/VG-vg_mysql') trả 32G. Trong thực tế, nó trả về 32G bất cứ phân vùng nào tôi nhập vào trong lệnh.

Trên một máy chủ thứ hai (Ubuntu 10.04.4LTS, PHP v5.3.6), tôi nhận được cùng một loại hành vi:

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 

và disk_total_space ('/ dev/mapper/gàn-root') lợi nhuận 4G.

Trong cả hai trường hợp, dường như nó trả về lượng không gian đĩa không được LVM xử lý. Có cách nào để có được tổng kích thước của một phân vùng LVM bằng cách sử dụng PHP?

+0

Vì vậy, về cơ bản này ins't một vấn đề với PHP, có nghĩa là nó không phải là một lập trình câu hỏi có nghĩa là nó phù hợp nhất cho [Super User] (http://superuser.com)? – HamZa

+1

Có vẻ như vấn đề với PHP đối với tôi. disk_total_space sẽ trả về kích thước của một phân vùng, nhưng trong một số trường hợp nó không. Tôi rất vui khi được sửa chữa về điều này, nhưng nó trông giống như một câu hỏi lập trình với tôi. –

+0

Hành vi trong dòng lệnh là gì? Nếu nó giống nhau, thì nó không liên quan gì tới PHP. – HamZa

Trả lời

3

Tôi đã có một vấn đề tương tự tại một thời điểm ... tôi cần để có được không gian tổng và sử dụng trên LVM logical volumes từ một kịch bản PHP ...

tôi đã viết một chức năng nhỏ xấu xí đó trả về một đa mảng chiều với các dữ liệu hệ thống tập tin từ df ...

Mỗi mảng chứa:

  • filesystem
  • Mount Point
  • Total Space
  • đã qua sử dụng không gian

Như tôi đã nói, đó là xấu xí, nhưng nó hoạt động ...

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; 
} 
+1

Nó có thể xấu xí, nhưng nó hoạt động độc đáo (miễn là bạn có shell_exec). Cảm ơn rất nhiều! –

Các vấn đề liên quan