除了 Diskpart,还可以使用 PowerShell 脚本 Get-Disk 和 Get-Partition 命令来获取磁盘和分区信息。 使用 New-Partition 和 Remove-Partition 来创建和删除分区。 使用 Format-Volume 格式化分区。

Get-PhysicalDisk (Storage) | Microsoft Learn

Get-Disk (Storage) | Microsoft Learn

Get-DiskImage (Storage) | Microsoft Learn

PowerShell 与 CMD 执行速度全维度差异拆解

整体结论前置:
 
极简单行命令、调用原生 exe 工具场景:CMD 更快;对象处理、循环批量、系统原生管理、磁盘 / 硬件 / WMI 运维、复杂逻辑脚本:PowerShell 反超,差距随逻辑复杂度指数拉大;纯字符串批处理 CMD 小幅占优。
 
下面分场景、底层原理、量化差异、边界特例逐一拆解。

一、底层架构决定速度根源

1.CMD 底层架构

CMD.exe 是轻量 32/64 位控制台宿主,基于老旧 Windows 控制台子系统,启动开销极小,解析逻辑只有字符串切割、变量替换、管道转发,无虚拟机、无类型转换、无对象封装。
 
执行模式:
  1. 内部命令(cd、dir、set、echo)直接在 CMD 进程内执行,无进程创建;
  2. 外部命令(format、diskpart、xcopy、robocopy)直接 CreateProcess 拉起 exe,管道是原生内核匿名管道,转发字符串字节流。

2.PowerShell 底层架构

PowerShell 5.1 依托.NET Framework CLR虚拟机;PowerShell 7 依托.NET Core,启动需要加载 CLR 运行时、程序集、模块、类型系统、管线引擎。
 
执行模式:
  1. 原生 Cmdlet(Get-ChildItem、New-Partition):.NET 托管代码执行,产出结构化对象而非文本;
  2. 兼容调用 exe:和 CMD 一样 CreateProcess,但管道默认传递对象,转为文本有额外序列化开销;
  3. 启动阶段存在固定加载耗时。

二、分场景速度量化对比

场景 1:进程冷启动速度(新开终端直接运行一条命令)

测试命令:直接输出文本 echo test
  1. CMD 启动执行:10~30ms
  2. PowerShell 5.1 首次启动:300~600ms
  3. PowerShell 7 首次启动:150~250ms
     
    差异原因:PowerShell 需要加载.NET 运行时、核心模块、配置文件;CMD 几乎零初始化。
     
    ✅结论:一次性临时敲短命令,CMD 启动碾压 PowerShell。
补充:PowerShell 复用窗口(已经打开 PS 窗口)执行单行命令,启动开销消失,二者差距大幅缩小。

场景 2:纯内部简单命令(cd、echo、set、dir 单目录列举)

  • CMD 内部命令:纯 C 实现,无额外封装,速度更快
     
    例:dir C:\Windows /b 纯文本列出文件
     
    CMD 速度 ≈ PowerShell(Get-ChildItem)1.3~2 倍
     
    原因:Get-ChildItem 会给每一个文件生成 FileInfo 对象,填充创建时间、大小、权限、属性等几十项字段,大量内存与 CPU 开销;CMD 只读取文件名字符串直接输出。

场景 3:调用外部 EXE 程序(diskpart、format、xcopy、ffmpeg 等)

二者性能几乎持平,差距<5%
 
原理:二者都是创建独立子进程运行 exe,Shell 只负责传入参数、接收 stdout/stderr 字符串。
 
唯一区别:
  • CMD 直接拼接字符串参数传给 exe;
  • PowerShell 对特殊字符(空格、括号、&)自动转义,少量字符处理开销,几乎感知不到。
     
    ✅结论:只要是调用 exe 工具干活,二者速度基本无区别,比如 diskpart 分区、format 格式化,速度一致。

场景 4:管道连续处理(核心分水岭)

4.1 纯文本管道(CMD 典型用法)

CMD:dir /b | findstr ".txt" | sort
 
全程字节流文本转发,管道开销极低。

4.2 PowerShell 对象管道

Get-ChildItem | Where-Object {$_.Extension -eq ".txt"} | Sort-Object FullName
 
小文件少量数据:PS 慢于 CMD
 
十万级文件海量筛选、多条件过滤、字段截取:PS 大幅更快
 
原因:
 
CMD 管道反复序列化 / 反序列化字符串,字符串模糊匹配 CPU 开销极高;
 
PowerShell 直接操作内存对象属性,不需要反复解析文本字符串,复杂过滤、排序、字段提取效率提升数倍。
量化参考:遍历 10 万文件筛选后缀
 
CMD 批处理:8~12 秒
 
PowerShell 对象筛选:2~3 秒

场景 5:循环结构(for/foreach 批量处理,运维最常用)

  1. CMD for /for/L 循环:性能极差
     
    CMD 是解释型字符串循环,每次循环都做变量解析、字符串拼接、环境变量刷新,循环次数越高性能崩盘。
     
    示例:循环 10000 次打印数字
     
    CMD:4~7 秒
  2. PowerShell foreach/ForEach-Object:托管代码循环,内存变量稳定
     
    常规循环:0.3~0.8 秒,差距 10 倍以上
  3. PowerShell 7 -Parallel并行循环:直接多线程并发,批量磁盘、文件处理场景,相比 CMD 串行循环提速 3~10 倍。
典型落地:批量格式化多块硬盘、批量重命名文件、批量 ping 巡检
 
CMD 串行执行:耗时线性叠加
 
PowerShell 并行:近乎单任务耗时,速度断崖领先。

场景 6:系统原生管理(磁盘、进程、服务、注册表、WMI)

代表命令:获取磁盘信息、结束进程、修改服务、分区操作
 
CMD 实现方式:调用 tasklist.exe、sc.exe、wmic.exe,拿到文本后手动截取字符串做判断;
 
PowerShell:Get-Disk、Get-Process、Get-Service直接原生对象。
 
速度差距:
 
单次查询差距不大;连续多次查询 + 逻辑判断,PowerShell 快 2~5 倍
 
举例:判断磁盘是否离线并上线
 
CMD:diskpart 输出文本→findstr 截取磁盘号→二次调用 diskpart,两次进程调用 + 文本解析
 
PowerShell:Get-Disk | Where-Object {$_.OperationalStatus -ne 'Online'} | Set-Disk -IsOnline $true,单次对象过滤直接执行。

场景 7:文件读写、大文本处理

  1. 小文本写入:CMD echo a>>1.txt 略快
  2. 大文件读写、编码控制、CSV 日志导出:PowerShell 优势巨大
     
    Out-File、Export-Csv原生缓冲写入,CMD 逐行 echo 追加会频繁打开关闭文件句柄,大日志写入速度差距 5 倍以上。

场景 8:完整格式化 / 磁盘擦除(承接上一轮磁盘场景)

  • 快速格式化(Quick):二者底层调用同一 API,速度一致
  • 全盘清零格式化、坏道扫描:PowerShell 略快 5%~10%
     
    原因:CMD format.exe 控制台进度条频繁刷新文本 IO;PowerShell 托管 API 状态更新轻量化,IO 调度更平稳。
  • SSD 安全擦除、多盘并行初始化:PowerShell 独有并行能力,CMD 无法实现,速度差距数倍。

三、特殊边界速度情况

  1. WinPE 老旧微型维护系统
     
    WinPE 精简版经常裁剪.NET 框架,PowerShell 无法部署,只能用 CMD/diskpart,不存在速度对比。
  2. PowerShell 首次执行策略阻塞
     
    初次运行脚本会有执行策略弹窗 / 校验,产生一次性延迟,解除策略后无影响。
  3. PowerShell 5.1 vs PowerShell 7
     
    PS7 做了启动优化、管道优化、并行优化,整体比 PS5.1 快 30%~80%,是高性能脚本首选。

四、速度差异汇总表

使用场景 速度优胜方 差距幅度 核心原因
新开窗口执行单行简单命令 CMD CMD 快 2~10 倍 PS.NET启动加载开销
内置简单命令(dir/echo/cd) CMD CMD 快 30%~100% 无对象序列化开销
调用外部 exe 工具(diskpart/format) 持平 <5% 均为拉起独立 exe 进程
简单文本管道过滤 CMD CMD 快 20%~50% 纯字节流管道
海量文件多条件筛选管道 PowerShell PS 快 2~4 倍 内存对象直接运算
循环迭代(1000 次以上) PowerShell PS 快 5~10 倍 避免字符串反复解析
多任务并行批量处理 PowerShell PS 快 3~10 倍 原生多线程并行
系统运维(磁盘 / 服务 / 进程批量管理) PowerShell PS 快 2~5 倍 直接使用结构化对象,省去文本解析
大文件日志导出、结构化输出 PowerShell PS 快 3~6 倍 文件缓冲、结构化导出
全盘磁盘清零、多盘初始化 PowerShell PS 小幅领先 / 并行碾压 轻量化状态刷新 + 并行调度

五、选型建议(基于执行速度)

  1. 临时应急、一行简单命令、老旧 PE 维护:用 CMD;
  2. 循环脚本、批量运维、磁盘自动化、日志导出、复杂筛选、长期自动化任务:用 PowerShell(优先 PowerShell7);
  3. 单纯调用已有 exe 工具做一次性操作:两者随意,速度无差别。

diskpart 全命令 → PowerShell 原生 Storage Cmdlet 完整配套映射链

整体前置逻辑:
 
diskpart.exe 本质是独立控制台 COM 客户端,全程依赖vds.exe(VDS虚拟磁盘服务)完成所有磁盘操作;
 
PowerShell Storage 模块(Microsoft.PowerShell.Storage.Commands.dll)分为两套调用链路:
  1. 首选链路:WMI Storage 命名空间(ROOT\Microsoft\Windows\Storage)MSFT 磁盘类,不依赖 VDS 也可操作;
  2. 兼容链路:内部复用 VDS COM 接口,和 diskpart 底层同源;
     
    二者底层硬件指令完全一致,仅上层会话、参数交互、返回形态不同。

一、diskpart 全局前置操作对应 PS 配套(会话初始化、磁盘选择、环境前置)

1. diskpart 进入交互环境

cmd
 
 
 
diskpart
 
PowerShell 无需交互式 Shell,直接在终端执行存储命令,模块自动加载:
powershell
 
 
 
# 强制加载存储模块(异常场景手动加载)
Import-Module Storage
 

2. diskpart 基础磁盘选择核心映射

表格
 
 
 
