Как починить root раздел?

После очередного падения по пропаданию питания (батарейки не всегда хватает) что-то произошло с root разделом

При загрузке
[ OK ] Started Journal Service.
[FAILED] Failed to start File System Check on Root Device.
See ‘systemctl status systemd-fsck-root.service’ for details.
Starting Remount Root and Kernel File Systems…

и потом

You are in emergency mode. After logging in, type "journalctl -xb" to view
system logs, "systemctl reboot" to reboot, "systemctl default" or ^D to
try again to boot into default mode.
Give root password for maintenance
(or press Control-D to continue): [   13.918837] mxs-dcp 80028000.dcp: Failed to register sha1 hash!

ошибка проверки тупая:
root@wirenboard-A7NBSL6Z:~# systemctl status systemd-fsck-root.service
● systemd-fsck-root.service - File System Check on Root Device
Loaded: loaded (/lib/systemd/system/systemd-fsck-root.service; static; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2020-09-24 14:12:18 MSK; 3min 37s ago
Condition: start condition failed at Thu 2020-09-24 14:14:20 MSK; 1min 36s ago
└─ ConditionPathIsReadWrite=!/ was not met
Docs: man:systemd-fsck-root.service(8)
Process: 84 ExecStart=/lib/systemd/systemd-fsck (code=exited, status=1/FAILURE)
Main PID: 84 (code=exited, status=1/FAILURE)

сен 24 14:12:18 wirenboard-A7NBSL6Z systemd-fsck[84]: fsck failed with error code 4.
сен 24 14:12:18 wirenboard-A7NBSL6Z systemd-fsck[84]: rootfs1 contains a file system with errors, check forced.
сен 24 14:12:18 wirenboard-A7NBSL6Z systemd-fsck[84]: rootfs1: Inodes that were part of a corrupted orphan linked list found.
сен 24 14:12:18 wirenboard-A7NBSL6Z systemd-fsck[84]: rootfs1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
сен 24 14:12:18 wirenboard-A7NBSL6Z systemd-fsck[84]:         (i.e., without -a or -p options)
сен 24 14:12:18 wirenboard-A7NBSL6Z systemd-fsck[84]: Running request emergency.target/start/replace
сен 24 14:12:18 wirenboard-A7NBSL6Z systemd[1]: systemd-fsck-root.service: Main process exited, code=exited, status=1/FAILURE
сен 24 14:12:18 wirenboard-A7NBSL6Z systemd[1]: Failed to start File System Check on Root Device.
сен 24 14:12:18 wirenboard-A7NBSL6Z systemd[1]: systemd-fsck-root.service: Unit entered failed state.
сен 24 14:12:18 wirenboard-A7NBSL6Z systemd[1]: systemd-fsck-root.service: Failed with result 'exit-code'.

Что делать?
root@wirenboard-A7NBSL6Z:~# mount
/dev/mmcblk0p3 on / type ext4 (rw,noatime,errors=remount-ro,stripe=1024,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=61352k,nr_inodes=15338,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (rw,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mmcblk0p6 on /mnt/data type ext4 (rw,relatime,stripe=1024,data=ordered)
/dev/mmcblk0p6 on /var/log type ext4 (rw,relatime,stripe=1024,data=ordered)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=12284k,mode=700)

root@wirenboard-A7NBSL6Z:~# fsck /dev/mmcblk0p3
fsck from util-linux 2.29.2
e2fsck 1.43.4 (31-Jan-2017)
/dev/mmcblk0p3 is mounted.
e2fsck: Cannot continue, aborting.

root@wirenboard-A7NBSL6Z:~# mount -o remount, ro /
root@wirenboard-A7NBSL6Z:~# fsck /dev/mmcblk0p3
fsck from util-linux 2.29.2
e2fsck 1.43.4 (31-Jan-2017)
/dev/mmcblk0p3 is mounted.
e2fsck: Cannot continue, aborting.

Лог: wb5.log.txt (20.6 КБ)

Есть нажать Ctrl-D загружается и выглядит живой…

А если, как и предлагает перейти в maintenance и выполнить fsck? “/” смонтирован как RO, мешать не будет.

неа. говорит раздел смонтирован, ничего делать не буду

А с флагом “-F”?

[    6.937537] EXT4-fs (mmcblk0p3): warning: mounting fs with errors, running e2fsck is recommended
[    6.948148] EXT4-fs (mmcblk0p3): re-mounted. Opts: errors=remount-ro

типа монтируется ro

   root@wirenboard-A7NBSL6Z:~# mount                  
mount
/dev/mmcblk0p3 on / type ext4 (rw,noatime,errors=remount-ro,stripe=1024,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=61352k,nr_inodes=15338,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mmcblk0p6 on /mnt/data type ext4 (rw,relatime,stripe=1024,data=ordered)
/dev/mmcblk0p6 on /var/log type ext4 (rw,relatime,stripe=1024,data=ordered)
root@wirenboard-A7NBSL6Z:~# 
root@wirenboard-A7NBSL6Z:~# fsck /dev/mmcblk0p3
fsck /dev/mmcblk0p3
fsck from util-linux 2.29.2
e2fsck 1.43.4 (31-Jan-2017)
/dev/mmcblk0p3 is mounted.
e2fsck: Cannot continue, aborting.

root@wirenboard-A7NBSL6Z:~# fsck -F /dev/mmcblk0p3
fsck -F /dev/mmcblk0p3
fsck from util-linux 2.29.2
e2fsck 1.43.4 (31-Jan-2017)
/dev/mmcblk0p3 is mounted.
e2fsck: Cannot continue, aborting.


root@wirenboard-A7NBSL6Z:~# 
root@wirenboard-A7NBSL6Z:~# fsck -f /dev/mmcblk0p3
fsck -f /dev/mmcblk0p3
fsck from util-linux 2.29.2
e2fsck 1.43.4 (31-Jan-2017)
/dev/mmcblk0p3 is mounted.
e2fsck: Cannot continue, aborting.

Это сейчас из “штатного” режима, когда смонтирован rw. А из maintenance, когда ro? или сейчас при загрузке не ругается?

Это из maintaince (или я чего-то не понимаю)

[   32.819715] RTL871X: set group key camid:5, addr:50:ff:20:35:4b:2a, kid:1, type:AES


Login incorrect

Give root password for maintenance
(or press Control-D to continue): 

Login incorrect

Give root password for maintenance
(or press Control-D to continue): ********

root@wirenboard-A7NBSL6Z:~# mount                  
mount
/dev/mmcblk0p3 on / type ext4 (rw,noatime,errors=remount-ro,stripe=1024,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=61352k,nr_inodes=15338,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mmcblk0p6 on /mnt/data type ext4 (rw,relatime,stripe=1024,data=ordered)
/dev/mmcblk0p6 on /var/log type ext4 (rw,relatime,stripe=1024,data=ordered)
root@wirenboard-A7NBSL6Z:~# 

Это же maintaince? Я ввожу пароль рута не нажимая CTRL-D

попробовать прямо в fstab прописать ro?

я не понимаю, почему он оказывается смонтирован rw

echo u > /proc/sysrq-trigger
mount -o remount,ro /dev/mmcblk0p2

O! Спасибо!

А можно теперь как-то понять, кто пострадал?

root@wirenboard-A7NBSL6Z:~# fsck -f /dev/mmcblk0p3
fsck -f /dev/mmcblk0p3
fsck from util-linux 2.29.2
e2fsck 1.43.4 (31-Jan-2017)
Pass 1: Checking inodes, blocks, and sizes
Inodes that were part of a corrupted orphan linked list found.  Fix<y>? yes
Inode 643 was part of the orphaned inode list.  FIXED.
Inode 18539 was part of the orphaned inode list.  FIXED.
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences:  -53284 -53286
Fix<y>? y
yes
Free blocks count wrong for group #1 (10778, counted=10780).
Fix<y>? yes
Free blocks count wrong (107774, counted=107776).
Fix<y>? yes
Inode bitmap differences:  -310 -643
Fix<y>? y
yes
Free inodes count wrong for group #0 (39, counted=41).
Fix<y>? yes
Free inodes count wrong (37011, counted=37013).
Fix<y>? yes

rootfs1: ***** FILE SYSTEM WAS MODIFIED *****
rootfs1: ***** REBOOT SYSTEM *****
rootfs1: 28523/65536 files (0.3% non-contiguous), 154368/262144 blocks
root@wirenboard-A7NBSL6Z:~#

Теперь загружается нормально, но беспокоит некоторая неопределенность…

Можно поискать файл по иноду:

find / -inum <inode number>

Но скорее всего не пострадали.

root@wirenboard-A7NBSL6Z:~# find / -inum 643
/sys/kernel/debug/clk/gpmi_sel/clk_rate
/sys/firmware/devicetree/base/apb@80000000/apbh@80000000/pinctrl@80018000/pwm3@1/fsl,pinmux-ids

root@wirenboard-A7NBSL6Z:~# find / -inum 18539
find: ‘/proc/172’: Нет такого файла или каталога
/proc/278/map_files/b6e81000-b6e90000

А ошибки
Block bitmap differences: -53284 -53286
Inode bitmap differences: -310 -643

они о чем?

Тут же /proc, который монтируется оверлеем. можно поробовать смонтировать / куда-нибудь еще и поискать в нем.

Различия в копиях таблицы файлов ЕМНИП.

Ох

Ладно оставлю пока как есть.

А есть какой-то рекомендованный способ удаленной починки таких историй?

У меня пока из идей только тупо оставить прикрученный к консоли esp-link (через него и подключался сейчас)

Удаленный - в смысле без подключения локальной консоли? Вообше нет. Хм. а это мысль - сделать запуск ssh (так, первая засада - логин с паролем) из init. Надо погуглить.

У меня мысль более радикальная. Отдельное дешевое устройство, типа ESP8266 прокидывающее консоль в сеть (вероятно тут нужна какая-то безопасность, но в домашней сети наверное не критично)

Консольный порт на серверах это же по сути отдельный миникомпьютер. Почему бы для WB не пойти по этому же пути?