Немного провокационный заголовок, не так ли? На самом деле я не собираюсь тут приводить процедуру расчета времени жизни SSD. Хочу написать о другом. Сегодня коллега задал вопрос: “Есть ли счетчик, который помог бы определить, сколько данных записано на диск. И вообще, как определить количество данных, записанных на диск?”. Собственно тут хотел бы привести свое видение ответа, так сказать.
Как оказалось – нет в perfmon такого счетчика. Ну, нет и все тут. Вероятно, есть на то какие-то причины. Но интересующие данные, судя по всему, получить таки можно. На ответ наткнулся совсем случайно. Для того чтобы получить нужные цифры можно воспользоваться утилитой fsutil. А конкретно, командой, например fsutil fsinfo statistics g: Утилита возвращает кучу всего, и, в частности значение UserFileWriteBytes, которое, похоже, и показывает нужную информацию. Стоит отметить, что эти данные, видимо, сбрасываются при перезагрузке. Ну и в качестве тренировки написал скрипт, который парсит все это счастье и возвращает хэш-таблицу с нужными данными:
function Get-DiskStats ($diskLetter){ if (Test-Path $diskLetter) { (fsutil fsinfo statistics $diskLetter) | ` where {$_.length -ne 0} | ` %{$_.replace(" ","")} | ` % {$_ -match "(?\w+):(? [0-9]{1,})"; $matches} | ` % {$ret = @{}} {$ret["$($_.name)"]=$_.value} return $ret} else {Write-Error "There is no disk $diskLetter"; return $null} } Get-DiskStats g:
Подозреваю правда, что информацию можно получить так же при помощи ETW. Вот только как – не углублялся пока. PS. Некоторые изменения к плану. Если вы хотите собрать данные с работающего сервера за некоторый промежуток времени - вы можете поступить следующим образом.
1. Получить статистику на начальный момент времени:
Get-DiskStats c: | Export-Clixml c:\Files\disk.xmlЭтим самым вы сохраните начальные данные в файл xml.
2. На конечный момент можно поступить следующим образом:
$old = Import-Clixml c:\Files\disk.xml $new = Get-DiskStats c: $old.Keys | ? {$old[$_] -ne $new[$_]} | % {$obj = New-Object -TypeName psobject; $obj | Add-Member -MemberType NoteProperty -Name name -Value $_; $obj | Add-Member -MemberType NoteProperty -Name oldValue -Value $old[$_]; $obj | Add-Member -MemberType NoteProperty -Name newValue -Value $new[$_]; $obj} ` | sort name | ft -AutoSizeЧто вернет вам таблицу со сравнениями старых и новых значений. Вот, примерно такую:
name oldValue newValue ---- -------- -------- BitmapReadBytes 12632064 12673024 BitmapReads 534 544 BitmapWriteBytes 134942720 143458304 BitmapWrites 28034 29936 LogFileWriteBytes 1601335296 1709424640 LogFileWrites 214884 230697
1 комментарий:
Не совсем удобно считать между перезагрузками если это рабочий сервер. Должен быть вариант сброса счетчиков без перезапуска системы.
Отправить комментарий