有没有办法在 MacOS 上为 st_dev 获得有意义的挂载点?

问题描述

注意这是一个 MacOS 问题而不是一个 Linux 问题 - 它们是不同的操作系统

我想从 python 的 os.stat("foo").st_dev 中获得一个有意义的挂载点。目前这只是一个数字,我找不到任何可以交叉引用的地方。

到目前为止,我的所有搜索都通过询问 /proc/... 得到了适用于 Linux 的答案,但 /proc 在 MacOS 中不存在,因此任何此类答案都不起作用。

解决方法

我是 Linux 人,但如果不允许我使用 /proc,我会在 /dev 目录中搜索包含以下 stat 数据的条目(即文件名) :

  • st_mode 表示是块设备(helper:stat.S_ISBLK
  • st_rdev 匹配给定的 st_dev
,

您可以遍历本地磁盘,并将磁盘的 st_rdev 与您之前获得的 st_dev 进行比较。

for mnt in glob.glob("/dev/disk?s*"):
    t = os.stat(mnt)
    if t.st_rdev == s.st_dev:
      print(mnt)

Get device filesystem path from dev_t on macOS 基本上确认了此信息,但当然,严格来说并非重复。

就其价值而言,diskutil list -plist 打印所有磁盘标识符的机器可读 XML 属性列表,diskutil info -plist disk1s1(例如)打印特定磁盘的信息;但这不包括您从 dev_t

获得的 os.stat().st_rdev 信息

令人讨厌的是,diskutil 在我的系统上没有手册页,但是 here is a (possibly old) on-line version.

getdevinfo package on PyPI 似乎为大多数此类信息提供了 Python 绑定,尽管 https://www.hamishmb.com/html/Docs/developer/getdevinfo/macos.html 看起来相当空闲。