Немного провокационный заголовок, не так ли? На самом деле я не собираюсь тут приводить процедуру расчета времени жизни 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 комментарий:
Не совсем удобно считать между перезагрузками если это рабочий сервер. Должен быть вариант сброса счетчиков без перезапуска системы.
Отправить комментарий