我有以下脚本来执行需要 1-2 秒的紧急关闭。 (暂停时间太长)
# Enable System Requests
sudo echo 1 > /proc/sys/kernel/sysrq
#sync
sudo echo s > /proc/sysrq-trigger
#emergency remount
sudo echo u > /proc/sysrq-trigger
#shutoff
sudo echo o > /proc/sysrq-trigger
在这次紧急关闭期间,我查看tail -f /var/log/syslog
并发现紧急同步以及紧急只读重新安装均成功。
但系统再次开机后,fsck报文件系统错误(systemd status systemd-fsck-root.service
显示错误“发现属于损坏的孤立链表的一部分的节点”)。
我可以做什么来防止这种情况发生?我认为同步+重新安装的组合是安全的。我无法解释为什么文件系统处于不一致状态。
更新:非常奇怪的是,如果我修复错误(使用启动参数fsck.repair=yes
),文件夹 /lost+found 是空的并且journalctl -u systemd-fsck*
不显示修复已完成:
[23:41]root@ras3:/daten/scripts$ journalctl --all -u systemd-fsck*
-- Logs begin at Thu 2016-11-03 18:16:43 CET, end at Sat 2019-07-06 23:45:20 CEST. --
Jul 06 23:03:10 ras3 systemd-fsck[139]: e2fsck 1.43.4 (31-Jan-2017)
Jul 06 23:03:10 ras3 systemd[1]: Started File System Check Daemon to report status.
Jul 07 01:17:01 ras3 systemd-fsck[143]: Durchgang 1: Inodes, Blöcke und Größen werden geprüft
Jul 07 01:17:26 ras3 systemd-fsck[143]: Durchgang 2: Verzeichnisstruktur wird geprüft
Jul 07 01:17:32 ras3 systemd-fsck[143]: Durchgang 3: Verzeichnisverknüpfungen werden geprüft
Jul 07 01:17:32 ras3 systemd-fsck[143]: Durchgang 4: Referenzzähler werden überprüft
Jul 07 01:17:33 ras3 systemd-fsck[143]: Durchgang 5: Zusammengefasste Gruppeninformation wird geprüft
Jul 06 23:03:43 ras3 systemd[1]: Started File System Check on Root Device.
Jul 06 23:03:44 ras3 systemd[1]: Starting File System Check on /dev/mmcblk0p1...
Jul 06 23:03:44 ras3 systemd-fsck[290]: fsck.fat 4.1 (2017-01-24)
Jul 06 23:03:44 ras3 systemd-fsck[290]: /dev/mmcblk0p1: 188 files, 45366/86467 clusters
Jul 06 23:03:44 ras3 systemd[1]: Started File System Check on /dev/mmcblk0p1.
该系统是 Raspberry Pi 3 B+ 上的 Debian Stretch。
答案1
我不知道为什么会这样。这是一个未经测试的替代方案。我希望这也能在您的系统上运行几秒钟。
# /etc/systemd/system/emergency-poweroff.service
#
# Immediately terminate all processes, and then power off.
# Usage: systemctl start emergency-poweroff
[Unit]
Description=Emergency Power-Off
DefaultDependencies=no
Type=oneshot
# SIGKILL all the things
# - except the process itself, or we would not continue
ExecStart=/sbin/killall5 -9
# Wait for all processes to be cleaned up,
# then cleanly shutdown the filesystems and kernel.
ExecStart=/bin/systemctl poweroff --force
如果替换systemctl poweroff
为systemctl halt
,则可能保留屏幕上的日志消息。这作为第一次测试可能有用。