LSI 9212-4i IT Windows下硬盘休眠迫真解决方案
说起来当初买这张卡还是因为主板的 SATA 口不够,加上那之前买的一块 SATA 扩展卡三天两头掉盘。
卡日常使用起来很稳定没出过什么问题,只是在 CrystalDiskInfo 看不到 SMART 信息,使用 DiskGenius 可以正常看到。
有找到一篇讲怎么修改驱动让 LSI 9211 在 Windows 下支持休眠的文章,但是改驱动需要重启关闭强制签名,而且网上的驱动都是10多年前用于Win7的版本,还没有Win10自带的新。
偶然在 stackoverflow 看到有人说可以用 smartmontools 修改磁盘状态,在机器上测试了一下立刻休眠是可以生效的,但是倒计时不好用。
既然倒计时不好用,那就手动做个倒计时就好了。
以下脚本使用任务计划程序以管理员权限每小时执行一次,注意 smartmontools 和 log 路径。
Get-PhysicalDisk -Manufacturer ATA | % {
Start-Job -ScriptBlock {
Param($_)
(&"C:\Program Files\smartmontools\bin\smartctl.exe" -n idle /dev/pd$($_.DeviceId) | Out-String) -match 'Device is in (.*) mode' | Out-Null
if($matches[1] -ne 'STANDBY'){
$counter = (Get-Counter -ListSet physicaldisk).PathsWithInstances | Select-String "\\PhysicalDisk\($($_.DeviceId)( .*)?\)\\% Disk Time"
$maximum = (Get-Counter -Counter $counter -SampleInterval 1 -MaxSamples 3000 | % { $_.CounterSamples.CookedValue } | Measure-Object -Maximum).Maximum
if($maximum -eq 0){
$return = &"C:\Program Files\smartmontools\bin\smartctl.exe" --set=standby,now -n standby /dev/pd$($_.DeviceId) 2>&1
Write-Output "$(Get-Date) Num:$($_.DeviceId) Name:$($_.FriendlyName) SN:$($_.SerialNumber) Max:$maximum $return" >> "F:\smart-$($_.DeviceId).log"
}else{
Write-Output "$(Get-Date) Num:$($_.DeviceId) Name:$($_.FriendlyName) SN:$($_.SerialNumber) Max:$maximum No Change." >> "F:\smart-$($_.DeviceId).log"
}
}else{
Write-Output "$(Get-Date) Num:$($_.DeviceId) Name:$($_.FriendlyName) SN:$($_.SerialNumber) Current STANDBY." >> "F:\smart-$($_.DeviceId).log"
}
} -ArgumentList $_
}
Get-Job | Wait-Job
使用以下脚本监视硬盘休眠状态,5秒刷新一次。
while($true){
$aaa = (Get-PhysicalDisk | % {
(&"C:\Program Files\smartmontools\bin\smartctl.exe" -n idle /dev/pd$($_.DeviceId) | Out-String) -match 'Device is in (.*) mode' | Out-Null
[PSCustomObject]@{
'Name' = $_.FriendlyName
'SN' = $_.SerialNumber
'Status' = $matches[1]
'OperationalStatus' = $_.OperationalStatus
'HealthStatus' = $_.HealthStatus
}
} | Format-Table)
clear
$aaa
Start-Sleep -Seconds 5
}