Get-PhysicalDisk (Storage) | Microsoft Learn

Get-Disk (Storage) | Microsoft Learn

Get-DiskImage (Storage) | Microsoft Learn

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

特性Get-PhysicalDiskGet-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 diskGet-Disk
选择磁盘select disk <编号>Select-Disk <编号>
列出所有分区list partitionGet-Partition
选择分区select partition <编号>Select-Partition <编号>
格式化磁盘formatFormat-Volume
创建分区create partition <类型> size=<大小>New-Partition -Size <大小> -Type <类型>
删除分区delete partitionRemove-Partition
查看磁盘信息detail disk`Get-Disk
查看分区信息detail partitionGet-Partition -DiskNumber <编号>
清除磁盘cleanClear-Disk -RemoveData
扩展分区extendResize-Partition -Size <新大小>
设置磁盘为活动磁盘activeSet-Disk -IsOffline $false
设置分区为活动分区activeSet-Partition -IsActive $true
分配驱动器号assign letter=<盘符>Set-Partition -DriveLetter <盘符>
删除驱动器号remove letter=<盘符>Clear-Partition -DriveLetter <盘符>
退出 diskpartexitExit

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

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

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

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

更多关于 diskpartPowerShell 命令的对比:

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

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

继续补充的 diskpartPowerShell 命令对比:

操作diskpart 命令PowerShell 命令
显示磁盘的详细信息detail diskGet-Disk -Number <磁盘编号>
查看磁盘空间使用情况list disk`Get-Disk
列出所有挂载的卷list volumeGet-Volume
显示卷的详细信息detail volumeGet-Volume -DriveLetter <盘符>
删除卷delete volumeRemove-Volume -DriveLetter <盘符>
扩展卷extendResize-Partition -DriveLetter <盘符> -Size <新大小>
收缩卷shrinkResize-Partition -DriveLetter <盘符> -Size <新大小>
删除磁盘delete diskRemove-Disk -Number <磁盘编号>
重命名卷label <卷号> <新标签>Set-Volume -DriveLetter <盘符> -NewFileSystemLabel <新标签>
清除磁盘的所有数据cleanClear-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 partitionGet-Partition -DiskNumber <磁盘编号>
查看磁盘的状态detail disk`Get-PhysicalDisk
挂载虚拟磁盘 (VHD)attach vdiskMount-VHD -Path <虚拟磁盘路径>
卸载虚拟磁盘 (VHD)detach vdiskDismount-VHD -Path <虚拟磁盘路径>
创建磁盘阵列 (RAID)create volume raidNew-Volume -RAIDLevel <RAID类型>
检查磁盘是否损坏list disk`Get-PhysicalDisk
磁盘迁移到其他存储无直接命令Move-Disk(第三方工具或 Windows 存储迁移)
将分区转换为动态磁盘convert dynamicSet-Disk -Number <磁盘编号> -IsDynamic $true
将动态磁盘转换为基础磁盘convert basicSet-Disk -Number <磁盘编号> -IsDynamic $false
设置磁盘离线offline diskSet-Disk -Number <磁盘编号> -IsOffline $true
设置磁盘在线online diskSet-Disk -Number <磁盘编号> -IsOffline $false
检查磁盘是否分配文件系统list diskGet-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-DiskGet-Partition 命令来获取磁盘和分区信息。
    • 使用 New-PartitionRemove-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 "[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:

  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]

 显示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 命令的多种常用功能,包括硬盘的健康状态检测、性能测试、日志查看等,可以帮助用户监控和诊断硬盘的状况。

标签: none