Некоторые утилиты выдают время непрерывной работы диска в годах, днях и часах. Но штатный smartctl - только в часах, к тому же среди остальной информации.
Попробуем сочинить команду для получения подобного результата.
sudo smartctl --all /dev/sdX|grep -A10 "ID#"|grep "^ \{0,2\}9"|awk '{print $10}'
- smartctl выдает длинную портянку атрибутов и прочих полезностей. Нам нужен атрибут №9: "power on hours" или "power on time" или как-то еще. Название не стандартизировано, а вот номер всегда одинаков.
- для этого мы находим заголовок таблицы атрибутов и берем первые 10 строк этой таблицы. 10 - чтобы с запасом. А таблицу ищем, чтобы не взять в работу что-то не то, которое будет выглядеть похоже на искомое.
- в этих 10 строках ищем ту, которая начинается с девятки, перед которой могут быть, а могут и не быть несколько пробелов.
- awk понимает, что если между осмысленными данными несколько разделителей-пробелов подряд, то их надо считать одним разделителем. В десятом поле строки, полученной в п.п. 1-3 содержится количество отработанных диском часов.
Например:
$ sudo smartctl --all /dev/sdb|grep -A10 "ID#"|grep "^ \{0,2\}9"|awk '{print $10}'
25457
Без awk строка выглядит так:
9 Power_On_Hours 0x0032 071 071 000 Old_age Always - 25457
$ echo $(( workedHours * 100 / 24 / 36525 )) $(( (workedHours * 100 / 24 % 36525 ) /100 ))
Если взять workedHours=25457
, то на выходе получим
2 328
то есть, диск отработал 2 года и 328 дней.
Для чего лишние умножения и деления на 100? Bash умеет только целочисленную арифметику, а реальная продолжительность года 365.25 суток, как я помню. Именно из-за этой четвертушки каждый четвертый год - високосный, с одним добавочным днем. И чтобы имитировать такую арифметику, мы умножаем делимое и один из делителей на 100. Количество часов в сутках суть константа, ее умножать не надо.
Поскольку во втором выражении проделано то же самое, то чтобы остаток от деления на длину года был похож на правду, его надо разделить на 100.
Собственно, всё. Наслаждайтесь.