怎么用脚本获取磁盘分区方式

wen 实用脚本 1

本文目录导读:

怎么用脚本获取磁盘分区方式

  1. Linux 系统
  2. Windows 系统 (PowerShell)
  3. 跨平台脚本 (Python)
  4. 完整版 Linux 脚本 (带错误处理)
  5. 使用说明

Linux 系统

使用 lsblk 命令

#!/bin/bash
# 获取所有磁盘的分区方式
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
# 查看特定磁盘(如 sda)是否为 GPT 或 MBR
lsblk -o NAME,PARTTYPE /dev/sda
# GPT 显示 GUID 分区类型,MBR 显示 0x类型

使用 fdisk 命令

#!/bin/bash
# 显示磁盘分区表信息
fdisk -l /dev/sda | grep "Disklabel type"
# 输出示例:Disklabel type: gpt 或 dos (MBR)

使用 parted 命令

#!/bin/bash
# 获取分区表类型
parted /dev/sda print | grep "Partition Table"
# 输出示例:Partition Table: gpt 或 msdos

Windows 系统 (PowerShell)

使用 PowerShell 脚本

# 获取所有磁盘的分区方式
Get-Disk | Select-Object Number, FriendlyName, PartitionStyle
# 输出示例:
# Number FriendlyName         PartitionStyle
# ------ ------------         --------------
# 0      ST1000DM003-1CH162   GPT
# 1      SanDisk SDSSDH3      MBR

使用 diskpart 脚本

:: 创建 diskpart 脚本
echo list disk > diskpart_script.txt
echo exit >> diskpart_script.txt
:: 执行并获取结果
diskpart /s diskpart_script.txt | findstr /i "gpt mbr"

跨平台脚本 (Python)

#!/usr/bin/env python3
import platform
import subprocess
def get_partition_style(disk='sda'):
    system = platform.system().lower()
    if system == 'linux':
        # 方法1:使用 lsblk
        try:
            result = subprocess.run(['lsblk', '-o', 'NAME,PARTTYPE', f'/dev/{disk}'],
                                    capture_output=True, text=True)
            if 'gpt' in result.stdout.lower():
                return 'GPT'
            elif 'dos' in result.stdout.lower() or 'mbr' in result.stdout.lower():
                return 'MBR'
        except:
            pass
        # 方法2:使用 parted
        try:
            result = subprocess.run(['parted', '/dev/' + disk, 'print'],
                                    capture_output=True, text=True)
            if 'partition table: gpt' in result.stdout.lower():
                return 'GPT'
            elif 'partition table: msdos' in result.stdout.lower():
                return 'MBR'
        except:
            pass
    elif system == 'windows':
        try:
            # 使用 PowerShell
            ps_command = f"Get-Disk -Number 0 | Select-Object PartitionStyle"
            result = subprocess.run(['powershell', '-Command', ps_command],
                                    capture_output=True, text=True)
            if 'gpt' in result.stdout.lower():
                return 'GPT'
            elif 'mbr' in result.stdout.lower():
                return 'MBR'
        except:
            pass
    return 'Unknown'
# 使用示例
print(f"磁盘分区方式: {get_partition_style('sda')}")

完整版 Linux 脚本 (带错误处理)

#!/bin/bash
get_disk_partition_type() {
    local disk=$1
    if [ ! -e "/dev/$disk" ]; then
        echo "磁盘 /dev/$disk 不存在"
        return 1
    fi
    # 尝试多种方法获取
    if command -v lsblk &> /dev/null; then
        local parttype=$(lsblk -o PARTTYPE "/dev/$disk" 2>/dev/null | tail -1)
        if [[ "$parttype" == "gpt" ]]; then
            echo "GPT"
            return 0
        fi
    fi
    if command -v parted &> /dev/null; then
        local output=$(parted "/dev/$disk" print 2>/dev/null)
        if echo "$output" | grep -qi "Partition Table: gpt"; then
            echo "GPT"
            return 0
        elif echo "$output" | grep -qi "Partition Table: msdos"; then
            echo "MBR"
            return 0
        fi
    fi
    if command -v fdisk &> /dev/null; then
        local disklabel=$(fdisk -l "/dev/$disk" 2>/dev/null | grep "Disklabel type")
        if echo "$disklabel" | grep -qi "gpt"; then
            echo "GPT"
            return 0
        elif echo "$disklabel" | grep -qi "dos"; then
            echo "MBR"
            return 0
        fi
    fi
    echo "无法确定分区方式"
    return 1
}
# 获取所有磁盘
for disk in $(ls /dev/sd[a-z] 2>/dev/null | cut -d/ -f3 | sort -u); do
    part_type=$(get_disk_partition_type "$disk")
    echo "$disk: $part_type"
done

使用说明

  1. Linux 脚本:保存为 .sh 文件,使用 chmod +x script.sh 赋予执行权限
  2. Windows PowerShell:直接复制到 PowerShell 窗口运行
  3. Python 脚本:需要有 Python 环境,使用 python3 script.py 运行

这些脚本会自动检测磁盘分区方式(GPT 或 MBR),并提供清晰的输出结果。

抱歉,评论功能暂时关闭!