查找包含给定文件的文件系统的大小和可用空间

新手上路,请多包涵

我在 Linux 上使用 Python 2.6。最快的方法是什么:

  • 确定哪个分区包含给定的目录或文件?

例如,假设 /dev/sda2 安装在 /home 上,并且 /dev/mapper/foo 安装在 /home/foo 上。从字符串 "/home/foo/bar/baz" 我想恢复这对 ("/dev/mapper/foo", "home/foo")

  • 然后,获取给定分区的使用统计信息?例如,给定 /dev/mapper/foo 我想获得分区的大小和可用空间(以字节为单位或大约以兆字节为单位)。

原文由 Federico A. Ramponi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 485
2 个回答

如果您只需要设备上的可用空间,请使用下面的 os.statvfs() 查看答案。

如果您还需要与文件关联的设备名称和挂载点,则应调用外部程序来获取此信息。 df 将提供你需要的所有信息——当被称为 df filename 它打印一行关于包含文件的分区。

举个例子:

 import subprocess
df = subprocess.Popen(["df", "filename"], stdout=subprocess.PIPE)
output = df.communicate()[0]
device, size, used, available, percent, mountpoint = \
    output.split("\n")[1].split()

请注意,这是相当脆弱的,因为它取决于 df 输出的确切格式,但我不知道更强大的解决方案。 (有一些解决方案依赖于下面的 /proc 文件系统,它们的可移植性甚至比这个更差。)

原文由 Sven Marnach 发布,翻译遵循 CC BY-SA 3.0 许可协议

这没有给出分区的名称,但您可以使用 statvfs Unix 系统调用直接获取文件系统统计信息。要从 Python 调用它,请使用 os.statvfs('/home/foo/bar/baz')

根据 POSIX ,结果中的相关字段:

>  unsigned long f_frsize   Fundamental file system block size.
> fsblkcnt_t    f_blocks   Total number of blocks on file system in units of f_frsize.
> fsblkcnt_t    f_bfree    Total number of free blocks.
> fsblkcnt_t    f_bavail   Number of free blocks available to
>                          non-privileged process.
>
> ```

所以为了理解这些值,乘以 `f_frsize` :

import os statvfs = os.statvfs(‘/home/foo/bar/baz’)

statvfs.f_frsize * statvfs.f_blocks # Size of filesystem in bytes statvfs.f_frsize * statvfs.f_bfree # Actual number of free bytes statvfs.f_frsize * statvfs.f_bavail # Number of free bytes that ordinary users # are allowed to use (excl. reserved space)

”`

原文由 Mechanical snail 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题