0

因此,我正在编写一个脚本,以在可用磁盘空间低于一定百分比时删除一些旧备份。

    # 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() 以查看是否会清除陈旧数据。

4

1 回答 1

1

在应用程序终止之前,系统可能不会释放磁盘空间。很像一个长时间运行的应用程序会生成大的日志文件,删除文件会删除它,但在重新加载应用程序之前不会释放空间。尝试lsof | grep deleted...您可能会看到您的文件仍然列出,如果是这样并且在应用程序终止后它们消失了,这就是问题所在。

于 2016-12-01T21:01:22.237 回答