繁体   English   中英

如何从Linux上的文件路径获取详细的设备/分区信息(如UUID,硬盘序列等)

[英]How to obtain detailed device / partition info from file path on Linux (like UUID, hard drive serial etc.)

从绝对文件路径开始,我想获取以下信息:

  1. 存储文件的文件系统的挂载点(为了计算相对于挂载点的路径)
  2. UUID和文件系统的标签
  3. 类型(或供应商名称)以及包含该分区的硬盘驱动器的序列号

我知道在许多情况下2和3可能是未定义的(例如对于环回,ramfs,encyrpted设备),这是完全正常的。 我也知道如何使用shell和系统工具(如df/sys/proc文件系统)获取该信息。 请参阅此问题以供参考。

但是,我正在寻找使用Python 3.5以编程方式执行此操作的最少cumbersone方法。 这意味着:

  • 更喜欢系统调用而不是解析/proc/sys (可能会有变化或依赖于内核配置?)
  • 避免调用子进程并解析它们的输出(繁琐的定义)

到目前为止,我使用os.stat()的道路上摆脱块设备的主要和次要号码stat_result.st_dev 但是,正确的方法是什么?

有例如

  • /proc/mounts
  • /proc/partitions
  • /sys/dev/block/<major>:<minor>

注意:关于已安装的块设备,分区, /proc/mounts/proc/partitions似乎是规范信息源(可以)。 对于UUID,标签,连续出版物等。我目前使用udevadm并解析输出:

def get_udev_properties(dev_name):        
    cmd = ["udevadm", "info", "--query=property", "--name", dev_name]
    result = subprocess.run(cmd, stdout=subprocess.PIPE)
    return parse_properties(result.stdout)

进一步说明:从我的实际问题中抽象出来,可以提出更一般的问题:

  • 关于linux系统调用和内核文件系统的块设备的规范标识或表示是什么?
  • 通过主要和次要数字获得该表示的正确方法是什么?
  • 获取有关块设备的详细信息的正确方法是什么?

这是我今天早些时候遇到的GitHub脚本,它使用Python来获取有关驱动器品牌和型号(以及许多其他产品)的信息。

/proc/partitions保存/proc/partitions信息; 有关更多详细信息,您可以像现在一样运行子进程,或者例如对于GPT 自己进行解析

最好的方法是通过pyparted Pyparted是由Parted开发人员之一维护的Parted的python绑定。 你可以在github上找到源代码。 不幸的是UUID是找不到的,所以你必须解析blkid

这意味着一些实用程序和anlyze输出。 使用os.popen启动,您可以使用bklkid查找uuids,读取/etc/mtab文件允许知道系统中安装了哪些文件系统,从而知道挂载点。 sfdisk -l输出为您提供磁盘解剖。 hdparm -I /dev/xxx会给你序列号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM