我遇到了一个极端的情况,我可能永远不会再遇到,但我想做好准备。我有一个嵌入式系统(u-boot),其主磁盘有 4 个分区。其中一个分区是 rootfs( ext4
),不幸的是它是rw
。它ext4
在处理粗糙的交互方面做得很好,但我今天第一次看到它的问题。安装仍然有效,但systemd-fsck-root.service
失败并指示它需要 CTRL-D 才能继续并告诉我运行fsck
。
systemd-fsck[1130]: /dev/mmcblk1p4: Superblock last mount time is in the future.
systemd-fsck[1130]: (by less than a day, probably due to the hardware clock being incorrectly set)
systemd-fsck[1130]: /dev/mmcblk1p4 contains a file system with errors, check forced.
systemd-fsck[1130]: /dev/mmcblk1p4: Inodes that were part of a corrupted orphan linked list found.
systemd-fsck[1130]: /dev/mmcblk1p4: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
systemd-fsck[1130]: (i.e., without -a or -p options)
systemd-fsck[1130]: fsck failed with error code 4.
systemd-fsck[1130]: Running request emergency.target/start/replace
我的内核没有initramfs
备份分区。我所拥有的只是:
- rootfs 旁边的一个大部分未使用的分区
- 命令
switch_root
我的计划如下:
- 将运行 linux 所需的基本文件复制到不同的分区上
- 将
fsck
修复 rootfs 所需的其他内容复制到空分区 - 跳转到另一个分区
switch_root
- 卸载主 rootfs 并执行 fsck 修复
reboot
并且引导加载程序应该指向固定的主
我不知道的主要是:
- 这行得通吗?
- 我需要哪些基本文件
#1
?我是否需要包含已加载的内核模块,或者这些模块是否会保留在内核中? - 一个非常简单的初始化脚本会是什么样子来促进
switch_root
跳转?