You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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("未连接外部驱动器。")

关键修改说明

  1. 设备筛选优化:直接遍历/dev目录替代递归遍历,精准定位外部存储的主设备节点(如sdb,而非分区sdb1)。
  2. 挂载路径校验:读取/proc/mounts系统文件,匹配对应设备的分区,并通过rw挂载选项确保路径支持读写操作。
  3. 结果完整性:同时处理设备已挂载(输出有效路径)和未挂载(标记状态)的情况,覆盖更多场景。

注意事项

  • 脚本依赖Linux系统默认自带的udevadm工具,无需额外安装。
  • 若你的系统盘不是sda(如部分服务器环境),需修改not filename.startswith('sda')条件,替换为实际系统盘标识。
  • 多分区的外部驱动器会列出所有符合要求的可读写挂载路径。

内容的提问来源于stack exchange,提问作者FaceHoof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:24:50