Как извлечь сырое значение из smartctl в Linux

Вопрос или проблема

Пытаюсь написать скрипт в Unraid, используя значения SMART жёсткого диска. Как мне разобрать RAW_VALUE датчика? В моём случае это 45.

Я могу получить все конкретные данные сенсора, используя:

smartctl -A /dev/sdg | grep Airflow_Temperature_Cel

Вывод:

ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE

190 Airflow_Temperature_Cel 0x0032 055 051 000 Old_age Always - 45

Я просто пытаюсь получить значение RAW_VALUE равное 45, чтобы записать его в переменную. Буду благодарен за помощь.

Конечно, я понял это сразу после того, как опубликовал. На случай, если кто-то интересуется, вот что я сделал.

smartctl -A /dev/sdg | grep Airflow_Temperature_Cel | grep -o '...$'

Ответ или решение

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

Предполагая, что файл устройства – это /dev/sdg, вот общая команда:

RAW_VALUE=$(smartctl -A /dev/sdg | grep Airflow_Temperature_Cel | awk '{print $NF}')

Объяснение команды:

  1. smartctl -A /dev/sdg: Эта команда выводит все атрибуты SMART для указанного устройства.
  2. grep Airflow_Temperature_Cel: Мы ищем строку, которая содержит информацию о температуре воздуха.
  3. awk '{print $NF}': awk берет последнюю колонку строки, которая соответствует RAW_VALUE.

Пример использования:

Если вы хотите вывести значение RAW_VALUE и использовать его в скрипте, вы можете добавить следующую строку кода:

#!/bin/bash

# Получаем значение RAW_VALUE для Airflow Temperature
RAW_VALUE=$(smartctl -A /dev/sdg | grep Airflow_Temperature_Cel | awk '{print $NF}')

# Выводим результат
echo "Значение RAW_VALUE температуры воздуха: $RAW_VALUE"

Альтернативный способ:

Если вы хотите использовать ваш первоначальный подход с использованием grep и вырезать последние три символа строки, вы можете сделать следующее:

RAW_VALUE=$(smartctl -A /dev/sdg | grep Airflow_Temperature_Cel | grep -o '[0-9]*$')

Здесь grep -o '[0-9]*$' находит последние цифровые символы в строке.

Заключение

Теперь вы имеете два способа извлечения значения RAW_VALUE для "Airflow_Temperature_Cel" из вывода smartctl. Вы можете использовать тот, который наилучшим образом соответствует вашим требованиям. Этот метод легко интегрировать в сценарии и позволяет эффективно автоматизировать мониторинг состояния HDD в Unraid.

Оцените материал
Добавить комментарий

Капча загружается...