Как я S.M.A.R.T. на Alpine Linux настроил и перестал бояться за диски
Я перепробовал кучу способов мониторить диски. Nagios, Zabbix, даже какой-то скрипт на Python самописный. Но всё оказалось либо слишком тяжеловесным, либо требовало отдельного сервера. А Alpine Linux со smartmontools — это буквально пять минут, и ты спишь спокойно.
Всё началось с того, что у меня на сервере сдох диск. Просто взял и умер. Без предупреждения, без синих экранов, без ошибок в логах. Просто пропал из системы. Клиент звонит, орёт, а я сижу и смотрю на пустую директорию. Бэкап был недельной давности. С тех пор я параноик.
S.M.A.R.T. — это штука, встроенная в каждый современный винчестер. Меряет температуру, считает ошибки. Производители закладывают эти датчики, но мало кто их использует. А зря. Это как купить машину с кучей датчиков и выкрутить все лампочки.
Alpine Linux я полюбил за то, что он жрёт 50 мегабайт оперативки. У меня валялся старый Atom-неттоп — Ubuntu на нём еле дышала. Alpine встал как родной, работает полгода без перезагрузки. Идеальный сторож для дисков.
Скачал ISO, записал на флешку:
dd if=alpine-standard-3.21.iso of=/dev/sdb bs=4M status=progress && sync
Только проверь, что /dev/sdb — это флешка, а не системный диск. Я однажды залил образ поверх работающей системы. Хорошо, тестовая была. Теперь всегда lsblk делаю перед записью.
Загрузился, ввёл setup-alpine, выбрал минимальную установку. Всё. Ставлю smartmontools:
apk add smartmontools sysfsutils
Проверяю, видит ли система диски:
smartctl --scan
Если пусто — либо диск древний, либо модуль ядра не подгрузился. У меня было — пришлось modprobe ahci добавить в автозагрузку. Час убил на эту мелочь.
Запускаю короткий тест:
smartctl -t short /dev/sda
Через пару минут смотрю результат:
smartctl -l selftest /dev/sda
Если Completed without error — выдохнул. Если нет — проблемы.
Длинный тест гоняю раз в месяц. На 4-терабайтном WD Red он шёл почти пять часов. Я думал, Alpine завис, проверял нагрузку, перезагружал — а это просто тест такой. Длинный тест ловит битые сектора, которые короткий пропускает. Если данные важны — терпи.
Автоматизировал через cron:
0 3 * * * root smartctl -t short /dev/sda && smartctl -l selftest /dev/sda >> /var/log/smart.log
Каждую ночь в три часа система проверяет диск. Утром открываю лог — и вижу. Если FAILED — бегом бекап.
Главный показатель — Reallocated Sectors Count. Если растёт — диск умирает. У меня был WD Red: за месяц с 0 до 200, через неделю лёг. Данные слил, нервы потрепал. Pending Sectors — то же самое, только диск ещё держится. Температура выше 50 градусов — ставь вентилятор. Я поставил — и Reallocated Sectors замер.
Пробовал smartd для писем, но он спамил. Остановился на cron + лог. Проще.
Alpine крутится месяцами, жрёт копейки. Я проверяю логи каждое утро. Звучит как паранойя? Когда у тебя уже сдох диск без предупреждения — хочется подстелить соломку. Не жди, поставь. Десять минут работы.