>>> import os
>>> print hex(os.stat('/')[2])
0x802
\ \minor device number
\major device number
[me@server /]$ ls -l /dev/sda2
brw-rw---- 1 root disk 8, 2 Jun 24 2004 /dev/sda2
[me@server jgaines2]$ \ \minor device number
\major device number
import os
def get_filesystem_partition(fs):
res = None
dev = os.lstat(fs).st_dev
for line in file('/proc/mounts'):
# lines are device, mountpoint, filesystem, <rest>
# later entries override earlier ones
line = [s.decode('string_escape') for s in line.split()[:3]]
if dev == os.lstat(line[1]).st_dev:
res = tuple(line)
return res
8条答案
按热度按时间avwztpqn1#
你的问题是关于Linux的,所以这是(或多或少)特定于Linux的。
以下是将主/次Map到设备名称的三个变体的代码示例。
我认为/proc/partitions是最简单的-它只是一个要打开和检查的文件。hal提供了大部分信息,并抽象了许多细节。sysfs可能被认为比/proc/partitions更正确,并且不需要hal来运行。
对于桌面程序,我会选择hal。在嵌入式系统上,我会选择sysfs。
字符串
wlp8pajw2#
看起来这篇文章有一些你的答案(仍然不确定如何从
/dev/sda2
条目中获取major/minor,以将其与os.stat()
为/
返回的内容相匹配:Device number in stat command output
字符串
mcdcgff03#
我最近也需要这个解决方案。在看到通过纯python获得我想要的结果的所有复杂方法后,我决定转向shell寻求帮助。
字符串
这正好给了我想要的东西,即文件系统挂载位置的设备字符串。
简短,甜美,并在Python中运行。:)
wz8daaqr4#
上述解决方案中的相当多的解决方案存在问题。其实这个问题也有问题。
最后一个答案(搜索/proc/mounts)不起作用:搜索“/”将匹配/proc/mounts中的每一行。即使像这样纠正也不会起作用:
字符串
当“/filesystem”是“/”时,通常会得到两个条目,一个是“rootfs”,另一个是实际设备。当挂载的文件系统名称中有空格时(空格在/proc/mounts中显示为\040),它也不起作用。
使用btrfs子卷会使问题变得更糟。每个子卷都是单独装载的,但它们都共享同一个设备。如果您尝试使用btrfs快照进行备份(就像我一样),那么您需要子卷名称和文件系统类型的指示。
这个函数返回一个元组(device,mountpoint,filesystem),看起来可以工作:
型
这似乎适用于我能想到的所有情况,尽管我预计仍有病理情况下,它福尔斯到位。
6kkfgxo05#
这不是最简单的,但这会让你开始:
字符串
在OS X上:
型
在Ubuntu上:
型
要获取设备名,请从分区名中删除次要编号。在OS X上,也可以砍's' +小调。
mrzz3bfm6#
使用(Linux)blkid命令(/sbin/blkid)如何
字符串
型
下面是带有(未安装的)USB驱动器(sdb 1)的双引导笔记本电脑的输出
型
jdg4fx2g7#
以下是如何简单地获取设备的主要和次要编号:
字符串
czq61nw18#
我的密码
字符串
在bash shell中运行
型