0

我有一个运行 Armbian 的 Olimex Lime2,无头。在这块板上,我只关心 SSH 和 MiniDLNA。我希望能把整个配置包括在内,但重要的一点可能是/boot/armbianEnv.txt我把

extraargs=acpi=off

一年来,我很难调试可用性问题。机器随机停止,无法通过 ping 或 ssh 访问。这些问题很难调试,因为它们在连接显示器或键盘时似乎消失了,而当系统无头运行时我找不到它们的任何痕迹。虽然我在不知道如何控制的情况下基本控制了问题,但 Olimex 仍然不时停止响应。这次我想问为什么。

我注意到 Olimex 在 10 月 25 日下午 2 点左右停止提供 DLNA 访问。我没有碰它看它是否恢复(有时会发生)。这次系统保持无法访问 2 天,直到我拔掉电源。

您可以在下面找到两个日志的链接。如果可以指出其中的任何可疑之处,我将非常高兴,以便我可以开始解决它们。

我想知道一件特别的事情:为什么系统决定重新启动?那天没有停电。我希望正常的重新启动会在日志中显示出来,是吗?

日志:

/var/logs/messageshttps
/var/logs/syslog : //pastebin.com/qgRumreB:https: //pastebin.com/U5jpHNHm

日志是完整的。我只删除了开头和结尾的行,但没有删除中间的行。

4

1 回答 1

0

尽管我没有找到明确的解决方案,但我想分享我尝试过的方法。希望这将为其他有类似问题的人提供灵感。

对我有很大帮助的一件事(当时不可用)是切换到更新的 OS。我正在运行基于 Ubuntu 18.04 的 Armbian,日志现在不那么混乱了。此外,改进了一些小细节。如果你登陆这里并且仍然运行 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 连接的外部 HDD 置于睡眠状态。我很惊讶这不会自动发生。现在我将以下部分附加到我的/etc/hdparm.conf

/dev/disk/by-uuid/<uid> {
    spindown_time = 60
    write_cache = off
}

这告诉 hdparm 在 5 分钟不活动后将 HDD 置于待机状态。关闭写缓存是防止文件系统再次损坏的安全措施。一些磁盘在不应该对 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 加密狗不喜欢温暖。我重新使用了一个儿童鞋盒作为外壳,并将加密狗放在封闭的盒子内导致了一些连接问题。

最后但同样重要的是,我在重启后关闭了自动更新。很多时候,崩溃是在一些(神秘的)重启之后直接发生的。关闭自动更新帮助我完全摆脱了这种情况。

于 2019-09-05T21:09:20.307 回答