+-

我想使用udev枚举计算机上的所有硬盘,特别是pyudev来枚举所有内容:
import pyudev
context = pyudev.Context()
for device in context.list_devices(subsystem='block', DEVTYPE='disk'):
print "{}, ({})".format(device.device_node, device.device_type)
这打印出以下内容:
/dev/sdb (disk)
/dev/sdc (disk)
/dev/sda (disk)
/dev/sr0 (disk)
/dev/loop0 (disk)
/dev/loop1 (disk)
/dev/loop2 (disk)
/dev/loop3 (disk)
/dev/loop4 (disk)
/dev/loop5 (disk)
/dev/loop6 (disk)
/dev/loop7 (disk)
/dev/ram0 (disk)
/dev/ram1 (disk)
/dev/ram10 (disk)
/dev/ram11 (disk)
/dev/ram12 (disk)
/dev/ram13 (disk)
/dev/ram14 (disk)
/dev/ram15 (disk)
/dev/ram2 (disk)
/dev/ram3 (disk)
/dev/ram4 (disk)
/dev/ram5 (disk)
/dev/ram6 (disk)
/dev/ram7 (disk)
/dev/ram8 (disk)
/dev/ram9 (disk)
由于我主要关注的是实际驱动器而不是光盘驱动器,环回设备或ram设备,如何将结果过滤到仅获得真实的物理介质?
最佳答案
由于udev仅在Linux内核上运行(至少截至目前),因此您可以过滤掉
MAJOR number 8,它代表所有基于SCSI / SATA磁盘驱动程序的设备.
for device in context.list_devices(MAJOR='8'):
if (device.device_type == 'disk'):
print "{}, ({})".format(device.device_node, device.device_type)
在我的系统上,您的代码输出以下内容:
/dev/sda, (disk)
/dev/sdf, (disk)
/dev/sdb, (disk)
/dev/sdc, (disk)
/dev/sdd, (disk)
/dev/sde, (disk)
/dev/sr0, (disk)
/dev/loop0, (disk)
/dev/loop1, (disk)
/dev/loop2, (disk)
/dev/loop3, (disk)
/dev/loop4, (disk)
/dev/loop5, (disk)
/dev/loop6, (disk)
/dev/loop7, (disk)
按主要编号8过滤后,我看到以下输出:
/dev/sda, (disk)
/dev/sdf, (disk)
/dev/sdb, (disk)
/dev/sdc, (disk)
/dev/sdd, (disk)
/dev/sde, (disk)
请注意,您还可以在列表中获得USB硬盘和USB记忆棒,因为它们也倾向于使用相同的SCSI磁盘驱动程序.
我不确定IDE硬盘是否映射为sdX或hdX与最新的2.6或3.x内核.没有IDE硬盘驱动器可以验证,并且我有一个. :d
更新:相同的设备编号页面列出/ dev / hdX是IDE硬盘驱动器使用的那个(也可能是IDE cdroms?).如果你想过滤这些,我相信你可以这样做:
for device in context.list_devices(DEVTYPE='disk'):
major = device['MAJOR']
if major == '8' or major == '3':
print "{}, ({})".format(device.device_node, device.device_type)
点击查看更多相关文章
转载注明原文:python – 使用pyudev查找磁盘驱动器 - 乐贴网