![如何使用 switch_root 命令和空白分区对功能正常但跛行的 rootfs 执行热修复?](https://linux22.com/image/15395/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20switch_root%20%E5%91%BD%E4%BB%A4%E5%92%8C%E7%A9%BA%E7%99%BD%E5%88%86%E5%8C%BA%E5%AF%B9%E5%8A%9F%E8%83%BD%E6%AD%A3%E5%B8%B8%E4%BD%86%E8%B7%9B%E8%A1%8C%E7%9A%84%20rootfs%20%E6%89%A7%E8%A1%8C%E7%83%AD%E4%BF%AE%E5%A4%8D%EF%BC%9F.png)
我遇到了一个极端的情况,我可能永远不会再遇到,但我想做好准备。我有一个嵌入式系统(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
跳转?