Ubuntu:“达到目标关闭”,可以安全地拔掉插头吗?

Ubuntu:“达到目标关闭”,可以安全地拔掉插头吗?

我有一台运行 Ubuntu 16.04.3 LTS 的小型 Celeron 机器,每次我需要重新启动它(大约每月一次)时,我都必须关闭它的电源,拔掉插头,然后再次打开它。

问题是它不会自动重新启动,因为它会停止并显示一条消息Reached target Shutdown。因此,我已停止使用sudo reboot,而是改为使用sudo poweroff,不久之后就会出现该消息。

当我等待几分钟时,会显示一条附加消息3102533.654120 unregister_netdevice: waiting for lo to become free. Usage count=1。第二个(如时间测量)计数器很高,约为 3102533,相当于约 36 天,可能是上次重新启动的时间。所以后台仍然有一些东西在运行,发出该消息。

由于这种情况以前已经发生过,并且大多数 Google 命中都与 Docker 有关,因此我确保停止所有容器docker stop $(docker ps -a -q),并sudo systemctl stop docker在发布sudo poweroff.

在这种奇怪的断电状态下,也无法通过正常按下电源按钮来关闭机器电源(长按会关闭机器电源,iirc),并且按下重置按钮也不会重新启动机器,我发现这很奇怪。它是http://www.asrock.com/mb/Intel/N3150DC-ITX/

让我最担心的是“hdd”灯(它是一个 SSD)偶尔闪烁,就好像它正在与光盘交互一样,这让我担心拔掉电源插头时会损坏某些东西。https://www.youtube.com/watch?v=T3ojE1un7WE

拔掉插头安全吗?我怎样才能找到这个问题的原因?我无法对机器进行太多重新启动,因为它托管着一些不断被访问的数据库。


以上为2月12日,以下为3月16日

我刚刚再次“重新启动”机器。与上面的过程相同,因为它不会关闭。

这次我在重新启动之前没有执行任何操作apt upgrade/dist-upgrade,而是在重新启动之后执行此操作,以确保正在升级的某些内容不是导致此问题的原因。

在等待它关闭的过程中,我按了几次 ctrl-alt-del ,但没有效果,直到出现一条消息:

2秒内按Ctrl-Alt-Del超过7次,立即重启

(我不认为我按得那么快,我相信它们以某种方式被缓存或者我按了很长时间)然后是

2697473.41.. systemd-shutdown[1]:无法最终确定 DM 设备,忽略(DM 之前的额外空格是该消息的一部分)

然后一个

2697473.63..reboot:重新启动系统

但无法重新启动,硬盘指示灯仍会偶尔闪烁,显示屏不会清除消息。

按重置按钮不会重置机器。按钮没有故障。

长按电源按钮可关闭机器电源。再按一次重新启动它,然后重置按钮按预期工作,我可以随时按它,它会导致系统立即重新启动。

开机后,我执行了 apt update/upgrade/dist-upgrade 并再次 sudo poweroff'ed 。关机就好了。

当机器开机几天时,会发生一些非常奇怪的事情,这肯定是导致此问题的原因。

我正在使用molly-guard,我不确定这是否会导致一些问题。当我发出 时,sudo shutdown我是在连接的键盘上本地执行的,所以molly-guard没有效果。但我怀疑这molly-guard就是问题的根源。

top -b > test-pre-reboot-no-upgrade.txt在发布之前做了一个sudo shutdown,这是输出https://pastebin.com/nZnJzRKu

答案1

尝试添加nolapic参数grub.cfg

跑步

sudo update-grub

https://help.ubuntu.com/community/BootOptions

帮助过我

在这里尝试了这些参数noapic nolapic noacpi irqpoll noapm nodma nomce

否则它没有帮助。解决了问题-重新编译initramfs:

sudo update-initramfs -u

答案2

我认为这个问题与安装硬盘/固态硬盘有关。

我正在做的是,在 crontab 中我有一个 @reboot startup.shshell 脚本,该脚本由主用户(uid 1000)执行,并且该脚本安装 HDD(它曾经是 HDD,现在是 SSD):

sudo mount /dev/sdb1 /media/ssd1

然后我所做的是创建一个shutdown.sh如下所示的脚本:

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#       Ensure that this is desired
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ""
echo "---- do you really want to shutdown/reboot? ----"
echo ""
read -n 1 -p "no, yes? (N/y) " ans;
case $ans in
  y|Y) printf "\n\nok, preparing for shutdown/reboot\n\n";;
    *) printf "\nok, exited\n\n";       exit;;
esac

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#       DOCKER
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ''
echo '--| stopping docker portainer |--';
echo ''
docker stop portainer

... stop more containers

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#       Python
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ''
echo '--| killing all python processes |--';
echo ''
sudo pkill python

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#       MongoDB
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ''
echo '--| exiting mongodb instances |--';
echo ''
mongod --dbpath /media/ssd1/data/mongodb/network/wiredTiger --shutdown

... stop more databases

echo ''
echo '--| deleting old mongodb logs |--';
echo ''
exec rm -rf {} \;"
sudo sh -c "find /media/ssd1/data/mongodb -type f -name 'log.txt.*' -exec du -ch {} + | sort -h"
sudo sh -c "find /media/ssd1/data/mongodb -type f -name 'log.txt.*' -exec rm -rf {} \;"

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#       Sync
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ''
echo '--| syncing discs |--';
sync

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#       SSD
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ''
echo '--| unmounting ssd1 and hdd5-1 |--';
echo ''
sudo umount /media/ssd1/

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#       Ask for next step
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ""
echo "---- ok, done. what next? ----"
echo ""
read -n 1 -p "exit, reboot, or shutdown? (E/r/s) " ans;
case $ans in
  r|R) printf "\n\nok, rebooting\n\n";    sudo reboot </dev/null;;
  s|S) printf "\n\nok, powering off\n\n"; sudo poweroff </dev/null;;
    *) printf "\nok, exited\n\n";       exit;;
esac

这样我就可以关闭和重新启动系统。因此,可能与未明确卸载驱动器以及在关闭/重新启动之前未发出同步有关。

正如评论中提到的,我注意到一个容器 (RabbitMQ) 正在生成一个巨大的日志文件(增长到大约 40 GB)。也许同步此文件导致了麻烦,它试图在几乎断电的状态下同步它。但我不确定,因为我几乎从一开始就遇到了这个问题,而且据我所知,我最初并没有运行 RabbitMQ。

相关内容