如何根据设备名称使用Python获取卷标

3 投票
2 回答
8138 浏览
提问于 2025-04-16 10:54

我正在做一个类似于Linux中已挂载设备列表的东西。

在程序启动时,我会解析一下/etc/mtab文件,看看有哪些已经挂载的设备。为了能收到系统中新添加的挂载设备的通知,我使用了DBus。在收到的消息中,有一个叫做volume.label的属性。我想知道有没有办法根据设备名称,比如/dev/sda1或/dev/sdd,来获取这个卷的标签。

编辑: 经过一段时间的研究,我找到了解决这个问题的方法。Python的gio模块里有一个叫做VolumeMonitor的类。通过调用get_mounts()方法,获取带有好名字和正确图标的挂载列表变得非常简单:

for mount in volume_monitor.get_mounts():
    print mount.get_name(), mount.get_icon()

你还可以获取驱动器和卷的列表。你也可以连接一些信号,以便适时更新列表。不过有一点需要注意。卷是列表中第一个出现的,并且会首先触发自己的事件,而挂载则会稍后出现。所以如果你想保持一个活动挂载的列表,应该监听mount-addedmount-removed信号,而不是volume-addedvolume-removed信号。

2 个回答

1

e2label 这个命令可以用来查看卷标,使用方法如下:

e2label /dev/sda1

注意:这个命令只适用于 ext2、ext3 或 ext4 文件系统。

在 Python 中,你可以通过 os.systemPopen 来调用这个命令。

2

你可以不用 e2label 这个命令,改用 blkid 命令,然后分析它的输出结果:

$ blkid -o value -s LABEL /dev/sda1
/boot

撰写回答