diskpart 交互命令 PowerShell 等价命令 配套说明  
list disk Get-Disk 列出全部物理磁盘,DiskNumber、状态、GPT/MBR、只读、Offline  
sel disk X Get-Disk -Number X 选定磁盘(PS 以对象管道传递,无 “选中全局变量”)  
list partition Get-Partition -DiskNumber X 列出指定磁盘所有分区  
sel partition X Get-Partition -DiskNumber X -PartitionNumber X 选中分区对象  
list volume Get-Volume 列出所有逻辑卷(含盘符、文件系统、大小、状态、RAW 识别)  
sel volume X Get-Volume -DriveLetter Z / Get-Volume -Index X 选中逻辑卷  
attributes disk `Get-Disk -Number X Select-Object Number,IsReadOnly,IsOffline` 查看磁盘属性:只读、脱机
attributes disk clear readonly Set-Disk -Number X -IsReadOnly $false 清除磁盘只读标记  
attributes disk set readonly Set-Disk -Number X -IsReadOnly $true 设置磁盘只读  
online disk Set-Disk -Number X -IsOnline $true 脱机磁盘上线  
offline disk Set-Disk -Number X -IsOnline $false 磁盘脱机(虚拟机快照、异地磁盘挂载常用)  

二、磁盘初始化、清空、分区表转换(diskpart 核心初始化链路)

1. clean 清空整盘分区表(全盘擦除分区结构)

diskpart:
plaintext
 
 
 
sel disk X
clean
# 彻底清空扇区 clean all
clean all
 
PowerShell 配套:
powershell
 
 
 
# 快速清空(仅擦分区表头)
Get-Disk X | Clear-Disk -RemoveData -Confirm:$false
# clean all 全盘扇区清零(等同于diskpart clean all)
Get-Disk X | Clear-Disk -RemoveData -RemoveAllData -Confirm:$false
 
配套依赖:Clear-Disk直接调用 VDS 磁盘清零接口,和 diskpart 共用内核IOCTL_DISK_DELETE_DRIVE_LAYOUT控制码。

2. convert gpt /convert mbr 分区表格式转换

diskpart:
plaintext
 
 
 
sel disk X
convert gpt
convert mbr
 
PowerShell:
powershell
 
 
 
# 转为GPT
Initialize-Disk -Number X -PartitionStyle GPT
# 转为MBR
Initialize-Disk -Number X -PartitionStyle MBR
 
配套前置:磁盘必须clean清空后才能转换,和 diskpart 约束完全一致。

三、GPT 标准分区创建(EFI 分区、MSR 保留分区、主数据分区)

diskpart 标准装机分区脚本

plaintext
 
 
 
sel disk X
create partition efi size=100
create partition msr size=16
create partition primary
 
PowerShell 完整等价链式脚本(精准匹配分区类型 GUID、大小、4K 自动对齐)
powershell
 
 
 
$disk = Get-Disk X
# EFI系统分区 GPT固定GUID
New-Partition -Disk $disk -Size 100MB -GptType "{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}"
# MSR微软保留分区
New-Partition -Disk $disk -Size 16MB -GptType "{e3c9e316-0b5c-4db8-817d-f92df00215ae}"
# 剩余全部空间创建主分区
$DataPartition = New-Partition -Disk $disk -UseMaximumSize
 
关键配套优势:New-Partition原生自动 4K 扇区对齐,diskpart 无自动对齐逻辑,容易 SSD 性能异常。

MBR 分区创建(老旧 BIOS 磁盘)

diskpart
plaintext
 
 
 
create partition primary size=50000
create partition extended
create partition logical
 
PowerShell
powershell
 
 
 
# MBR主分区
New-Partition -DiskNumber X -Size 50000MB -MbrType 0x07
# MBR扩展分区、逻辑分区(Storage模块原生支持)
New-Partition -DiskNumber X -Size 100GB -MbrType 0x0F
 

分区删除

diskpart
plaintext
 
 
 
sel partition 1
delete partition override
 
PowerShell
powershell
 
 
 
Get-Partition -DiskNumber X -PartitionNumber 1 | Remove-Partition -Confirm:$false
 

四、分区格式化、文件系统创建(对应 diskpart format + Windows format.exe)

diskpart 内置格式化:
plaintext
 
 
 
sel partition X
format fs=ntfs quick
format fs=exfat
assign letter=Z
 
PowerShell 配套链路(分区→格式化→分配盘符一体化管道)
powershell
 
 
 
# 快速格式化为NTFS
$DataPartition | Format-Volume -FileSystem NTFS -Quick -Confirm:$false
# 完整格式化(坏道检测+全盘清零,无-quick)
$DataPartition | Format-Volume -FileSystem NTFS -Confirm:$false
# exFAT/FAT32格式化
$DataPartition | Format-Volume -FileSystem exFAT -Quick
# 分配盘符Z
$DataPartition | Add-PartitionAccessPath -DriveLetter Z
# 删除盘符
$DataPartition | Remove-PartitionAccessPath -DriveLetter Z
 
配套联动:Format-Volume上层封装 Win32 格式化 API,底层和format.exe、diskpart 格式化共用同一文件系统格式化驱动。

五、卷、盘符、挂载点管理(mountpoint 目录挂载)

表格
 
 
 
diskpart 命令 PowerShell 实现 用途
assign Add-PartitionAccessPath 自动分配空闲盘符
assign mount=C:\MountDisk Add-PartitionAccessPath -AccessPath C:\MountDisk 文件夹挂载(无盘符挂载)
remove letter=Z Remove-PartitionAccessPath -DriveLetter Z 移除盘符
detach vdisk Dismount-VHD 分离 VHD 虚拟磁盘
attach vdisk Mount-VHD 挂载 VHD/VHDX

六、VHD 虚拟磁盘全套(diskpart vdisk 子命令完整映射)

diskpart VHD 操作全集:
plaintext
 
 
 
create vdisk file="D:\disk.vhdx" maximum=50000 type=expandable
attach vdisk
sel vdisk
detach vdisk
 
PowerShell 原生虚拟磁盘命令(Storage 模块原生,无需 diskpart)
powershell
 
 
 
# 创建动态扩展VHDX
New-VHD -Path D:\disk.vhdx -SizeBytes 50GB -Dynamic
# 挂载虚拟磁盘
Mount-VHD -Path D:\disk.vhdx
# 卸载虚拟磁盘
Dismount-VHD -Path D:\disk.vhdx
# 获取VHD磁盘对象
Get-VHD -Path D:\disk.vhdx
 
配套链:VHD 底层由vdisk.sys虚拟磁盘驱动支撑,PS 与 diskpart 调用一致内核驱动。

七、动态磁盘、RAID、镜像卷(diskpart 高级卷操作)

  1. 动态磁盘转换
     
    diskpart:convert dynamic
     
    PowerShell:ConvertTo-DynamicDisk -Number X
  2. 创建条带卷 / 镜像卷
     
    diskpart create volume stripe
     
    PowerShell:New-Volume 配合存储池 / 动态磁盘实现多盘 RAID。

八、boot 启动分区引导修复(diskpart bootsect 配套)

diskpart 常用引导修复:
plaintext
 
 
 
sel volume Z
active
 
PowerShell 设置活动分区(仅 MBR 磁盘生效)
powershell
 
 
 
Get-Partition -DiskNumber X -PartitionNumber 1 | Set-Partition -IsActive $true
 
引导扇区修复(diskpart 无 bootsect,调用外部工具)
 
PS 直接调用bootsect.exe兼容:
powershell
 
 
 
bootsect /nt60 Z: /force
 

九、diskpart 完整运维脚本 → PowerShell 重构对照示例

原版 diskpart 批处理脚本(diskpart.txt 应答文件)

txt
 
 
 
sel disk 1
clean
convert gpt
create partition efi size=100
create partition msr size=16
create partition primary
format fs=ntfs quick
assign letter=D
 

等价 PowerShell 一体化脚本(无交互、对象链式、可判断容错)

powershell
 
 
 
$diskNum = 1
# 清空磁盘
Get-Disk $diskNum | Clear-Disk -RemoveData -Confirm:$false
# GPT初始化
Initialize-Disk -Number $diskNum -PartitionStyle GPT
# EFI分区
New-Partition -DiskNumber $diskNum -Size 100MB -GptType '{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}'
# MSR分区
New-Partition -DiskNumber $diskNum -Size 16MB -GptType '{e3c9e316-0b5c-4db8-817d-f92df00215ae}'
# 数据分区格式化挂载
$mainPart = New-Partition -DiskNumber $diskNum -UseMaximumSize
$mainPart | Format-Volume -FileSystem NTFS -Quick -Confirm:$false
$mainPart | Add-PartitionAccessPath -DriveLetter D
 

十、底层配套依赖总链(diskpart VS PowerShell Storage)

1. diskpart 完整依赖链路

cmd.exe → diskpart.exe(独立进程) → VDS COM接口 → vds.exe服务 → vdsbas.dll/vdsdyn.dll → DeviceIoControl内核磁盘控制码 → disk.sys/stornvme.sys → 物理磁盘
  • 缺点:每次执行重启 diskpart 进程,重复初始化 VDS COM 连接,无状态复用;文本交互无异常对象捕获。

2. PowerShell Storage Cmdlet 依赖链路

pwsh/powershell.exe → Microsoft.PowerShell.Storage.Commands.dll → 双链路自适应
  1. WMI 链路(首选):storwmi.dll → 内核 IO 控制码
  2. VDS 兼容链路(降级):OLE32.dll → VDS COM → vds.exe
  • 优势:PowerShell 会话内 VDS/WMI 长连接复用、管道对象传递、Try/Catch 异常捕获、并行多盘处理。

十一、配套辅助排查命令(二者共用系统工具)

  1. 磁盘坏道检测:chkdsk.exe(PS 可直接调用,或Repair-Volume原生命令)
powershell
 
 
 
Repair-Volume -DriveLetter D -Scan
 
  1. 磁盘空间查询:Get-Volume | Select DriveLetter,SizeRemaining,Size
  2. 存储池运维:Get-StoragePool(diskpart 完全不支持存储空间)

十二、选型使用边界

  1. 老旧 WinPE(无 PowerShell):只能使用 diskpart 应答文件部署;
  2. Windows 10/11、Server 自动化部署、批量硬盘初始化、虚拟机自动化:全部使用 PowerShell Storage 模块;
  3. 临时手动单条磁盘操作:diskpart 上手成本更低。
 

Get-PhysicalDiskGet-Disk 命令的对比,以表格形式呈现:

特性 Get-PhysicalDisk Get-Disk
命令用途 获取物理磁盘的信息。 获取磁盘(包括物理磁盘和虚拟磁盘)信息。
返回内容 仅返回物理磁盘(如硬盘、固态硬盘)信息。 返回所有磁盘的信息,包括物理磁盘、虚拟磁盘、虚拟硬盘(VHD/VHDX)。
显示的信息 显示磁盘的状态、型号、制造商、容量、健康状况等。 显示磁盘的状态、型号、大小、分区、磁盘类型(如基本磁盘、动态磁盘)等。
主要用途 主要用于查看物理磁盘硬件的信息。 用于查看所有磁盘的详细信息,可以用于磁盘的管理和操作。
支持的参数 -FriendlyName-OperationalStatus-HealthStatus-Size, 等 -Number-FriendlyName-IsOffline-PartitionStyle, 等
支持的操作 主要查看和监控物理磁盘的状态和健康情况。 支持更多操作,如设置磁盘为离线、在线,修改磁盘分区等。
返回的磁盘类型 仅返回物理磁盘。 返回所有类型的磁盘,包括物理磁盘、虚拟磁盘等。
是否支持虚拟磁盘 不支持虚拟磁盘(VHD/VHDX)。 支持虚拟磁盘(VHD/VHDX)。
常见用途示例 Get-PhysicalDisk 用于检查物理磁盘的健康状态和型号。 Get-Disk 用于查看系统中所有磁盘的详细信息,包括磁盘状态和分区结构。

