为啥会失去这个 Armbian 反复连接?

Posted

技术标签:

【中文标题】为啥会失去这个 Armbian 反复连接?【英文标题】:Why looses this Armbian repeatedly connectivity?为什么会失去这个 Armbian 反复连接? 【发布时间】:2019-04-01 06:53:59 【问题描述】:

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

extraargs=acpi=off

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

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

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

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

日志:

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

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

【问题讨论】:

这可能无关,但在许多情况下,我在其他 ARM 板上遇到的类似问题是由于功率不足 - 例如,该板需要 750 mA 的最大吸收,但交流适配器的额定功率仅为500毫安。这确实会导致随机重启,尤其是在繁忙时间(即大多数外围设备使用电源最多的时候)。 非常感谢。我一定会检查的。 【参考方案1】:

虽然我没有找到明确的解决方案,但我想分享我尝试过的方法。希望这能为有类似问题的其他人提供启发。

对我有很大帮助的一件事(当时还没有)是切换到更新的操作系统。我正在运行基于 Ubuntu 18.04 的 Armbian,日志现在不那么混乱了。此外,改进了一些小细节。如果您登陆这里并仍在运行 Armbian Stretch,则应该升级。

频繁崩溃的一个原因可能是由频繁崩溃引起的文件系统损坏 :-(。Armbian 将您的 SD 卡与

  UUID=<uid> / ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro 0 1

注意commit=600,这意味着更改将仅每 10 分钟写入一次。如果您的机器在两者之​​间崩溃,则文件系统可能会损坏。因此,您可以在 SD 卡文件系统上运行 fsck.ext4。为了彻底解决这个问题,您可以:

每次启动时运行 fsck 省略提交设置。我的 SD 卡可以很好地承受额外的压力。

我认为解决问题的方法是将通过 SATA 连接的外部硬盘置于睡眠​​状态。我很惊讶这不会自动发生。现在我将以下部分附加到我的/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 加密狗不喜欢它温暖。我重复使用了一个儿童鞋盒作为外壳,并将加密狗放入封闭的盒子中导致了一些连接问题。

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

【讨论】:

以上是关于为啥会失去这个 Armbian 反复连接?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UIStackView 中的 UILabel 在重用时会失去高度?

在 Armbian 上从 i2c 2 读取 BME680

为啥 CLLocation 坐标在显示时会失去精度?

为啥这段代码会使 QImage 失去它的 alpha 通道?

armbian怎么超频命令

为啥我的 Vue js 应用在路由到其他组件时会失去焦点?