我有两个分区,一个用于 RO 根文件系统 (mmcblk3p1),另一个是 RW 主分区 (mmcblk3p2)。我不明白为什么systemd-fsck
当我手动损坏分区时无法修复分区:
dd if=/dev/zero bs=1 count=1000 of=/dev/mmcblk3p2 seek=1000
我可以在 5 秒内手动修复分区,因此问题一定出在 libsystemd-fsck 内部
e2fsck /dev/mmcblk3p2 -y
我的 fstab 配置为在启动时检查两个分区,并且内核配置告诉 fsck 尝试修复。
Kernel command line: console= consoleblank=0 vt.global_cursor_default=0 fsck.mode=auto fsck.repair=yes root=/dev/mmcblk3p1 rootfstype=ext4 rootwait ro
当 fsck 在启动期间尝试修复时,似乎立即收到错误。我可以看到日记中的错误。
journalctl | grep fsck
Jan 02 21:43:05 systemd-fsck[192]: e2fsck 1.43-WIP (18-May-2015)
Jan 02 21:43:05 systemd-fsck[192]: /dev/mmcblk3p1: clean, 9287/192576 files, 139802/192512 blocks
Jan 02 21:43:07 systemd-fsck[673]: e2fsck 1.43-WIP (18-May-2015)
Jan 02 21:43:07 systemd-fsck[673]: /dev/mmcblk3p2: recovering journal
Jan 02 21:43:07 systemd-fsck[673]: /dev/mmcblk3p2 contains a file system with errors, check forced.
Jan 02 21:43:07 systemd-fsck[673]: Pass 1: Checking inodes, blocks, and sizes
Jan 02 21:43:07 systemd-fsck[673]: fsck: Warning... fsck.ext4 for device /dev/mmcblk3p2 exited with signal 13.
Jan 02 21:43:07 systemd-fsck[673]: fsck failed with error code 8.
Jan 02 21:43:07 systemd-fsck[673]: Ignoring error.
Jan 02 21:43:07 kernel: EXT4-fs (mmcblk3p2): warning: mounting unchecked fs, running e2fsck is recommended
信号 13 和错误代码 8 对我挖掘问题的根本原因没有太大帮助。我在网上可以找到的唯一其他问题是这个来自 Ubuntu 邮件列表,但它涉及与 systemd-fsck 30 秒超时相关的错误。
我正在使用带有 4.1.38 内核的 systemd-229,该内核已过时,但这是我必须使用的。
编辑:我最终只是创建了另一个在 systemd-fsck@device 之前运行 e2fsck 的服务。这会自动解决所有发现的问题并成功返回。
[Unit]
Description=File System Check on /dev/mmcblk3p2
DefaultDependencies=no
BindsTo=dev-mmcblk3p2.device
After=dev-mmcblk3p2.device systemd-fsck-root.service local-fs-pre.target
Before=shutdown.target [email protected]
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/e2fsck /dev/mmcblk3p2 -y
TimeoutSec=0
SuccessExitStatus=1 2
[Install]
WantedBy=multi-user.target