主要区别:

  1. 磁盘类型Get-PhysicalDisk 只显示物理磁盘的信息,而 Get-Disk 返回包括虚拟磁盘在内的所有磁盘信息。
  2. 操作支持Get-Disk 提供更多操作选项(如磁盘分区管理、磁盘上线/离线等),Get-PhysicalDisk 主要用于查看物理磁盘的健康状态和硬件信息。
  3. 虚拟磁盘支持Get-Disk 支持虚拟磁盘(如 VHD、VHDX),而 Get-PhysicalDisk 不支持。

 Get-PhysicalDisk 主要用于查看物理磁盘的详细信息,而 Get-Disk 提供了更广泛的磁盘管理功能,并且支持虚拟磁盘。

diskpart 命令与 PowerShell 对应命令的对比表格:

操作 diskpart 命令 PowerShell 命令
列出所有磁盘 list disk Get-Disk
选择磁盘 select disk <编号> Select-Disk <编号>
列出所有分区 list partition Get-Partition
选择分区 select partition <编号> Select-Partition <编号>
格式化磁盘 format Format-Volume
创建分区 create partition <类型> size=<大小> New-Partition -Size <大小> -Type <类型>
删除分区 delete partition Remove-Partition
查看磁盘信息 detail disk `Get-Disk
查看分区信息 detail partition Get-Partition -DiskNumber <编号>
清除磁盘 clean Clear-Disk -RemoveData
扩展分区 extend Resize-Partition -Size <新大小>
设置磁盘为活动磁盘 active Set-Disk -IsOffline $false
设置分区为活动分区 active Set-Partition -IsActive $true
分配驱动器号 assign letter=<盘符> Set-Partition -DriveLetter <盘符>
删除驱动器号 remove letter=<盘符> Clear-Partition -DriveLetter <盘符>
退出 diskpart exit Exit

通过 PowerShell,你可以使用更现代的 cmdlet 来替代 diskpart 命令,且它可以与更多脚本和自动化工具集成。

继续补充一些 diskpartPowerShell 命令的对比:

操作 diskpart 命令 PowerShell 命令
查看磁盘布局 list volume Get-Volume
选择卷 select volume <编号> Select-Volume <编号>
创建简单卷 create volume simple New-Volume -FileSystem <文件系统类型> -Size <大小>
扩展卷 extend Resize-Volume -Size <新大小>
删除卷 delete volume Remove-Volume
格式化卷 format fs=<文件系统类型> Format-Volume -FileSystem <文件系统类型>
设置卷为隐藏 set volume <编号> hidden Set-Volume -IsHidden $true
设置卷为可见 set volume <编号> visible Set-Volume -IsHidden $false
列出磁盘驱动器 list disk Get-PhysicalDisk
列出磁盘驱动器的详细信息 detail disk `Get-PhysicalDisk
挂载 ISO 镜像 无直接命令 Mount-DiskImage -ImagePath <路径>
卸载 ISO 镜像 无直接命令 Dismount-DiskImage -ImagePath <路径>
设置磁盘为脱机 offline disk Set-Disk -IsOffline $true
设置磁盘为联机 online disk Set-Disk -IsOffline $false
磁盘初始化 convert mbr 或 convert gpt Initialize-Disk -PartitionStyle <mbr/gpt>
清空磁盘的所有分区 clean Clear-Disk -RemoveData
更改磁盘的序列号 vol <盘符> Set-Partition -NewPartitionType <新类型>
显示磁盘的信息 detail disk `Get-Disk
查看分区类型 detail partition Get-Partition
调整分区大小 无直接命令 Resize-Partition
删除磁盘分区表 clean Clear-Disk
设置磁盘为只读 attributes disk set readonly Set-Disk -IsReadOnly $true
取消磁盘只读属性 attributes disk clear readonly Set-Disk -IsReadOnly $false

PowerShell 提供了一种更强大、灵活的方式来管理磁盘和卷。它的命令支持更复杂的操作,允许更细致地控制磁盘属性、分区和卷,且通过自动化脚本可以更方便地进行批量处理。

更多关于 diskpartPowerShell 命令的对比:

操作 diskpart 命令 PowerShell 命令
列出所有磁盘 list disk Get-Disk
查看卷的详细信息 detail volume `Get-Volume
列出所有分区 list partition Get-Partition
查看分区的详细信息 detail partition Get-Partition -DiskNumber <磁盘编号>
创建一个带有驱动器号的分区 create partition primary New-Partition -DiskNumber <磁盘编号> -Size <大小> -AssignDriveLetter
创建一个不带驱动器号的分区 create partition primary noerr New-Partition -DiskNumber <磁盘编号> -Size <大小>
删除分区 delete partition Remove-Partition
设置分区为活动分区 active Set-Partition -IsActive $true
取消分区活动属性 inactive Set-Partition -IsActive $false
更改分区的驱动器号 assign letter=<盘符> Set-Partition -DriveLetter <新盘符>
更改分区的文件系统标签 label=<标签> Set-Volume -NewFileSystemLabel <新标签>
更改分区的文件系统 format fs=<文件系统> Format-Volume -FileSystem <文件系统>
检查磁盘是否有未分配的空间 list disk (检查未分配空间) `Get-Disk
重建分区表 convert mbr 或 convert gpt Initialize-Disk -PartitionStyle <mbr/gpt>
磁盘转换为 GPT convert gpt Initialize-Disk -PartitionStyle GPT
磁盘转换为 MBR convert mbr Initialize-Disk -PartitionStyle MBR
列出所有的磁盘驱动器号 list volume Get-Volume
查看磁盘的序列号 vol <盘符> `Get-PhysicalDisk
磁盘扫描 rescan Update-Disk
设置磁盘只读 attributes disk set readonly Set-Disk -IsReadOnly $true
删除磁盘的只读属性 attributes disk clear readonly Set-Disk -IsReadOnly $false
启用磁盘保护 attributes disk set noerr Set-Disk -IsOffline $true
禁用磁盘保护 attributes disk clear noerr Set-Disk -IsOffline $false
显示磁盘的健康状态 detail disk `Get-PhysicalDisk
显示卷的文件系统信息 detail volume `Get-Volume
挂载虚拟磁盘 (VHD) attach vdisk Mount-VHD -Path <虚拟磁盘路径>
卸载虚拟磁盘 (VHD) detach vdisk Dismount-VHD -Path <虚拟磁盘路径>
更改卷的标签(名称) label=<新标签> Set-Volume -FileSystemLabel <新标签>
查看磁盘的健康状态和错误 list disk `Get-PhysicalDisk
列出所有磁盘空间 list disk `Get-Disk
添加新的磁盘分区 create partition primary New-Partition -DiskNumber <磁盘编号> -Size <大小>
列出硬盘信息 list disk Get-PhysicalDisk
查看硬盘 SMART 信息 无直接命令 `Get-PhysicalDisk

PowerShell 进一步增强了磁盘管理的灵活性,能够通过脚本自动化管理操作,且更易集成到自动化工作流程中,适合在大规模环境中使用。相比于 diskpart 的命令行操作,PowerShell 提供了更多的细节选项和控制,能更精准地处理磁盘管理任务。

继续补充的 diskpartPowerShell 命令对比:

操作 diskpart 命令 PowerShell 命令
显示磁盘的详细信息 detail disk Get-Disk -Number <磁盘编号>
查看磁盘空间使用情况 list disk `Get-Disk
列出所有挂载的卷 list volume Get-Volume
显示卷的详细信息 detail volume Get-Volume -DriveLetter <盘符>
删除卷 delete volume Remove-Volume -DriveLetter <盘符>
扩展卷 extend Resize-Partition -DriveLetter <盘符> -Size <新大小>
收缩卷 shrink Resize-Partition -DriveLetter <盘符> -Size <新大小>
删除磁盘 delete disk Remove-Disk -Number <磁盘编号>
重命名卷 label <卷号> <新标签> Set-Volume -DriveLetter <盘符> -NewFileSystemLabel <新标签>
清除磁盘的所有数据 clean Clear-Disk -Number <磁盘编号> -RemoveData
列出磁盘的文件系统类型 list volume `Get-Volume
启用或禁用磁盘缓存 attributes disk set nocache / attributes disk clear nocache 无直接命令,但可以通过磁盘管理工具或操作系统设置调整
创建一个简单卷 create volume simple size=<大小> New-Volume -DiskNumber <磁盘编号> -Size <大小> -FileSystem NTFS
创建带有条带的卷 create volume stripe size=<大小> stripe=<条带数量> New-Volume -DiskNumber <磁盘编号> -Size <大小> -RAIDLevel 0 -FileSystem NTFS
创建镜像卷 create volume mirror size=<大小> New-Volume -DiskNumber <磁盘编号> -Size <大小> -RAIDLevel 1 -FileSystem NTFS
创建 RAID-5 卷 create volume raid5 size=<大小> New-Volume -DiskNumber <磁盘编号> -Size <大小> -RAIDLevel 5 -FileSystem NTFS
列出所有分区的文件系统类型 list partition `Get-Partition
显示分区的健康状态 detail partition Get-Partition -DiskNumber <磁盘编号>
查看磁盘的状态 detail disk `Get-PhysicalDisk
挂载虚拟磁盘 (VHD) attach vdisk Mount-VHD -Path <虚拟磁盘路径>
卸载虚拟磁盘 (VHD) detach vdisk Dismount-VHD -Path <虚拟磁盘路径>
创建磁盘阵列 (RAID) create volume raid New-Volume -RAIDLevel <RAID类型>
检查磁盘是否损坏 list disk `Get-PhysicalDisk
磁盘迁移到其他存储 无直接命令 Move-Disk(第三方工具或 Windows 存储迁移)
将分区转换为动态磁盘 convert dynamic Set-Disk -Number <磁盘编号> -IsDynamic $true
将动态磁盘转换为基础磁盘 convert basic Set-Disk -Number <磁盘编号> -IsDynamic $false
设置磁盘离线 offline disk Set-Disk -Number <磁盘编号> -IsOffline $true
设置磁盘在线 online disk Set-Disk -Number <磁盘编号> -IsOffline $false
检查磁盘是否分配文件系统 list disk Get-Volume -DiskNumber <磁盘编号>
查看磁盘的容量和使用情况 list disk `Get-Disk
获取磁盘的序列号 vol <盘符> `Get-PhysicalDisk
列出所有存储池 无直接命令 Get-StoragePool
列出所有存储空间 无直接命令 Get-StorageSpace

 

  • diskpart 提供了低级别的磁盘管理功能,适合需要直接管理硬盘、分区、卷的用户,它有很强的命令行操作能力,适合系统管理员和高级用户进行管理。
  • PowerShell 提供了更灵活、更现代的脚本化管理方式。它不仅支持类似 diskpart 的磁盘管理功能,而且能够集成到更复杂的自动化任务中,支持通过对象导出和管道操作处理数据,方便进行批量管理。

