如何使用 switch_root 命令和空白分区对功能正常但跛行的 rootfs 执行热修复?

如何使用 switch_root 命令和空白分区对功能正常但跛行的 rootfs 执行热修复?

我遇到了一个极端的情况,我可能永远不会再遇到,但我想做好准备。我有一个嵌入式系统(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

我的计划如下:

  1. 将运行 linux 所需的基本文件复制到不同的分区上
  2. fsck修复 rootfs 所需的其他内容复制到空分区
  3. 跳转到另一个分区switch_root
  4. 卸载主 rootfs 并执行 fsck 修复
  5. reboot并且引导加载程序应该指向固定的主

我不知道的主要是:

  • 这行得通吗?
  • 我需要哪些基本文件#1?我是否需要包含已加载的内核模块,或者这些模块是否会保留在内核中?
  • 一个非常简单的初始化脚本会是什么样子来促进switch_root跳转?

相关内容