PowerShell для управления хранилищем и файловой системой (часть 3)

Опубликовано: 18 Марта, 2023

  • PowerShell для управления хранилищем и файловой системой (часть 2)
  • PowerShell для управления хранилищем и файловой системой (часть 4)
  • PowerShell для управления хранилищем и файловой системой (часть 5)
  • PowerShell для управления хранилищем и файловой системой (часть 6)
  • PowerShell для управления хранилищем и файловой системой (часть 7)
  • PowerShell для управления хранилищем и файловой системой (часть 11)

В предыдущей статье я объяснил, что прежде чем мы сможем разработать сценарий PowerShell для мониторинга нашего хранилища, нам нужно выяснить, каковы наши цели. Это само собой разумеется, но нам также необходимо определить возможности PowerShell. В противном случае мы можем оказаться в ситуации, когда наши цели не совпадают с тем, что реально может быть достигнуто с помощью PowerShell.

Итак, какие полезные вещи мы можем сделать с помощью нашего скрипта? Что ж, мы могли бы контролировать емкость хранилища, чтобы убедиться, что у нас не заканчивается место. Также было бы неплохо убедиться, что диск исправен. Наконец, рекомендуется убедиться, что с диском нет проблем, которые могут сигнализировать о надвигающемся сбое.

Конечно, это поднимает вопрос о том, является ли диск здоровым и свободным от проблем одним и тем же. Хотите верьте, хотите нет, но у диска могут быть проблемы, но он все равно может быть указан как исправный. Состояние диска определяется на уровне ОС, а не на уровне оборудования. Чтобы определить истинное состояние диска, нам нужно проверить работоспособность, о которой сообщает ОС, но нам также необходимо выполнить проверку оборудования для поиска проблем.

Если мы собираемся создать инструмент PowerShell для мониторинга работоспособности хранилища, нам нужно будет сделать три вещи. Во-первых, мы должны настроить инструмент для проверки состояния диска. Другими словами, мы должны решить, какие критерии необходимо оценивать, а затем создать скрипт для проверки диска на основе этих критериев.

Второе, что нам нужно будет сделать, это запланировать запуск сценария на периодической основе. Ручной запуск скрипта для проверки работоспособности всех дисков сервера подходит для разовой ситуации, но наш инструмент был бы гораздо полезнее в качестве решения для автоматизированного мониторинга. К счастью, это относительно легко сделать.

Наконец, нам нужно выдавать оповещения в случае, если состояние диска не такое, каким должно быть. Легче сказать, чем сделать, но Windows дает нам все, что нам нужно.

Итак, давайте начнем. Для простоты мы начнем с создания скрипта, работающего на одном компьютере. Как только у нас будет работающий скрипт, мы расширим его, чтобы он мог контролировать удаленные серверы.

Я думаю, что важнее всего проверить работоспособность хранилища, так что давайте начнем с него. Для наших целей я хочу собрать скрипт для проверки:

  • Состояние диска с точки зрения ОС
  • Ошибки чтения (всего)
  • Ошибки записи (всего)
  • Температура
  • СМАРТ-статус

Если вам интересно, я не забыл о проверках емкости. Просто проверки емкости необходимо выполнять на уровне тома, а не на уровне диска (один диск может содержать несколько томов). Поэтому с проверками емкости хочу разобраться отдельно.

Итак, что касается состояния диска, есть много других вещей, которые мы потенциально могли бы проверить, если бы захотели. Например, мы разрабатываем сценарий, который различает исправленные и неисправленные ошибки чтения. Поскольку я создаю этот инструмент как образовательное упражнение, а не как коммерческий продукт, я буду придерживаться критериев, перечисленных выше.

Итак, возникает следующий вопрос: как мы можем получить эту информацию? Легко получить все, кроме SMART-статуса диска. На самом деле, если бы я опустил статус SMART, я мог бы получить все, что мне нужно, в две строки кода. Тем не менее, важно знать, если диск вот-вот выйдет из строя, поэтому нам действительно следует проверять статус SMART.