PowerShell 在功能上相对更强大和灵活,特别是在自动化和系统集成方面,而 diskpart 更适合需要直接操作磁盘、分区和卷的场景。

 


在Windows操作系统中,你可以使用命令行工具来管理磁盘分区。以下是一些常用的命令和工具:

Diskpart

Diskpart 是一个强大的命令行实用程序,用于管理磁盘分区。你可以使用它来创建、删除、格式化分区,以及更改分区属性。

  1. 打开 Diskpart

    • 打开命令提示符(Command Prompt)或者 PowerShell。
    • 输入 diskpart 进入 Diskpart 命令行环境。
  2. 常用的 Diskpart 命令

    • list disk:列出所有的磁盘。
    • select disk X:选择要操作的磁盘,X 是磁盘的编号。
    • list partition:列出选择的磁盘上的所有分区。
    • create partition primary size=X:在选定的磁盘上创建一个主分区,大小为 X MB。
    • delete partition:删除选定的分区。
    • format fs=ntfs quick:快速格式化选定的分区为 NTFS 文件系统。

    使用 Diskpart 需要小心,操作不当可能导致数据丢失。在使用前务必确认你要操作的磁盘和分区。

PowerShell 和命令行工具

除了 Diskpart,还可以使用 PowerShell 或者命令行工具来执行特定的分区管理操作:

  1. PowerShell

    • 使用 Get-Disk 和 Get-Partition 命令来获取磁盘和分区信息。
    • 使用 New-Partition 和 Remove-Partition 来创建和删除分区。
    • 使用 Format-Volume 格式化分区。

    PowerShell 提供了更灵活的脚本化和自动化选项,适合批量操作和管理。

  2. 命令行工具

    • diskpart 是最基本和强大的磁盘分区命令行工具。
    • diskmgmt.msc 可以直接打开磁盘管理界面,提供图形化操作选项。

注意事项:

  • 在执行任何分区操作之前,请备份重要数据。磁盘分区操作可能导致数据丢失。
  • 确保你有足够的权限来执行磁盘分区操作。通常需要管理员权限才能执行。

以上是一些在Windows中常用的分区管理命令和工具,可以根据需要选择合适的方法来管理和操作磁盘分区。


当使用 PowerShell 进行磁盘和分区管理时,可以结合 Get-DiskGet-PartitionNew-PartitionRemove-PartitionFormat-Volume 等命令来完成各种操作。以下是一些示例操作:

示例 1: 获取磁盘和分区信息

powershellCopy Code
# 获取所有磁盘信息
$disks = Get-Disk

# 输出每个磁盘的基本信息
foreach ($disk in $disks) {
    Write-Output "Disk $($disk.Number): $($disk.FriendlyName), $($disk.Size) bytes"
    
    # 获取该磁盘上的分区信息
    $partitions = Get-Partition -DiskNumber $disk.Number
    foreach ($partition in $partitions) {
        Write-Output "  Partition $($partition.PartitionNumber): $($partition.Size) bytes, $($partition.DriveLetter)"
    }
}

示例 2: 创建新分区并格式化

powershellCopy Code
# 选择一个磁盘(这里选择第一个磁盘,可以根据实际情况调整)
$disk = Get-Disk -Number 1

# 创建一个新分区,大小为 10 GB
New-Partition -DiskNumber $disk.Number -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "Data" -Confirm:$false

示例 3: 删除分区

powershellCopy Code
# 获取要删除的分区(这里选择第一个磁盘上的第一个分区,可以根据实际情况调整)
$partition = Get-Partition -DiskNumber 1 -PartitionNumber 1

# 删除该分区(警告:这会永久删除分区中的数据,请谨慎操作)
Remove-Partition -InputObject $partition -Confirm:$false

注意事项:

  • 在执行 Remove-Partition 或者 Format-Volume 时,请确保你选择了正确的分区,以免意外删除或格式化数据。
  • PowerShell 操作会直接影响硬件,务必小心操作,特别是在生产环境中。
  • 使用 PowerShell 进行磁盘和分区管理可以更好地批量化和自动化操作,适合系统管理员和自动化任务。

这些示例演示了如何使用 PowerShell 来管理磁盘和分区,可以根据实际需求调整命令和参数。


当使用 PowerShell 进行磁盘和分区管理时,还可以结合其他命令和选项来执行更复杂的操作。以下是更多的示例:

示例 4: 调整分区大小

powershellCopy Code
# 获取要调整大小的分区(这里选择第一个磁盘上的第一个分区,可以根据实际情况调整)
$partition = Get-Partition -DiskNumber 1 -PartitionNumber 1

# 调整分区大小为新大小(这里调整为 15 GB)
Resize-Partition -Partition $partition -Size 15GB

示例 5: 挂载和卸载卷

powershellCopy Code
# 获取一个已存在的分区(这里选择第一个磁盘上的第一个分区,可以根据实际情况调整)
$partition = Get-Partition -DiskNumber 1 -PartitionNumber 1

# 挂载分区到一个空闲驱动器号
Add-PartitionAccessPath -Partition $partition -AssignDriveLetter

# 卸载分区(移除驱动器号)
Remove-PartitionAccessPath -Partition $partition -DriveLetter D

示例 6: 导出分区信息到文件

powershellCopy Code
# 获取所有磁盘信息
$disks = Get-Disk

# 导出每个磁盘的分区信息到文本文件
foreach ($disk in $disks) {
    $partitions = Get-Partition -DiskNumber $disk.Number
    $diskInfo = "Disk $($disk.Number): $($disk.FriendlyName), $($disk.Size) bytes`n"
    
    foreach ($partition in $partitions) {
        $partitionInfo = "  Partition $($partition.PartitionNumber): $($partition.Size) bytes, $($partition.DriveLetter)`n"
        Add-Content -Path "C:\DiskInfo.txt" -Value $diskInfo
        Add-Content -Path "C:\DiskInfo.txt" -Value $partitionInfo
    }
}

示例 7: 使用管道和条件语句

powershellCopy Code
# 获取所有磁盘中已分区的磁盘
$disks = Get-Disk | Where-Object { $_.Partitions -gt 0 }

# 对每个已分区的磁盘执行操作(例如格式化)
foreach ($disk in $disks) {
    $partitions = Get-Partition -DiskNumber $disk.Number
    
    foreach ($partition in $partitions) {
        if ($partition.FileSystem -ne "NTFS") {
            Format-Volume -Partition $partition -FileSystem NTFS -Confirm:$false
        }
    }
}

这些示例展示了如何利用 PowerShell 的强大功能进行磁盘和分区管理,包括创建、删除、调整大小、挂载、卸载、格式化以及导出信息。使用 PowerShell 可以更高效地管理和自动化大量磁盘操作,适合于需要批量处理的场景和自动化任务。


当使用 PowerShell 进行磁盘和分区管理时,还可以进行如下操作:

示例 8: 列出所有驱动器和卷

powershellCopy Code
# 获取所有驱动器信息(包括磁盘和移动设备)
Get-PSDrive | Where-Object { $_.Provider -like "Microsoft.PowerShell.Core\FileSystem" }

示例 9: 复制和克隆分区

powershellCopy Code
# 复制分区到新的位置
$sourcePartition = Get-Partition -DiskNumber 1 -PartitionNumber 1
$targetDisk = Get-Disk -Number 2
$targetPartition = New-Partition -DiskNumber $targetDisk.Number -UseMaximumSize
Copy-Partition -SourcePartition $sourcePartition -DestinationPartition $targetPartition -Confirm:$false

# 克隆整个磁盘(需要适当的权限和磁盘空间)
$sourceDisk = Get-Disk -Number 1
$targetDisk = Get-Disk -Number 2
Clone-Disk -SourceDisk $sourceDisk -DestinationDisk $targetDisk -Confirm:$false

示例 10: 检查和修复文件系统错误

powershellCopy Code
# 检查并修复文件系统错误
Repair-Volume -DriveLetter D -OfflineScanAndFix

示例 11: 设置磁盘保护(仅适用于存储空间)

powershellCopy Code
# 设置磁盘保护(适用于存储空间)
Set-StoragePool -FriendlyName "MyStoragePool" -ProvisioningTypeDefault Fixed -ResiliencySettingNameDefault Mirror

示例 12: 密封和解封磁盘(用于 BitLocker 加密)

powershellCopy Code
# 密封磁盘(BitLocker 加密后需要解封才能访问)
Suspend-BitLocker -MountPoint "D:"

# 解封磁盘
Resume-BitLocker -MountPoint "D:"

注意事项:

  • 在执行任何涉及数据删除、格式化或磁盘调整大小的操作时,务必谨慎。建议在生产环境之前进行测试。
  • 使用 PowerShell 进行磁盘和分区管理通常需要管理员权限。
  • 一些操作(如克隆磁盘或设置磁盘保护)可能需要特定的硬件或环境支持,例如存储空间或 BitLocker。

这些示例扩展了 PowerShell 在磁盘和分区管理中的应用,展示了更多复杂操作和高级用法,适用于不同的系统管理需求和自动化场景。


当使用 PowerShell 进行磁盘和分区管理时,你还可以执行以下操作:

示例 13: 查询和管理磁盘信息

powershellCopy Code
# 获取所有磁盘信息
Get-Disk

# 获取详细的磁盘信息,包括分区和卷信息
Get-Disk | Get-Partition | Get-Volume

示例 14: 查询和管理存储空间(Storage Spaces)

powershellCopy Code
# 获取所有存储空间
Get-StoragePool

# 获取存储空间详细信息
Get-StoragePool | Get-VirtualDisk | Get-Disk | Get-Partition | Get-Volume

# 创建新的存储空间
New-StoragePool -FriendlyName "MyStoragePool" -StorageSubsystemFriendlyName "Storage Spaces" -PhysicalDisks (Get-PhysicalDisk -CanPool $true) -ResiliencySettingNameDefault Mirror

示例 15: 备份和还原分区

powershellCopy Code
# 备份分区到指定路径
Backup-Partition -DriveLetter D -BackupFilePath "C:\Backup\D_Partition_Backup.wim"

# 还原分区备份
Restore-Partition -DriveLetter D -BackupFilePath "C:\Backup\D_Partition_Backup.wim" -Confirm:$false

示例 16: 监控和报告磁盘使用情况

powershellCopy Code
# 监控磁盘使用情况(可用空间、已使用空间等)
Get-Volume | Select-Object DriveLetter, FileSystemLabel, @{Name="UsedSpace(GB)";Expression={$_.SizeUsed/1GB}}, @{Name="FreeSpace(GB)";Expression={$_.SizeRemaining/1GB}}

