如何在Debian系统中获取外部驱动器的ID与读写路径?
解决方案:获取外部驱动器的序列号与可读写挂载路径
以下是修改后的脚本,能够同时获取外部驱动器的唯一序列号(ID_SERIAL)及其对应的可读写挂载路径:
import os def get_external_drives_info(): drives_info = [] # 筛选/dev下的非系统外部存储主设备(sd开头、非sda、无数字后缀) for filename in os.listdir('/dev'): if filename.startswith('sd') and not filename.startswith('sda') and filename.isalpha(): device_path = f'/dev/{filename}' # 通过udevadm提取设备序列号 udev_output = os.popen(f"udevadm info --query=all --name={device_path}").read() serial = None for line in udev_output.split('\n'): if 'ID_SERIAL=' in line: serial = line.split('=')[1] break if not serial: continue # 从/proc/mounts中匹配可读写的挂载路径 valid_mounts = [] with open('/proc/mounts', 'r') as f: for mount_line in f.readlines(): parts = mount_line.strip().split() # 匹配当前设备的分区,且挂载选项包含可读写(rw) if parts[0].startswith(device_path) and 'rw' in parts[3].split(','): valid_mounts.append(parts[1]) # 整理结果:存在挂载点则记录,否则标记未挂载 if valid_mounts: for path in valid_mounts: drives_info.append((serial, path)) else: drives_info.append((serial, '未挂载(无有效可读写路径)')) return drives_info if __name__ == "__main__": external_drives = get_external_drives_info() if external_drives: print("外部驱动器信息:") for serial, path in external_drives: print(f"{serial} - {path}") else: print("未连接外部驱动器。")
关键修改说明
- 设备筛选优化:直接遍历
/dev目录替代递归遍历,精准定位外部存储的主设备节点(如sdb,而非分区sdb1)。 - 挂载路径校验:读取
/proc/mounts系统文件,匹配对应设备的分区,并通过rw挂载选项确保路径支持读写操作。 - 结果完整性:同时处理设备已挂载(输出有效路径)和未挂载(标记状态)的情况,覆盖更多场景。
注意事项
- 脚本依赖Linux系统默认自带的
udevadm工具,无需额外安装。 - 若你的系统盘不是
sda(如部分服务器环境),需修改not filename.startswith('sda')条件,替换为实际系统盘标识。 - 多分区的外部驱动器会列出所有符合要求的可读写挂载路径。
内容的提问来源于stack exchange,提问作者FaceHoof
相关产品推荐
相关产品推荐

