Почему этот 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-ключ не любит тепло. Я повторно использовал обувную коробку для детей в качестве футляра, и установка ключа в закрытую коробку вызвала некоторые проблемы с подключением.

И последнее, но не менее важное: я отключил автоматические обновления после перезагрузки. Очень часто вылеты происходили сразу после какой-то (загадочной) перезагрузки. Отключение автоматических обновлений помогло мне полностью избавиться от этого.

Другие вопросы по тегам