本文目录导读:

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
使用说明
- Linux 脚本:保存为
.sh文件,使用chmod +x script.sh赋予执行权限 - Windows PowerShell:直接复制到 PowerShell 窗口运行
- Python 脚本:需要有 Python 环境,使用
python3 script.py运行
这些脚本会自动检测磁盘分区方式(GPT 或 MBR),并提供清晰的输出结果。