查找包含给定文件的文件系统的大小和可用空间
我在 Linux 上使用 Python 2.6。最快的方法是什么:
确定哪个分区包含给定的目录或文件?
例如,假设
/dev/sda2
挂载在/home
上,/dev/mapper/foo
挂载在<代码>/home/foo。从字符串"/home/foo/bar/baz"
我想恢复对("/dev/mapper/foo", "home/foo")
.然后,获取给定分区的使用统计信息?例如,给定
/dev/mapper/foo
我想获取分区的大小和可用空间(以字节为单位或大约以兆字节为单位)。
I'm using Python 2.6 on Linux. What is the fastest way:
to determine which partition contains a given directory or file?
For example, suppose that
/dev/sda2
is mounted on/home
, and/dev/mapper/foo
is mounted on/home/foo
. From the string"/home/foo/bar/baz"
I would like to recover the pair("/dev/mapper/foo", "home/foo")
.and then, to get usage statistics of the given partition? For example, given
/dev/mapper/foo
I would like to obtain the size of the partition and the free space available (either in bytes or approximately in megabytes).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
这不会给出分区的名称,但您可以使用 statvfs Unix 系统调用直接获取文件系统统计信息。要从 Python 调用它,请使用
os.statvfs ('/home/foo/bar/baz')
。结果中的相关字段,根据 POSIX:
因此,要理解这些值,请乘以
f_frsize
:This doesn't give the name of the partition, but you can get the filesystem statistics directly using the
statvfs
Unix system call. To call it from Python, useos.statvfs('/home/foo/bar/baz')
.The relevant fields in the result, according to POSIX:
So to make sense of the values, multiply by
f_frsize
:从 Python 3.3 开始,有一种简单直接的方法可以使用标准库来执行此操作:
这些数字以字节为单位。有关详细信息,请参阅文档。
As of Python 3.3, there an easy and direct way to do this with the standard library:
These numbers are in bytes. See the documentation for more info.
如果您只需要设备上的可用空间,请使用下面的
os.statvfs()
查看答案。如果您还需要与文件关联的设备名称和挂载点,您应该调用外部程序来获取此信息。
df
将提供您需要的所有信息 - 当以df filename
调用时,它会打印一行有关包含该文件的分区的信息。举个例子:
请注意,这相当脆弱,因为它取决于 df 输出的确切格式,但我不知道有更强大的解决方案。 (有一些依赖于下面的
/proc
文件系统的解决方案,它们的可移植性甚至比这个还要差。)If you just need the free space on a device, see the answer using
os.statvfs()
below.If you also need the device name and mount point associated with the file, you should call an external program to get this information.
df
will provide all the information you need -- when called asdf filename
it prints a line about the partition that contains the file.To give an example:
Note that this is rather brittle, since it depends on the exact format of the
df
output, but I'm not aware of a more robust solution. (There are a few solutions relying on the/proc
filesystem below that are even less portable than this one.)我的计算机上的一些示例路径名:
PS
如果在 Python ≥3.3 上,则
shutil.disk_usage(path)
返回一个(total,used, free)
的命名元组,表示为字节。Some sample pathnames on my computer:
PS
if on Python ≥3.3, there's
shutil.disk_usage(path)
which returns a named tuple of(total, used, free)
expressed in bytes.这应该满足您所要求的一切:
在我的盒子上,上面的代码打印:
This should make everything you asked:
On my box the code above prints:
最简单的方法来找出它。
The simplest way to find out it.
对于问题的第二部分,“获取给定分区的使用统计信息”, psutil 使使用 disk_usage(path) 函数即可轻松完成此操作。给定一个路径,
disk_usage()
返回一个命名元组,其中包括以字节表示的总空间、已用空间和可用空间,以及使用百分比。文档中的简单示例:
Psutil 适用于从 2.6 到 3.6 的 Python 版本以及 Linux、Windows 和 OSX 等平台。
For the second part of your question, "get usage statistics of the given partition", psutil makes this easy with the disk_usage(path) function. Given a path,
disk_usage()
returns a named tuple including total, used, and free space expressed in bytes, plus the percentage usage.Simple example from documentation:
Psutil works with Python versions from 2.6 to 3.6 and on Linux, Windows, and OSX among other platforms.
对于第一点,您可以尝试使用
os.path .realpath
要获取规范路径,请对照/etc/mtab
检查它(我实际上建议调用getmntent
,但我可以' t 找到正常的方式来访问它)来找到最长的匹配。 (当然,您应该stat
文件和假定的安装点来验证它们实际上位于同一设备上)对于第二点,请使用
os.statvfs
获取块大小和使用信息。(免责声明:我没有测试过这些,我所知道的大部分内容都来自 coreutils 来源)
For the first point, you can try using
os.path.realpath
to get a canonical path, check it against/etc/mtab
(I'd actually suggest callinggetmntent
, but I can't find a normal way to access it) to find the longest match. (to be sure, you should probablystat
both the file and the presumed mountpoint to verify that they are in fact on the same device)For the second point, use
os.statvfs
to get block size and usage information.(Disclaimer: I have tested none of this, most of what I know came from the coreutils sources)
11 年后,但扩展了其他答案。
这是将其添加到字典中,仅获取百分比,因为这正是我所需要的,但您可以获取所有值或从总数、已用值、免费值或百分比中选择您想要的值。
官方文档帮助很大
11 years later but expanding on others answers.
This is adding it to a dictionary, only grabbing percent as that is what I need, but you can grab all values or select the one you want from the total, used, free, or percent.
Official documentation helped a lot
检查 Windows PC 上的磁盘使用情况可以按如下方式完成:
Checking the disk usage on your Windows PC can be done as follows:
在Linux中通常
/proc
目录包含这些信息,它是一个虚拟文件系统。例如,/proc/mounts
给出了当前挂载磁盘的信息;然后就可以直接解析了。top
、df
等实用程序都使用/proc
。我没有使用过它,但是如果您想要包装器,这也可能有帮助: http:// bitbucket.org/chrismiles/psi/wiki/Home
Usually the
/proc
directory contains such information in Linux, it is a virtual filesystem. For example,/proc/mounts
gives information about current mounted disks; and you can parse it directly. Utilities liketop
,df
all make use of/proc
.I haven't used it, but this might help too, if you want a wrapper: http://bitbucket.org/chrismiles/psi/wiki/Home