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

如何用Python识别Linux系统分区?psutil及fstab方案探讨

识别Linux系统卷的Python实现方案

关于psutil库的能力

psutil本身没有直接标记“系统卷”的API,但它能通过psutil.disk_partitions()获取磁盘挂载的核心信息(设备路径、挂载点、文件系统类型等),你可以基于这些数据结合规则筛选系统卷。

读取fstab第6列的思路是否可行?

可行,但存在局限性:

  • fstab第6列是dump备份标记,常规配置下0表示无需备份,非0值(通常为1)表示需要定期备份。系统核心卷(如/、/boot)一般设为1,数据卷多设为0,这是通用惯例。
  • 但该规则不是绝对的:管理员可手动修改dump值,比如将某数据卷设为1,或把非关键系统卷设为0,仅靠这个字段判断会出现误差。

更简便可靠的Python实现方式

方案1:psutil+挂载点规则筛选

系统卷通常挂载到核心路径(/、/boot、/home(若为单独分区)等),同时排除/mnt、/data、/media这类典型数据卷挂载前缀,再过滤掉虚拟文件系统(如tmpfs、proc)。

代码示例:

import psutil

def get_linux_system_volumes():
    # 定义系统核心挂载点(可根据实际环境调整)
    critical_mounts = {'/', '/boot', '/home'}
    # 排除典型数据卷挂载前缀
    exclude_prefixes = ('/mnt', '/data', '/media')
    system_volumes = []

    # all=False 自动过滤虚拟文件系统(如proc、tmpfs)
    for partition in psutil.disk_partitions(all=False):
        mount_point = partition.mountpoint
        # 判断是否为系统核心挂载点,或非数据卷路径
        if (mount_point in critical_mounts) or \
           (not any(mount_point.startswith(prefix) for prefix in exclude_prefixes)):
            system_volumes.append({
                'device': partition.device,
                'mount_point': mount_point,
                'fs_type': partition.fstype
            })
    return system_volumes

if __name__ == '__main__':
    volumes = get_linux_system_volumes()
    for vol in volumes:
        print(f"系统卷:设备={vol['device']},挂载点={vol['mount_point']},文件系统={vol['fs_type']}")

方案2:psutil结合fstab解析(双重验证)

如果要兼顾fstab的配置规则,可以同时解析fstab的dump字段,再和psutil的挂载信息关联,提升判断准确性:

代码示例:

import psutil

def parse_fstab():
    fstab_data = []
    with open('/etc/fstab', 'r') as f:
        for line in f:
            line = line.strip()
            # 跳过注释和空行
            if not line or line.startswith('#'):
                continue
            # 按空格分割(兼容多空格/tab分隔)
            parts = line.split()
            if len(parts) >= 6:
                fstab_data.append({
                    'device': parts[0],
                    'mount_point': parts[1],
                    'dump_flag': parts[5]
                })
    return fstab_data

def get_system_volumes_with_fstab():
    fstab_entries = parse_fstab()
    system_volumes = []
    # 获取真实挂载的分区
    mounted_parts = psutil.disk_partitions(all=False)
    
    for part in mounted_parts:
        # 匹配fstab中的条目
        for entry in fstab_entries:
            if entry['mount_point'] == part.mountpoint:
                # 结合dump标记和挂载点规则判断
                if entry['dump_flag'] != '0' or part.mountpoint in {'/', '/boot'}:
                    system_volumes.append({
                        'device': part.device,
                        'mount_point': part.mountpoint,
                        'fs_type': part.fstype,
                        'dump_flag': entry['dump_flag']
                    })
                break
    return system_volumes

if __name__ == '__main__':
    volumes = get_system_volumes_with_fstab()
    for vol in volumes:
        print(f"系统卷:设备={vol['device']},挂载点={vol['mount_point']},dump标记={vol['dump_flag']}")

总结

  • psutil是获取磁盘挂载信息的高效工具,需结合规则筛选系统卷;
  • fstab第6列的思路可作为辅助,但不能单独依赖;
  • 最可靠的方式是挂载点规则+psutil过滤虚拟文件系统,必要时结合fstab配置做双重验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:03:29