Получить информацию о статусе SMART не так уж сложно. Однако эта информация должна быть извлечена с использованием метода, отличного от используемого для получения другой информации. Это не имеет большого значения, если в системе только один диск, но если в системе несколько дисков, все становится сложнее. Причина этого в том, что два разных метода, которые нам нужно будет использовать, имеют совершенно разные способы идентификации дисков. Диски можно идентифицировать по понятному имени, номеру, уникальному идентификатору или имени экземпляра.

На самом деле я немного забегаю вперед. Прежде чем я слишком углублюсь в обсуждение идентификации диска, давайте посмотрим, как получить информацию о работоспособности для одного диска. Сначала я буду работать со статусом SMART отдельно, но позже мы объединим его в единый скрипт.

Первое, что нам нужно сделать, это получить список наших физических дисков. Вы можете сделать это, введя команду Get-PhysicalDisk. Как видно на рис. A, эта команда выводит список всех дисков системы и их состояние работоспособности.

Изображение 4707
Рисунок A: Команда Get-PhysicalDisk выводит список всех дисков в системе.

Если бы мы хотели изучить отдельный диск более подробно, мы могли бы добавить параметр –FriendlyName и понятное имя диска. Например, мы можем ввести:

Get-PhysicalDisk –FriendlyName PhysicalDisk4

Сейчас мы будем придерживаться коллективного изучения всех дисков. Имея это в виду, мы можем получить большую часть информации, которая была указана ранее, углубившись в счетчик надежности хранилища. Это удивительно легко сделать. Вы можете получить всю ранее перечисленную информацию (кроме SMART-статуса диска), используя следующую команду:

Получить-физический диск | Select-Object FriendlyName, HealthStatus

Получить-физический диск | Get-StorageReliabilityCounter| Select-Object ReadErrorsTotal, WriteErrorsTotal, Температура

Вы можете увидеть, как это выглядит на рисунке B.

Изображение 4708
Рисунок B: Вот информация о работоспособности дисков.

Глядя на рисунок выше, вы, вероятно, заметите две вещи. Прежде всего, один из дисков выдает много ошибок чтения. Во-вторых, нет простого способа определить, на каком диске возникла проблема. Именно это я имел в виду, когда говорил, что нам придется проделать некоторую работу в отношении идентификации дисков. Я доберусь до этого в следующей статье. Тем временем, однако, у нас есть диск, с которым возникли некоторые проблемы, поэтому нам лучше проверить статус SMART диска, мы можем сделать это с помощью этой команды:

(Get-WmiObject -namespace rootwmi –class MSStorageDriver_FailurePredictStatus | SelectInstanceName, PredictFailure, Reason)

Как вы можете видеть на рисунке C, SMART в настоящее время не предсказывает сбой диска, так что это, безусловно, хорошая новость.

Изображение 4709
Рисунок C: SMART не предсказывает неизбежный сбой диска.

Последнее, на что я хочу обратить внимание на приведенном выше рисунке, это то, что диски идентифицируются еще одним способом. Не существует действительно последовательного метода идентификации дисков. Таким образом, нам придется творчески подойти к тому, как мы используем эти команды в одном скрипте.

Вывод

В этой статье я показал вам некоторые приемы получения базовой информации о состоянии диска. В следующей статье мы можем начать работу над созданием сценария для мониторинга работоспособности хранилища.

  • PowerShell для управления хранилищем и файловой системой (часть 2)
  • PowerShell для управления хранилищем и файловой системой (часть 4)
  • PowerShell для управления хранилищем и файловой системой (часть 5)
  • PowerShell для управления хранилищем и файловой системой (часть 6)
  • PowerShell для управления хранилищем и файловой системой (часть 7)
  • PowerShell для управления хранилищем и файловой системой (часть 11)