# 生成磁盘使用情况报告
Get-Volume | Format-Table DriveLetter, FileSystemLabel, @{Name="UsedSpace(GB)";Expression={$_.SizeUsed/1GB}}, @{Name="FreeSpace(GB)";Expression={$_.SizeRemaining/1GB}} | Out-File "C:\DiskUsageReport.txt"

示例 17: 配置磁盘自动挂载(当系统启动时)

powershellCopy Code
# 配置磁盘自动挂载
Enable-StorageReliabilityFeature -FeatureName AutoMount -Disk (Get-Disk -Number 1)

这些示例进一步展示了 PowerShell 在磁盘和存储管理中的广泛应用。无论是基本的分区管理、存储空间配置,还是高级的备份、监控功能,PowerShell 提供了丰富的命令和选项,使得系统管理员和运维人员能够高效地管理和自动化这些任务。


当使用 PowerShell 进行磁盘和分区管理时,还可以探索以下功能和示例:

示例 18: 设置磁盘配额

powershellCopy Code
# 设置磁盘配额
Enable-DiskQuota -Drive "D:" -DesiredDiskSpace 10GB

示例 19: 管理 BitLocker 加密

powershellCopy Code
# 启用 BitLocker 加密
Enable-BitLocker -MountPoint "D:" -EncryptionMethod XtsAes256 -UsedSpaceOnly

# 更改 BitLocker 密码
Set-BitLockerPassword -MountPoint "D:" -Password (ConvertTo-SecureString -String "NewPassword" -AsPlainText -Force)

示例 20: 磁盘数据擦除

powershellCopy Code
# 清除磁盘数据(谨慎操作,此操作将不可恢复地删除数据)
Clear-Disk -Number 1 -RemoveData -RemoveOEM -Confirm:$false

示例 21: 磁盘事件监控

powershellCopy Code
# 监控磁盘事件
Get-WinEvent -LogName "Microsoft-Windows-DiskDiagnostic/Operational" | Format-List -Property TimeCreated, Id, Message

示例 22: 检查和修复文件系统错误

powershellCopy Code
# 检查并修复文件系统错误(与之前示例稍有不同)
Repair-Volume -DriveLetter D -OfflineScanAndFix -Verbose

示例 23: 自动化磁盘管理任务

powershellCopy Code
# 自动化分区创建
New-Partition -DiskNumber 1 -UseMaximumSize -AssignDriveLetter

# 自动化格式化
Format-Volume -DriveLetter E -FileSystem NTFS -NewFileSystemLabel "Data" -Confirm:$false

注意事项:

  • PowerShell 提供了丰富的磁盘和分区管理功能,但在执行任何可能影响数据安全的操作时,请务必谨慎。
  • 某些操作(如清除磁盘数据)是不可逆的,一定要确认操作目标正确,并备份重要数据。
  • 一些高级功能(如 BitLocker)可能需要管理员权限和特定硬件支持。

这些示例展示了如何利用 PowerShell 强大的功能来管理磁盘、分区和存储设备。无论是日常的管理任务、安全操作,还是自动化流程,PowerShell 都是一种强大且灵活的工具。


当使用 PowerShell 进行磁盘和分区管理时,还可以探索以下功能和示例:

示例 24: 挂载和卸载 VHD/VHDX 文件

powershellCopy Code
# 挂载 VHD 文件
Mount-VHD -Path "C:\Path\to\YourDisk.vhd"

# 卸载 VHD 文件
Dismount-VHD -Path "C:\Path\to\YourDisk.vhd"

示例 25: 设置自动化任务和计划

powershellCopy Code
# 创建定时任务来定期备份磁盘
$trigger = New-ScheduledTaskTrigger -Daily -At "10:00AM"
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File 'C:\Scripts\Backup.ps1'"
Register-ScheduledTask -TaskName "DailyBackup" -Trigger $trigger -Action $action -RunLevel Highest -User "Administrator"

# 查看定时任务列表
Get-ScheduledTask

示例 26: 监控和记录磁盘性能

powershellCopy Code
# 使用 Performance Counter 监控磁盘读写性能
$diskCounter = "\LogicalDisk(C:)\% Disk Time"
$diskPerf = Get-Counter -Counter $diskCounter
$diskPerf.CounterSamples | Select-Object InstanceName, CookedValue

示例 27: 自定义磁盘管理脚本

powershellCopy Code
# 创建一个可以批量执行的磁盘管理脚本
# 例如,批量格式化多个分区
$drives = Get-Partition | Where-Object { $_.OperationalStatus -eq "Offline" }
foreach ($drive in $drives) {
    Initialize-Disk -Number $drive.DiskNumber -PartitionStyle GPT
    New-Partition -DiskNumber $drive.DiskNumber -UseMaximumSize -AssignDriveLetter
    Format-Volume -DriveLetter $drive.DriveLetter -FileSystem NTFS -NewFileSystemLabel "Data" -Confirm:$false
}

示例 28: 使用 WMI 管理磁盘

powershellCopy Code
# 使用 WMI 获取磁盘信息
Get-WmiObject -Class Win32_DiskDrive | Select-Object DeviceID, Model, Size

# 使用 WMI 设置磁盘属性(例如禁用磁盘缓存)
$disk = Get-WmiObject -Class Win32_DiskDrive -Filter "Model='YourDiskModel'"
$disk.DisableWriteCache()

这些示例进一步展示了 PowerShell 在磁盘和存储管理中的广泛应用。无论是日常的管理任务、定时备份、性能监控,还是自定义的管理脚本,PowerShell 提供了丰富的功能和灵活性,帮助管理员和运维人员更高效地管理和自动化磁盘操作。


当涉及 PowerShell 进行磁盘和分区管理时,还有几个关键示例和功能可供探索:

示例 29: 磁盘容量监控和报警

powershellCopy Code
# 监控磁盘空间使用情况并设置警报
$threshold = 80  # 设置警报阈值为 80%
$disk = Get-WmiObject -Class Win32_LogicalDisk -Filter "DeviceID='C:'"
$usedPercent = [math]::Round(($disk.Size - $disk.FreeSpace) / $disk.Size * 100, 2)
if ($usedPercent -ge $threshold) {
    Send-MailMessage -To "admin@example.com" -From "alerts@example.com" -Subject "Disk Space Alert" -Body "Disk C: is ${usedPercent}% full. Please take action." -SmtpServer "smtp.example.com"
}

示例 30: 备份和恢复磁盘镜像

powershellCopy Code
# 创建磁盘镜像备份
New-WindowsImage -CapturePath "D:\Backup.wim" -ImagePath "E:\Backup.wim" -Description "Full backup of drive D:" -Name "DriveD"

# 恢复磁盘镜像备份
Apply-WindowsImage -ImagePath "E:\Backup.wim" -Index 1 -ApplyPath "D:\" -Confirm:$false

示例 31: 使用 PowerShell Core 进行跨平台磁盘管理

powershellCopy Code
# 在 PowerShell Core 中执行磁盘和分区管理
Invoke-Command -ComputerName "Server01" -ScriptBlock {
    Get-Volume | Where-Object { $_.DriveLetter -eq 'E' } | Format-List
}

示例 32: 磁盘性能优化和调整

powershellCopy Code
# 优化磁盘性能设置
Optimize-Volume -DriveLetter "C" -ReTrim -Verbose

# 调整磁盘缓存设置
Set-PhysicalDisk -DeviceNumber 0 -DisableIsOfflineCache $true

示例 33: 使用 PowerShell 控制存储空间直通设备

powershellCopy Code
# 控制存储空间直通设备
Set-VMHost -VirtualHardDiskPath "C:\VMs\Disk1.vhdx" -IsPassthrough $true

这些示例展示了 PowerShell 在不同场景下进行磁盘和存储管理的能力,从监控和警报、备份和恢复、跨平台执行到性能优化和直通设备管理等多个方面。PowerShell 提供了广泛的功能和灵活性,适用于各种复杂的 IT 管理任务和自动化需求。


当涉及更高级的 PowerShell 磁盘管理功能时,可以探索以下示例和用例:

示例 34: 磁盘故障检测和预测

powershellCopy Code
# 使用 Storage module 检测磁盘故障
$disks = Get-PhysicalDisk -FriendlyName "*"
foreach ($disk in $disks) {
    $healthStatus = Get-StorageReliabilityCounter -PhysicalDisk $disk
    if ($healthStatus -ne "Healthy") {
        Write-Host "Disk $($disk.DeviceId) is not healthy. Health status: $healthStatus"
    }
}

示例 35: 磁盘 RAID 配置和管理

powershellCopy Code
# 配置磁盘为 RAID 1
$disk1 = Get-PhysicalDisk -CanPool $true | Where-Object { $_.MediaType -eq "HDD" } | Select-Object -First 1
$disk2 = Get-PhysicalDisk -CanPool $true | Where-Object { $_.MediaType -eq "HDD" } | Select-Object -First 1
New-StoragePool -FriendlyName "RAID1Pool" -StorageSubsystemFriendlyName "Storage Spaces*" -PhysicalDisks $disk1, $disk2
New-VirtualDisk -FriendlyName "RAID1Disk" -StoragePoolFriendlyName "RAID1Pool" -ResiliencySettingName Mirror -UseMaximumSize
Initialize-Disk -Number (Get-VirtualDisk -FriendlyName "RAID1Disk").UniqueId
New-Partition -DiskNumber (Get-VirtualDisk -FriendlyName "RAID1Disk").UniqueId -UseMaximumSize -AssignDriveLetter
Format-Volume -DriveLetter (Get-VirtualDisk -FriendlyName "RAID1Disk").UniqueId -FileSystem NTFS -NewFileSystemLabel "Data" -Confirm:$false

# 添加故障转移 (Fault Tolerance)
Set-StorageFaultDomain -StorageSubSystemFriendlyName "Storage Spaces*" -FaultDomainAwareness PhysicalDisk -RedundancyDefault "Two-Way"

示例 36: 使用 PowerShell 进行 BitLocker 加密管理

powershellCopy Code
# 启用 BitLocker 加密
Enable-BitLocker -MountPoint "C:" -EncryptionMethod Aes256 -UsedSpaceOnly

# 恢复 BitLocker 加密
Unlock-BitLocker -MountPoint "C:" -RecoveryPassword "yourrecoverykey"

# 禁用 BitLocker 加密
Disable-BitLocker -MountPoint "C:" -RecoveryPassword "yourrecoverykey"

示例 37: 分区管理和调整

powershellCopy Code
# 调整分区大小
Resize-Partition -DriveLetter "D" -Size 100GB

# 更改分区标签
Set-Volume -DriveLetter "D" -NewFileSystemLabel "Data"

# 删除分区
Remove-Partition -DriveLetter "D" -Confirm:$false

示例 38: 使用 PowerShell 进行磁盘数据迁移

powershellCopy Code
# 将数据从旧磁盘迁移到新磁盘
$sourceDisk = Get-PhysicalDisk -DeviceId 1
$destDisk = Get-PhysicalDisk -DeviceId 2
Move-StorageData -Source $sourceDisk -Destination $destDisk -Verbose

