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
}

标签: lsi, windows, hdd, standby, 硬盘休眠, 扩展卡, hba, hba卡

添加新评论