Почему этот Armbian постоянно теряет связь?
У меня есть Olimex Lime2 под управлением Armbian, без головы. На этой плате я забочусь только о SSH и MiniDLNA. Я надеюсь обойти всю конфигурацию, но один важный момент может быть /boot/armbianEnv.txt
я кладу
extraargs=acpi=off
В течение одного года мне очень трудно отлаживать проблемы с доступностью. Машина случайно перестает быть доступной через ping или ssh. Проблемы трудно отладить, потому что они, кажется, исчезают при подключении монитора или клавиатуры, хотя я не могу найти их след, когда система работает без головы. В то время как я получил контроль над проблемой, не зная как, Olimex по-прежнему перестает отвечать время от времени. На этот раз я хочу спросить, почему.
Я заметил, что Olimex прекратил предоставлять доступ DLNA в 10/25, ~2 часа дня. Я не трогал это, чтобы видеть, восстанавливается ли это (который случается иногда). На этот раз система оставалась недоступной в течение 2 дней, пока я не отключил питание.
Ниже вы можете найти ссылки на два журнала. Я был бы очень рад, если бы в них можно было указать что-нибудь подозрительное, чтобы я мог начать разрешать их.
Интересно одно: почему система решила перезагрузиться? В тот день не было отключения электроэнергии. Я ожидаю, что нормальная перезагрузка проявится в логах, не так ли?
Журналы:
/var/logs/messages
: https://pastebin.com/qgRumreB /var/logs/syslog
: https://pastebin.com/U5jpHNHm
Журналы завершены. Я только удалил строки в начале и в конце, но не между ними.
0 ответов
Хоть я и не нашел однозначного решения, но хочу поделиться тем, что пробовал. Надеюсь, это послужит вдохновением для других, у которых есть подобные проблемы.
Одна вещь, которая мне очень помогала (которая тогда была недоступна), - это переход на более новую ОС. Я использую Armbian на основе Ubuntu 18.04, и теперь журналы менее загромождены. Также улучшены некоторые мелкие детали. Если вы приземлились здесь и по-прежнему используете Armbian Stretch, вам следует обновить его.
Одной из причин частых сбоев может быть поврежденная файловая система, вызванная частыми сбоями:-(. Armbian монтирует вашу SD-карту с помощью
UUID=<uid> / ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro 0 1
Обратите внимание commit=600
, что означает, что изменения будут записываться только каждые 10 минут. Если ваш компьютер выйдет из строя, файловая система может быть повреждена. Таким образом, вы можете запуститьfsck.ext4
в файловой системе SD-карты. Чтобы вообще противодействовать проблеме, вы можете:
- запускать fsck при каждой загрузке
- опустите настройку фиксации. Моя SD-карта хорошо справляется с дополнительным стрессом.
Я думаю, что для меня проблема решена, так это перевод моего внешнего жесткого диска, подключенного через SATA, в спящий режим. Я был удивлен, что это не происходит автоматически. Теперь у меня есть следующий раздел, прикрепленный к моему/etc/hdparm.conf
:
/dev/disk/by-uuid/<uid> {
spindown_time = 60
write_cache = off
}
Это сообщает hdparm о переводе жесткого диска в режим ожидания после 5 минут бездействия. Отключение кеша записи - это мера безопасности от повторного повреждения файловой системы. Некоторые диски переупорядочивают инструкции записи BtrFS, когда этого не следует делать.
Я заметил, что некоторая нагрузка на машину помогает поддерживать систему в рабочем состоянии. К сожалению, это было правдой только до определенного момента. Однако, если подключение клавиатуры и мыши или запуск сценария помогает с перезагрузкой, вам будет с чем поработать.
Я использую следующий сценарий для регистрации информации, которая может помочь мне в случае сбоя:
#!/bin/bash
# LICENSE: GPLv3 or later
set -euo pipefail
LOGFILE=/home/mgoerner/error-detection.log
function main() {
parse_cli_args "$@"
while true
do
print_debug_information >>"$LOGFILE" 2>&1
sync
sleep 3m
done
}
function parse_cli_args() {
if [[ $# -eq 1 ]]
then
arg="$1";shift
if [[ "$arg" == "--help" || "$arg" == "-h" ]]
then
print_usage
exit
fi
LOGFILE="$arg"
elif [[ $# -gt 1 ]]
then
echo "Please provide at most one argument!" >&2
exit 1
fi
}
function print_usage() {
cat <<EOF
$0 [LOGFILE]
EOF
}
function print_debug_information() {
echo
date
uptime
dmesg -uT | tail
ip addr show wlxd85d4c97e434
iwlist wlxd85d4c97e434 scan | egrep ESSID
hdparm -acdgkmurC /dev/sda
free
}
main "$@"
Я даю запускаться автоматически после загрузки. Установка времени сна ниже ~10 минут раньше позволяла сбою исчезать, но больше не работает. К сожалению, журнал ошибок, созданный этим сценарием, никогда не помогал понять. То же самое касается различных журналов из/var/log/
. Однако для вас все может быть иначе.
Кроме того, я подозреваю, что мой WiFi-ключ не любит тепло. Я повторно использовал обувную коробку для детей в качестве футляра, и установка ключа в закрытую коробку вызвала некоторые проблемы с подключением.
И последнее, но не менее важное: я отключил автоматические обновления после перезагрузки. Очень часто вылеты происходили сразу после какой-то (загадочной) перезагрузки. Отключение автоматических обновлений помогло мне полностью избавиться от этого.