2016-11-30 23 views
0

因此,我正在處理一個腳本來刪除一些舊的備份,當可用磁盤空間下降一定比例。獲取更新的值Filesys :: DiskFree

# get disk info 
    $handle = Filesys::DiskFree->new(); 
    $handle->df(); 
    $available = $handle->avail("$dir"); 
    $used = $handle->used("$dir"); 
    $total = $handle->total("$dir"); 
    $used_p = ($used/$total) * 100.0; 
    print "$used_p\n"; 
    print "$used\n"; 

    # find files to delete 
    # --- special sauce code to find @files 

    # delete files 
    unlink @files; 

    # get new disk info 
    $handle = Filesys::DiskFree->new(); 
    $handle->df(); 
    $available = $handle->avail("$dir"); 
    $used = $handle->used("$dir"); 
    $used_p = ($used/$total) * 100.0; 
    print "$used_p\n"; 
    print "$used\n"; 

我的想法是,我用filesys在第二時間:: DiskFree我會得到它應反映刪除的文件,新的DF值。但是,沒有給我我期望的價值。並不完全一樣,但差距並不如我預期的那麼大。但是,第二次運行它時,我可以看到最初的打印反映了上一次運行中被刪除的文件。就好像有某種延遲。如上所示,我嘗試再次調用new()以查看是否會清除陳舊的數據。

+1

在應用程序終止之前,系統可能沒有釋放磁盤空間。就像生成大型日誌文件的長時間運行的應用程序一樣,刪除文件會將其刪除,但在重新加載應用程序之前,空間不會被釋放。試試'lsof | grep deleted' ...你可能會看到你的文件仍然列出,如果是這樣,並且在應用程序終止後它們不見了,這就是問題所在。 – stevieb

+0

這是我的問題。謝謝。 – Lex

+0

我已經回答了這個問題,以便未來的讀者可以看到這個問題。 – stevieb

回答

1

在應用程序終止之前,系統可能沒有釋放磁盤空間。就像生成大型日誌文件的長時間運行的應用程序一樣,刪除文件會將其刪除,但在重新加載應用程序之前,空間不會被釋放。嘗試一個lsof | grep deleted ...你可能會看到你的文件仍然列出,如果是這樣,它們在應用程序終止後就消失了,這就是問題所在。