yurikhan: (Default)
[personal profile] yurikhan

Недавно я поменял домашний сервер. Раньше на антресоли лежал обычный десктоп, жужжал вентиляторами и жрал электричество. А теперь стоит Banana Pi R1.

Что хорошо: электричества потребляет всего ничего. На борту двухъядерный гигагерцовый ARM, гигабайт памяти и встроенный свитч о пяти портах наружу и одном на матплату. И 2.5-дюймовый жёсткий диск.

Что плохо: подсистема питания сделана не очень надёжно, и от этого иногда винчестеру перестаёт хватать питания. Он останавливается, потом пытается снова раскрутиться, потом снова останавливается. И так пока не придёшь и не передёрнешь ему питание.

Ещё может не повезти и при включении он пойдёт проверять файловые системы. По умолчанию проверка запускается в режиме «проверять, но не чинить». Чтобы чинилось автоматически, нужно прописать в /etc/default/rcS строчку FSCKFIX=yes.

А ещё хочется видеть прогресс загрузки. Монитор каждый раз не натаскаешься, а надо знать, когда он запустил проверку диска, когда закончил, когда начали подниматься сервисы, и когда загрузка закончена.

Может быть, потом я соберусь докупить подходящий мелкий мониторчик, но это потом. А сейчас у нас есть один светодиод, контролируемый (под ядром 4.4.14-bananian) псевдофайлом /sys/devices/platform/leds/leds/bananapi:green:usr/trigger. Собственно, остаётся написать инит-скриптов, которые будут запускаться в правильные моменты и переключать режим светодиода.

Фаза загрузки Условия Триггер Поведение
Загрузчик (U-boot)
Загрузка ядра
none Выключен
Мигает два раза светодиодами портов свитча
Начало runlevel’а S
Default-Start: S
timer Мигает с частотой 1 Гц
Начало проверки ФС
Should-Start: hdparm
Default-Start: S
X-Start-Before: checkroot
heartbeat Две вспышки, пауза, …
Конец проверки ФС
Should-Start: checkfs
Default-Start: S
timer Мигает с частотой 1 Гц
Начало загрузки сервисов
Default-Start: 2 3 4 5
default-on Светится ровно
Система загружена
Required-Start: $all
Default-Start: 2 3 4 5
none Выключен

Чтобы работал триггер timer, нужно загрузить модуль ядра ledtrig-timer. Причём обычный способ (через /etc/modules) работает позже, чем мне это нужно, поэтому ручками, командой modprobe ledtrig-timer.

В /etc/init.d складываем пять инит-скриптов по следующему шаблону:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          название
# условия
# Short-Description: Blink Banana Pi green LED at start of bootup
### END INIT INFO

case "$1" in
start|"")
    echo триггер >/sys/devices/platform/leds/leds/bananapi:green:usr/trigger
    ;;
restart|reload|force-reload)
    echo "Error: argument '$1' not supported" >&2
    exit 3
    ;;
stop)
    # No-op
    ;;
status)
    exit 3
    ;;
*)
    echo "Usage: название.sh [start|stop]" >&2
    exit 3
    ;;
esac

:

Далее выполняем для них всех update-rc.d название.sh defaults, и готово.

From:
Anonymous (will be screened)
OpenID (will be screened if not validated)
Identity URL: 
User
Account name:
Password:
If you don't have an account you can create one now.
Subject:
HTML doesn't work in the subject.

Message:

 
Notice: This account is set to log the IP addresses of everyone who comments.
Links will be displayed as unclickable URLs to help prevent spam.

Profile

yurikhan: (Default)
Yuri Khan

June 2017

S M T W T F S
    123
45678910
1112 1314151617
18192021222324
252627282930 

Links

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 2017-07-23 18:50
Powered by Dreamwidth Studios