这些示例展示了 PowerShell 在更复杂和特定场景下的应用,如磁盘故障管理、RAID 配置、BitLocker 加密、分区管理和数据迁移等。这些功能不仅帮助管理员和运维人员管理现有的存储设备,还支持高级配置和安全操作,适应企业级的 IT 管理和数据保护需求。


当涉及更高级的 PowerShell 磁盘管理功能时,你可以探索以下示例和用例,进一步深入理解如何利用 PowerShell 进行更精细的磁盘管理和配置:

示例 39: 使用 PowerShell 进行磁盘空间监控

powershellCopy Code
# 监控磁盘空间使用情况
$disks = Get-PhysicalDisk -CanPool $true
foreach ($disk in $disks) {
    $usage = Get-PhysicalDisk | Where-Object { $_.DeviceId -eq $disk.DeviceId } | Get-StorageUsage -Threshold 80
    if ($usage) {
        Write-Host "Disk $($disk.DeviceId) is reaching capacity. Current usage: $($usage.SizeUsed) out of $($usage.Size)"
    }
}

示例 40: 使用 PowerShell 进行磁盘性能监控

powershellCopy Code
# 监控磁盘性能
$disks = Get-PhysicalDisk -CanPool $true
foreach ($disk in $disks) {
    $perf = Get-StorageReliabilityCounter -PhysicalDisk $disk | Select-Object -ExpandProperty "AverageReadLatency"
    Write-Host "Average read latency for Disk $($disk.DeviceId): $($perf) ms"
}

示例 41: 使用 PowerShell 进行磁盘备份和恢复

powershellCopy Code
# 备份磁盘
Backup-StoragePool -FriendlyName "RAID1Pool" -BackupStorageLocation "\\server\backups"

# 从备份中恢复
Restore-StoragePool -FriendlyName "RAID1Pool" -RestoreStorageLocation "\\server\backups"

示例 42: 使用 PowerShell 进行磁盘日志分析

powershellCopy Code
# 分析磁盘事件日志
$events = Get-WinEvent -LogName "System" -FilterXPath "*[System[Provider[@Name='Disk']]]" -MaxEvents 50
foreach ($event in $events) {
    Write-Host "Disk event detected: $($event.Message)"
}

示例 43: 使用 PowerShell 进行磁盘健康状态检查

powershellCopy Code
# 检查磁盘健康状态
$disks = Get-PhysicalDisk -CanPool $true
foreach ($disk in $disks) {
    $healthStatus = Get-StorageReliabilityCounter -PhysicalDisk $disk | Select-Object -ExpandProperty "HealthStatus"
    Write-Host "Health status for Disk $($disk.DeviceId): $($healthStatus)"
}

这些示例涵盖了更多复杂的用例,包括磁盘空间和性能监控、备份与恢复、事件日志分析以及健康状态检查。通过 PowerShell 的强大功能,管理员可以更高效地管理和维护整个磁盘基础架构,确保系统的可靠性和安全性。


当你需要深入 PowerShell 磁盘管理的更多复杂功能时,可以考虑以下示例和用例,涵盖了一些高级的操作和管理任务:

示例 44: 使用 PowerShell 进行磁盘故障恢复

powershellCopy Code
# 模拟磁盘故障并进行恢复
$disks = Get-PhysicalDisk -CanPool $true
$failedDisk = $disks | Select-Object -First 1
Set-PhysicalDisk -UniqueId $failedDisk.UniqueId -Usage Retired
Repair-VirtualDisk -FriendlyName "RAID1Disk"

示例 45: 使用 PowerShell 进行磁盘扩展

powershellCopy Code
# 扩展虚拟磁盘容量
$virtualDisk = Get-VirtualDisk -FriendlyName "RAID1Disk"
Resize-VirtualDisk -FriendlyName $virtualDisk.FriendlyName -Size (Get-VirtualDiskSupportedSize -FriendlyName $virtualDisk.FriendlyName).SizeMax
Resize-Partition -DriveLetter (Get-VirtualDisk -FriendlyName "RAID1Disk").UniqueId -Size 500GB

示例 46: 使用 PowerShell 进行 SSD 缓存配置

powershellCopy Code
# 配置 SSD 缓存
$ssd = Get-PhysicalDisk -MediaType SSD | Select-Object -First 1
$pool = Get-StoragePool -FriendlyName "RAID1Pool"
Add-PhysicalDisk -StoragePool $pool -PhysicalDisks $ssd
Set-StorageTier -StoragePool $pool -FriendlyName "Performance" -MediaType SSD
Set-StorageTier -StoragePool $pool -FriendlyName "Capacity" -MediaType HDD
New-VirtualDisk -StoragePoolFriendlyName $pool.FriendlyName -FriendlyName "TieredDisk" -StorageTiers @("Performance", "Capacity") -StorageTierSizes @(100GB, 1TB)
Initialize-Disk -Number (Get-VirtualDisk -FriendlyName "TieredDisk").UniqueId
New-Partition -DiskNumber (Get-VirtualDisk -FriendlyName "TieredDisk").UniqueId -UseMaximumSize -AssignDriveLetter
Format-Volume -DriveLetter (Get-VirtualDisk -FriendlyName "TieredDisk").UniqueId -FileSystem NTFS -NewFileSystemLabel "Data" -Confirm:$false

示例 47: 使用 PowerShell 进行磁盘性能优化

powershellCopy Code
# 优化磁盘性能
Optimize-Volume -DriveLetter "D" -Defrag -ReTrim -Verbose

示例 48: 使用 PowerShell 进行磁盘加密与安全管理

powershellCopy Code
# 配置透明数据加密 (TDE)
$virtualDisk = Get-VirtualDisk -FriendlyName "RAID1Disk"
$encryption = New-StorageEncryption -EncryptionType BitLocker -KeyProtector (Get-BitLockerKeyProtector -VolumeId $virtualDisk.UniqueId).KeyProtector
Set-StorageEncryption -Encryption $encryption

这些示例展示了如何利用 PowerShell 进行更复杂和高级的磁盘管理操作,包括故障恢复、磁盘扩展、SSD 缓存配置、性能优化以及数据加密与安全管理。这些功能不仅适用于企业级环境,也可帮助 IT 管理员更好地管理和优化存储系统,确保数据的安全性、可靠性和高效性。


示例 49: 使用 PowerShell 进行磁盘备份与恢复

powershellCopy Code
# 备份虚拟磁盘
$virtualDisk = Get-VirtualDisk -FriendlyName "RAID1Disk"
Backup-VirtualDisk -FriendlyName $virtualDisk.FriendlyName -Path "\\backupserver\backups\$($virtualDisk.FriendlyName)_backup.vhdx"

# 恢复虚拟磁盘
Restore-VirtualDisk -Path "\\backupserver\backups\$($virtualDisk.FriendlyName)_backup.vhdx" -Destination "E:\RestoredDisk"

示例 50: 使用 PowerShell 进行磁盘事件监控

powershellCopy Code
# 监控磁盘事件
Get-EventLog -LogName System -Source Disk | Where-Object { $_.TimeGenerated -gt (Get-Date).AddDays(-1) }

示例 51: 使用 PowerShell 进行磁盘性能测试

powershellCopy Code
# 测试磁盘性能
Measure-Command {
    $testFile = "D:\testfile.dat"
    $fileSizeMB = 1000
    $fileContent = New-Object byte[] ($fileSizeMB * 1MB)
    [IO.File]::WriteAllBytes($testFile, $fileContent)
    Remove-Item $testFile
}

示例 52: 使用 PowerShell 进行磁盘空间报告生成

powershellCopy Code
# 生成磁盘空间报告
$driveLetter = "C"
$reportPath = "C:\Reports\DiskSpaceReport.csv"
Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq 3 -and $_.DeviceID -eq $driveLetter } | Select-Object DeviceID, VolumeName, @{Name="FreeSpace(GB)";Expression={$_.FreeSpace / 1GB}}, @{Name="Capacity(GB)";Expression={$_.Size / 1GB}} | Export-Csv -Path $reportPath -NoTypeInformation

示例 53: 使用 PowerShell 进行磁盘事件自动响应

powershellCopy Code
# 自动响应磁盘事件
$eventAction = {
    $event = $eventSubscriber.SourceEventArgs.NewEvent
    Write-Host "Disk event occurred: $($event.Message)"
    # 在这里编写自动响应逻辑,例如发送邮件或者执行特定的故障排除脚本
}
Register-WmiEvent -Query "SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE TargetInstance ISA 'Win32_LogicalDisk'" -SourceIdentifier "DiskModificationEvent" -Action $eventAction

这些示例涵盖了更多的 PowerShell 磁盘管理用例,包括备份与恢复、事件监控、性能测试、空间报告生成以及事件自动响应。通过这些示例,可以进一步加强对 PowerShell 在复杂磁盘管理任务中的应用和理解。


示例 54: 使用 PowerShell 进行磁盘容错管理

powershellCopy Code
# 管理磁盘容错
$pool = Get-StoragePool -FriendlyName "RAID1Pool"
$virtualDisk = Get-VirtualDisk -FriendlyName "RAID1Disk"

# 添加热备份磁盘
$hotSpare = Get-PhysicalDisk -CanPool $true | Select-Object -First 1
Add-PhysicalDisk -StoragePool $pool -PhysicalDisks $hotSpare -Usage HotSpare

# 启用磁盘容错
Set-VirtualDisk -FriendlyName $virtualDisk.FriendlyName -ResiliencySettingName Mirror

示例 55: 使用 PowerShell 进行磁盘健康状态检查

powershellCopy Code
# 检查磁盘健康状态
$physicalDisks = Get-PhysicalDisk
$unhealthyDisks = $physicalDisks | Where-Object { $_.OperationalStatus -ne "OK" }
if ($unhealthyDisks) {
    foreach ($disk in $unhealthyDisks) {
        Write-Host "Unhealthy disk detected: $($disk.DeviceID)"
        # 在此处添加通知或故障排除逻辑
    }
} else {
    Write-Host "All disks are healthy."
}

示例 56: 使用 PowerShell 进行磁盘节能管理

powershellCopy Code
# 配置磁盘节能模式
$disk = Get-PhysicalDisk -DeviceID "0"
Set-PhysicalDisk -InputObject $disk -IdleTimeoutEnabled $true -IdleTimeout 600

示例 57: 使用 PowerShell 进行磁盘驱动器映射管理

powershellCopy Code
# 管理驱动器映射
New-PSDrive -Name "Data" -PSProvider FileSystem -Root "E:\" -Persist
Get-PSDrive "Data" | Format-Table -Property Name, Root, Used, Free

示例 58: 使用 PowerShell 进行磁盘 RAID 配置

