2013-08-12 8 views
5

Mam skrypt PHP, który musi sprawdzić całkowity rozmiar dysku. Używam disk_total_space pomyślnie od jakiegoś czasu i właśnie przeniosłem się do nowego serwera, który używa LVM. disk_total_space teraz zgłasza zupełnie inny rozmiar. Odtworzyłem to na drugim serwerze LVM.PHP disk_total_space nie będzie mierzyć rozmiaru partycji LVM

df -h pierwszego serwera (CentOS 6,4 PHP v5.3.27) pokazuje

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 

ale disk_total_space ('/ odchylenie/odwzorowujący/VG-vg_mysql') powraca 32g. W rzeczywistości zwraca 32G niezależnie od partycji wprowadzonej w poleceniu.

Na drugim serwerze (Ubuntu 10.04.4LTS, PHP v5.3.6), otrzymuję ten sam rodzaj zachowania:

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 

i disk_total_space ('/ dev/mapper/Batty root') zwraca 4G.

W obu przypadkach wydaje się zwracać ilość miejsca na dysku, które nie jest obsługiwane przez LVM. Czy istnieje sposób na uzyskanie całkowitego rozmiaru partycji LVM przy użyciu PHP?

+0

Więc w zasadzie to ins't problem z PHP, co oznacza, że ​​nie jest to programowanie pytanie, które oznacza, że ​​najlepiej pasuje do [Superużytkownika] (http://superuser.com)? – HamZa

+1

To wygląda dokładnie jak problem z PHP do mnie. disk_total_space powinno zwracać rozmiar partycji, ale w pewnych okolicznościach tak nie jest. Cieszę się, że mogę to poprawić, ale dla mnie wygląda to jak pytanie programistyczne. –

+0

Jakie jest zachowanie w linii poleceń? Jeśli jest taki sam, to nie ma nic wspólnego z PHP. – HamZa

Odpowiedz

3

miałem podobny problem w pewnym momencie ... I potrzebne, aby uzyskać całkowitą i wykorzystanej przestrzeni LVM woluminów logicznych ze skryptu PHP ...

pisałem trochę brzydki funkcję zwracającą multi- wymiarowa tablica z danymi systemu plików z df ...

Każda tablica zawiera:

  • System plików
  • Punkt montowania
  • Total Space
  • wykorzystanej przestrzeni

Tak jak powiedziałem, to jest brzydki, ale działa ...

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

To może być brzydkie, ale działa ładnie (o ile masz shell_exec). Dziękuję bardzo! –