使用 New-Partition 和 Remove-Partition 来创建和删除分区。 使用 Format-Volume 格式化分区。
Get-PhysicalDisk (Storage) | Microsoft Learn
Get-Disk (Storage) | Microsoft Learn
Get-DiskImage (Storage) | Microsoft Learn
Get-PhysicalDisk
和 Get-Disk
命令的对比,以表格形式呈现:
特性 | Get-PhysicalDisk | Get-Disk |
---|---|---|
命令用途 | 获取物理磁盘的信息。 | 获取磁盘(包括物理磁盘和虚拟磁盘)信息。 |
返回内容 | 仅返回物理磁盘(如硬盘、固态硬盘)信息。 | 返回所有磁盘的信息,包括物理磁盘、虚拟磁盘、虚拟硬盘(VHD/VHDX)。 |
显示的信息 | 显示磁盘的状态、型号、制造商、容量、健康状况等。 | 显示磁盘的状态、型号、大小、分区、磁盘类型(如基本磁盘、动态磁盘)等。 |
主要用途 | 主要用于查看物理磁盘硬件的信息。 | 用于查看所有磁盘的详细信息,可以用于磁盘的管理和操作。 |
支持的参数 | -FriendlyName , -OperationalStatus , -HealthStatus , -Size , 等 | -Number , -FriendlyName , -IsOffline , -PartitionStyle , 等 |
支持的操作 | 主要查看和监控物理磁盘的状态和健康情况。 | 支持更多操作,如设置磁盘为离线、在线,修改磁盘分区等。 |
返回的磁盘类型 | 仅返回物理磁盘。 | 返回所有类型的磁盘,包括物理磁盘、虚拟磁盘等。 |
是否支持虚拟磁盘 | 不支持虚拟磁盘(VHD/VHDX)。 | 支持虚拟磁盘(VHD/VHDX)。 |
常见用途示例 | Get-PhysicalDisk 用于检查物理磁盘的健康状态和型号。 | Get-Disk 用于查看系统中所有磁盘的详细信息,包括磁盘状态和分区结构。 |
主要区别:
- 磁盘类型:
Get-PhysicalDisk
只显示物理磁盘的信息,而Get-Disk
返回包括虚拟磁盘在内的所有磁盘信息。 - 操作支持:
Get-Disk
提供更多操作选项(如磁盘分区管理、磁盘上线/离线等),Get-PhysicalDisk
主要用于查看物理磁盘的健康状态和硬件信息。 - 虚拟磁盘支持:
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
命令,且它可以与更多脚本和自动化工具集成。
继续补充一些 diskpart
与 PowerShell 命令的对比:
操作 | 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 提供了一种更强大、灵活的方式来管理磁盘和卷。它的命令支持更复杂的操作,允许更细致地控制磁盘属性、分区和卷,且通过自动化脚本可以更方便地进行批量处理。
更多关于 diskpart
和 PowerShell 命令的对比:
操作 | 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 提供了更多的细节选项和控制,能更精准地处理磁盘管理任务。
继续补充的 diskpart
和 PowerShell 命令对比:
操作 | 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 是一个强大的命令行实用程序,用于管理磁盘分区。你可以使用它来创建、删除、格式化分区,以及更改分区属性。
打开 Diskpart:
- 打开命令提示符(Command Prompt)或者 PowerShell。
- 输入
diskpart
进入 Diskpart 命令行环境。
常用的 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 或者命令行工具来执行特定的分区管理操作:
PowerShell:
- 使用
Get-Disk
和Get-Partition
命令来获取磁盘和分区信息。 - 使用
New-Partition
和Remove-Partition
来创建和删除分区。 - 使用
Format-Volume
格式化分区。
PowerShell 提供了更灵活的脚本化和自动化选项,适合批量操作和管理。
- 使用
命令行工具:
diskpart
是最基本和强大的磁盘分区命令行工具。diskmgmt.msc
可以直接打开磁盘管理界面,提供图形化操作选项。
注意事项:
- 在执行任何分区操作之前,请备份重要数据。磁盘分区操作可能导致数据丢失。
- 确保你有足够的权限来执行磁盘分区操作。通常需要管理员权限才能执行。
以上是一些在Windows中常用的分区管理命令和工具,可以根据需要选择合适的方法来管理和操作磁盘分区。
当使用 PowerShell 进行磁盘和分区管理时,可以结合 Get-Disk
、Get-Partition
、New-Partition
、Remove-Partition
和 Format-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 "[email protected]" -From "[email protected]" -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:
- 下载并安装 Smartmontools:Smartmontools
- 然后在 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]
显示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
命令的多种常用功能,包括硬盘的健康状态检测、性能测试、日志查看等,可以帮助用户监控和诊断硬盘的状况。