powershellCopy Code
# 配置磁盘 RAID
New-StoragePool -FriendlyName "RAID5Pool" -StorageSubSystemFriendlyName "Windows Storage*" -PhysicalDisks (Get-PhysicalDisk -CanPool $true) -FaultDomainAwareness PhysicalDisk
New-VirtualDisk -StoragePoolFriendlyName "RAID5Pool" -FriendlyName "RAID5Disk" -ResiliencySettingName Parity -UseMaximumSize
Initialize-Disk -Number (Get-VirtualDisk -FriendlyName "RAID5Disk").UniqueId
New-Partition -DiskNumber (Get-VirtualDisk -FriendlyName "RAID5Disk").UniqueId -UseMaximumSize -AssignDriveLetter
Format-Volume -DriveLetter (Get-VirtualDisk -FriendlyName "RAID5Disk").UniqueId -FileSystem NTFS -NewFileSystemLabel "Data" -Confirm:$false

这些示例继续扩展了 PowerShell 在磁盘管理中的应用,包括容错管理、健康状态检查、节能管理、驱动器映射以及 RAID 配置。这些功能使得 PowerShell 成为一个强大的工具,可以在各种复杂的存储环境中实现自动化管理和监控。


在 PowerShell 中查看硬盘的 SMART 信息,可以使用 Get-PhysicalDisk 命令,并配合 Select-Object 选择显示相关的 SMART 属性。以下是一些常见的查看硬盘 SMART 信息的 PowerShell 命令。

获取硬盘的基本 SMART 信息

使用 Get-PhysicalDisk 命令可以查看磁盘的基本信息,包括其健康状态、型号、序列号等。要查看 SMART 信息,你可以使用以下命令:

powershellCopy Code
Get-PhysicalDisk | Select-Object -Property FriendlyName, OperationalStatus, HealthStatus, Size, SerialNumber

这将列出所有物理磁盘的:

  • FriendlyName:磁盘友好名称(例如:"Samsung SSD")
  • OperationalStatus:磁盘的工作状态(例如:"OK")
  • HealthStatus:硬盘健康状态(例如:"Healthy")
  • Size:硬盘大小
  • SerialNumber:硬盘序列号

获取更详细的 SMART 数据

要获取更详细的 SMART 数据(例如硬盘的温度、错误计数等),可以使用 Get-PhysicalDisk 命令结合 Select-Object-Property 参数来查看支持的属性。

powershellCopy Code
Get-PhysicalDisk | Select-Object -Property FriendlyName, OperationalStatus, HealthStatus, Temperature, PowerOnHours, SerialNumber, SectorsPerTrack

这将输出更详细的信息,包括:

  • Temperature:硬盘温度(以摄氏度为单位)
  • PowerOnHours:硬盘的开启小时数(运行时间)
  • SectorsPerTrack:磁盘每个磁道的扇区数

获取硬盘的更多 SMART 属性(如:错误、性能计数)

SMART 数据(如重新分配扇区计数、硬盘读取/写入错误等)通常需要通过特定的硬盘厂商提供的工具来查看。不过,在 PowerShell 中,我们可以尝试获取更广泛的健康状态信息,包括错误计数。

powershellCopy Code
Get-PhysicalDisk | Select-Object -Property FriendlyName, OperationalStatus, HealthStatus, ErrorCount
  • ErrorCount:磁盘上的错误计数(如读写错误)

使用 Get-WmiObject 查询 SMART 属性

更详细的 SMART 数据可以通过 Get-WmiObject 来查询。以下是查询硬盘的 SMART 数据的命令:

powershellCopy Code
Get-WmiObject -Query "SELECT * FROM Win32_DiskDrive" | Select-Object DeviceID, Model, SerialNumber, Status

这会显示硬盘的设备 ID、型号、序列号和状态等信息。

获取硬盘的详细性能和健康状况

如果你需要更详细的性能数据,可以使用 Get-WmiObject 查询硬盘性能对象:

powershellCopy Code
Get-WmiObject -Namespace "root\wmi" -Class MSStorageDriver_FailurePredictStatus | Select-Object InstanceName, PredictFailure, FailureReason

此命令会返回磁盘的预测失败状态和原因。

  • PredictFailure:是否预测失败(例如:“True”表示硬盘将要发生故障)
  • FailureReason:失败的原因(如果有的话)

使用 Smartmontools 工具

PowerShell 本身并不提供访问所有 SMART 数据的全面支持。为了获得更详细的 SMART 信息,可以使用 Smartmontools 工具,它是一个命令行工具,用于监控硬盘的健康状况并查看 SMART 数据。你可以通过 PowerShell 调用 Smartmontools:

  1. 下载并安装 SmartmontoolsSmartmontools
  2. 然后在 PowerShell 中运行以下命令:
smartd 7.4 2023-08-01 r5530 [x86_64-w64-mingw32-2022-b26100] (sf-7.4-1)
版权所有 (C) 2002-23,Bruce Allen,Christian Franke,www.smartmontools.org

用法: smartd [选项]

  -A PREFIX, --attributelog=PREFIX
        将属性信息记录到 {PREFIX}MODEL-SERIAL.TYPE.csv

  -B [+]FILE, --drivedb=[+]FILE
        从 FILE 读取并替换 [添加] 驱动器数据库
        [默认是 +C:/Program Files/smartmontools/bin/drivedb-add.h
         然后是 C:/Program Files/smartmontools/bin/drivedb.h]

  -c NAME|-, --configfile=NAME|-
        读取配置文件 NAME 或从标准输入读取
        [默认是 C:/Program Files/smartmontools/bin/smartd.conf]

  -d, --debug
        以调试模式启动 smartd

  -D, --showdirectives
        打印配置文件中的指令并退出

  -h, --help, --usage
        显示此帮助并退出

  -i N, --interval=N
        设置磁盘检查的间隔为 N 秒,N >= 10

  -l local[0-7], --logfacility=local[0-7]
        记录到 "./smartd.log"、标准输出、标准错误 [默认是事件日志]

  -p NAME, --pidfile=NAME
        写入 PID 文件 NAME

  -q WHEN, --quit=WHEN
        在以下情况下退出:nodev[0]、errors[,nodev0]、nodev[0]startup、never、onecheck、showtests

  -r, --report=TYPE
        报告以下类型的事务:ioctl[,N]、ataioctl[,N]、scsiioctl[,N]、nvmeioctl[,N]

  -s PREFIX, --savestates=PREFIX
        将磁盘状态保存到 {PREFIX}MODEL-SERIAL.TYPE.state

  -w NAME, --warnexec=NAME
        在出现警告时运行可执行文件 NAME
        [默认是 C:/Program Files/smartmontools/bin/smartd_warning.cmd]

  -u MODE, --warn-as-user=MODE
        使用修改后的访问令牌运行警告脚本:restricted(受限),unchanged(不变)

  --service
        作为 Windows 服务运行(参见手册页),安装命令:
          smartd install [选项]
        移除服务命令:
          smartd remove

  -V, --version, --license, --copyright
        打印许可证、版权和版本信息

这是 smartd 工具的帮助信息,列出了所有可用的命令行选项和功能,主要用于磁盘健康监控和状态记录。

 
powershellCopy Code
smartctl -a /dev/sda

这个命令将输出磁盘 /dev/sda 的详细 SMART 信息,包括所有自检数据、错误日志、温度等。

S.M.A.R.T. Monitoring Tools download | SourceForge.net

smartctl 7.4 2023-08-01 r5530 [x86_64-w64-mingw32-2022-b26100] (sf-7.4-1)
版权(C) 2002-23,Bruce Allen, Christian Franke,www.smartmontools.org

用法:smartctl [选项] 设备

============================================ 显示信息选项 =====

  -h, --help, --usage
         显示此帮助信息并退出

  -V, --version, --copyright, --license
         打印许可证、版权和版本信息并退出

  -i, --info
         显示设备的身份信息

  --identify[=[w][nvb]]
         显示IDENTIFY DEVICE数据的字和位                (ATA)

  -g NAME, --get=NAME
        获取设备设置:all, aam, apm, dsn, lookahead, security,
        wcache, rcache, wcreorder, wcache-sct

  -a, --all
         显示设备的所有SMART信息

  -x, --xall
         显示设备的所有信息

  --scan
         扫描设备

  --scan-open
         扫描设备并尝试打开每个设备

================================== smartctl 运行时行为选项 =====

  -j, --json[=cgiosuvy]
         以JSON或YAML格式打印输出

  -q TYPE, --quietmode=TYPE                                           (ATA)
         设置smartctl的静默模式,选项:errorsonly, silent, noserial

  -d TYPE, --device=TYPE
         指定设备类型,选项有:
         ata, scsi[+TYPE], nvme[,NSID], sat[,auto][,N][+TYPE], usbasm1352r,N, usbcypress[,X], usbjmicron[,p][,x][,N], usbprolific, usbsunplus, sntasmedia, sntjmicron[,NSID], sntrealtek, jmb39x[-q],N[,sLBA][,force][+TYPE], jms56x,N[,sLBA][,force][+TYPE], aacraid,H,L,ID, areca,N[/E], auto, test

  -T TYPE, --tolerance=TYPE                                           (ATA)
         容差:normal, conservative, permissive, verypermissive

  -b TYPE, --badsum=TYPE                                              (ATA)
         设置坏校验和的处理方式:warn, exit, ignore

  -r TYPE, --report=TYPE
         报告事务(详见手册页)

  -n MODE[,STATUS[,STATUS2]], --nocheck=MODE[,STATUS[,STATUS2]] (ATA, SCSI)
         如果是:never, sleep, standby, idle(详见手册页)则不检查

============================== 设备特性启用/禁用命令 =====

  -s VALUE, --smart=VALUE
        启用/禁用设备上的SMART功能(on/off)

  -o VALUE, --offlineauto=VALUE                                       (ATA)
        启用/禁用设备上的自动离线测试(on/off)

  -S VALUE, --saveauto=VALUE                                          (ATA)
        启用/禁用设备上的属性自动保存(on/off)

  -s NAME[,VALUE], --set=NAME[,VALUE]
        启用/禁用/修改设备设置:aam,[N|off], apm,[N|off],
        dsn,[on|off], lookahead,[on|off], security-freeze,
        standby,[N|off|now], wcache,[on|off], rcache,[on|off],
        wcreorder,[on|off[,p]], wcache-sct,[ata|on|off[,p]]

======================================= 读取和显示数据选项 =====

  -H, --health
        显示设备的SMART健康状态

  -c, --capabilities                                            (ATA, NVMe)
        显示设备的SMART能力

  -A, --attributes
        显示设备的SMART厂商特定属性及其值

  -f FORMAT, --format=FORMAT                                          (ATA)
        设置属性输出格式:old, brief, hex[,id|val]

  -l TYPE, --log=TYPE
        显示设备日志。TYPE:error, selftest, selective, directory[,g|s],
        xerror[,N][,error], xselftest[,N][,selftest], background,
        sasphy[,reset], sataphy[,reset], scttemp[sts,hist],
        scttempint,N[,p], scterc[,N,M][,p|reset], devstat[,N], defects[,N],
        ssd, gplog,N[,RANGE], smartlog,N[,RANGE], nvmelog,N,SIZE
        tapedevstat, zdevstat, envrep, farm

  -v N,OPTION , --vendorattribute=N,OPTION                            (ATA)
        为厂商属性N设置显示选项(详见手册页)

  -F TYPE, --firmwarebug=TYPE                                         (ATA)
        使用固件漏洞的解决方法:
        none, nologdir, samsung, samsung2, samsung3, xerrorlba, swapid

  -P TYPE, --presets=TYPE                                             (ATA)
        驱动器特定的预设:use, ignore, show, showall

  -B [+]FILE, --drivedb=[+]FILE                                       (ATA)
        从FILE读取并替换[添加]驱动器数据库
        [默认路径为 +C:/Program Files/smartmontools/bin/drivedb-add.h
         和    C:/Program Files/smartmontools/bin/drivedb.h]

