Ubuntu:“达到目标关机”,拔掉插头安全吗?

Dan*_*l F 5 ubuntu reboot

我有一台运行 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 天,可能是上次重新启动的时间。所以仍然有一些东西在后台运行,发出该消息。

由于这之前已经发生过,而且大部分谷歌点击都与 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,它没有效果,直到出现一条消息:

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

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

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

然后一个

2697473.63.. 重启:重启系统

但它不会重新启动,硬盘灯仍会偶尔闪烁,显示器不会清除消息。

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

长按电源按钮可关闭机器。再按一下就重启了,然后reset键就按预期工作了,我可以随时按它,它会导致系统立即重启。

开机后,我执行了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

Dan*_*l F 0

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

我正在做的是,在 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
Run Code Online (Sandbox Code Playgroud)

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

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