============================================ 设备自检选项 =====

  -t TEST, --test=TEST
        运行测试。TEST:offline, short, long, conveyance, force, vendor,N,
                        select,M-N, pending,N, afterselect,[on|off]

  -C, --captive
        在自检过程中启用强制模式(与-t一起使用)

  -X, --abort
        中止任何非强制测试

=================================================== smartctl 示例 =====

  smartctl -a /dev/sda                       (打印所有SMART信息)

  smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda
                                              (启用第一块磁盘的SMART)

  smartctl -t long /dev/sda              (执行扩展磁盘自检)

  smartctl --attributes --log=selftest --quietmode=errorsonly /dev/sda
                                      (打印自检与属性错误信息)
  smartctl -a /dev/sda
             (打印物理驱动器0上的所有信息)
  smartctl -a /dev/pd3
             (打印物理驱动器3上的所有信息)
  smartctl -a /dev/tape1
             (打印SCSI磁带驱动器1上的所有信息)
  smartctl -A /dev/hdb,3
                (打印3ware 9000 RAID中物理驱动器3的属性)
  smartctl -A /dev/tw_cli/c0/p1
            (打印3ware控制器0,端口1的属性,使用tw_cli)
  smartctl --all --device=areca,3/1 /dev/arcmsr0
           (打印1号Areca RAID控制器上3号ATA磁盘的所有SMART信息)

  ATA SMART访问方法和顺序可以通过设备名称后的修饰符来指定:
  /dev/hdX:[saicm],其中
  's':SMART_* IOCTLs, 'a':IOCTL_ATA_PASS_THROUGH,
  'i':IOCTL_IDE_PASS_THROUGH,'f':IOCTL_STORAGE_*,
  'm':IOCTL_SCSI_MINIPORT_*。
  该系统的默认值是 /dev/sdX:pasifm

  • Get-PhysicalDisk:查看硬盘的基本状态和 SMART 信息
  • Get-WmiObject:获取硬盘的更多 WMI 数据,包括健康状态和错误信息
  • Smartmontools:通过安装第三方工具,获取详细的 SMART 数据

通过这些 PowerShell 命令,您可以查看磁盘的健康状态、温度、工作小时数等信息。如果需要更深入的 SMART 数据分析,建议使用专门的工具(如 Smartmontools)。


smartctl.exe 命令及其常用参数的表格化展示,包括每个参数的简要描述和示例:

命令/参数 描述 示例
-h--help--usage 显示帮助信息并退出 smartctl -h
-V--version--copyright--license 显示版本、版权和许可证信息并退出 smartctl --version
-i--info 显示设备的身份信息 smartctl -i /dev/sda
--identify[=[w][nvb]] 显示IDENTIFY DEVICE数据 smartctl --identify /dev/sda
-g NAME, --get=NAME 获取设备设置(如:aam, apm, wcache等) smartctl -g wcache /dev/sda
-a--all 显示设备的所有SMART信息 smartctl -a /dev/sda
-x--xall 显示设备的所有信息(更详细) smartctl -x /dev/sda
--scan 扫描设备 smartctl --scan
--scan-open 扫描设备并尝试打开每个设备 smartctl --scan-open
-j--json[=cgiosuvy] 以JSON或YAML格式输出 smartctl -j /dev/sda
-q TYPE, --quietmode=TYPE 设置静默模式(例如:errorsonly, silent等) smartctl -q errorsonly /dev/sda
-d TYPE, --device=TYPE 指定设备类型(如:ata, scsi, nvme等) smartctl -d ata /dev/sda
-T TYPE, --tolerance=TYPE 设置容差模式(如:normal, conservative等) smartctl -T normal /dev/sda
-b TYPE, --badsum=TYPE 设置坏校验和处理方式(如:warn, exit等) smartctl -b exit /dev/sda
-r TYPE, --report=TYPE 设置报告类型(详见手册页) smartctl -r selftest /dev/sda
-s VALUE, --smart=VALUE 启用/禁用设备上的SMART功能(on/off) smartctl --smart=on /dev/sda
-o VALUE, --offlineauto=VALUE 启用/禁用设备上的自动离线测试(on/off) smartctl -o on /dev/sda
-S VALUE, --saveauto=VALUE 启用/禁用设备上的属性自动保存(on/off) smartctl -S on /dev/sda
-t TEST, --test=TEST 运行指定的磁盘测试(如:offline, short, long等) smartctl -t long /dev/sda
-C, --captive 在自检过程中启用强制模式(与 -t 一起使用) smartctl -t long -C /dev/sda
-X, --abort 中止任何非强制测试 smartctl -X /dev/sda
-H, --health 显示设备的SMART健康状态 smartctl -H /dev/sda
-c, --capabilities 显示设备的SMART能力 smartctl -c /dev/sda
-A, --attributes 显示设备的SMART厂商特定属性及其值 smartctl -A /dev/sda
-f FORMAT, --format=FORMAT 设置属性输出格式(如:old, brief, hex等) smartctl -f brief /dev/sda
-l TYPE, --log=TYPE 显示设备日志(如:error, selftest等) smartctl -l error /dev/sda
-v N,OPTION , --vendorattribute=N,OPTION 为厂商属性设置显示选项 smartctl -v 1,attr /dev/sda
-F TYPE, --firmwarebug=TYPE 使用固件漏洞解决方法(如:none, samsung等) smartctl -F samsung /dev/sda
-P TYPE, --presets=TYPE 驱动器特定的预设 smartctl -P use /dev/sda
-B [+]FILE, --drivedb=[+]FILE 从指定文件读取并替换[添加]驱动器数据库 smartctl -B drivedb.h /dev/sda

示例:

  • 显示所有SMART信息
    smartctl -a /dev/sda

  • 启用SMART功能并自动保存属性
    smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda

  • 运行长时间自检
    smartctl -t long /dev/sda

  • 显示设备健康状态
    smartctl -H /dev/sda

该表格总结了 smartctl.exe 的常用命令参数及其用法,帮助你快速理解并运用该工具。

更多 smartctl 命令示例:

1. 查看设备详细信息

  • 命令smartctl -i /dev/sda
  • 说明:显示设备的身份信息,包括型号、序列号、固件版本等。

    此表格包含了硬件设备的详细信息,包括型号、固件版本、容量、命名空间等参数。

2. 获取设备的SMART属性(包括厂商特定的属性)

  • 命令smartctl -A /dev/sda
  • 说明:列出所有SMART属性及其当前值,如读取错误率、温度、开机次数等。
    项目
    临界警告 0x00
    温度 21 摄氏度
    可用备用空间 100%
    可用备用空间阈值 5%
    已使用百分比 2%
    读取数据单位 60,660,722 [31.0 TB]
    写入数据单位 16,589,573 [8.49 TB]
    主机读取命令 789,118,901
    主机写入命令 104,605,494
    控制器忙碌时间 6,472
    电源循环次数 1,410
    开机时长 12,014 小时
    不安全关机次数 176
    介质和数据完整性错误 0
    错误信息日志条目 9,677
    警告级别温度时间 0
    临界级别温度时间 0

    此表格提供了关于硬盘健康状态的详细信息,包括温度、使用情况、电源循环等重要指标。

3. 查看设备日志(错误日志)

  • 命令smartctl -l error /dev/sda
  • 说明:显示设备的错误日志,帮助识别是否存在硬盘问题。

4. 查看设备的健康状态

  • 命令smartctl -H /dev/sda
  • 说明:显示设备的健康状态(正常/警告/失败)。
     

5. 查看设备的能力(如支持的测试类型)

  • 命令smartctl -c /dev/sda
  • 说明:列出设备的SMART能力,如支持的自检类型、属性等。

6. 运行短时间自检

  • 命令smartctl -t short /dev/sda
  • 说明:运行一个快速的自检,通常几分钟完成,检测硬盘的基本健康状态。

7. 运行长时间自检

  • 命令smartctl -t long /dev/sda
  • 说明:运行全面的长时间自检,通常需要几小时完成,进行深度检查。

8. 中止测试(例如长时间自检)

  • 命令smartctl -X /dev/sda
  • 说明:立即中止所有正在进行的测试(如长时间自检)。

9. 开启或关闭SMART功能

  • 命令smartctl --smart=on /dev/sda

    smartctl --smart=off /dev/sda
  • 说明:启用或禁用SMART功能。默认情况下,硬盘上的SMART功能通常是启用的。

10. 设置设备为静默模式,仅显示错误信息

  • 命令smartctl -q errorsonly /dev/sda
  • 说明:启用静默模式,仅在出现错误时显示信息。

11. 查看设备的自检结果(包括已完成的自检测试报告)

  • 命令smartctl -l selftest /dev/sda
  • 说明:查看硬盘的自检历史,显示之前执行的所有自检结果(如是否成功、出错)。

12. 检查设备是否支持NVMe驱动

  • 命令smartctl -d nvme -i /dev/nvme0
  • 说明:检查指定的NVMe设备的SMART信息。

13. 扫描所有连接的设备

  • 命令smartctl --scan
  • 说明:扫描所有连接到系统的硬盘设备,并列出它们的信息。

14. 进行指定测试(如快速测试)

  • 命令smartctl -t short /dev/sda
  • 说明:启动一个快速的SMART自检,通常持续几分钟。

15. 执行设备健康检查并生成JSON报告

  • 命令smartctl -j /dev/sda
  • 说明:以JSON格式输出硬盘的SMART信息,适用于进一步分析或处理。

16. 设置设备的SMART警告阈值

  • 命令smartctl -s on /dev/sda
  • 说明:启用设备的SMART警告机制,启用时,当硬盘检测到问题时,会触发警报。

17. 设置温度限制警告

  • 命令smartctl -g temperature /dev/sda
  • 说明:查看或设置设备的温度警告阈值。

18. 查看或设置硬盘缓存写入策略

  • 命令smartctl -g wcache /dev/sda
  • 说明:查看或修改硬盘的写缓存策略,常用于调试写入性能。

这些示例涵盖了 smartctl 命令的多种常用功能,包括硬盘的健康状态检测、性能测试、日志查看等,可以帮助用户监控和诊断硬盘的状况。

 

posted @ 2024-07-04 02:52  suv789  阅读(3675)  评论(0)    收藏  举报