如何在系统启动期间和挂载 rootfs 之前强制执行 fsck?

如何在系统启动期间和挂载 rootfs 之前强制执行 fsck?

我正在使用 Yocto 进行嵌入式 Linux 构建。我的目标是在每次系统启动期间强制执行文件检查。到目前为止,我执行了以下步骤:

  1. 我修改了该/etc/default/rcS文件并设置了ENABLE_ROOTFS_FSCK=yesFSCKFIX=yes
  2. 我在每次启动期间使用此命令tune2fs -c 1 <my_fs>检查我的文件系统。

我看到以下日志

`EXT4-fs (mmcblk0p2): warning: maximal mount count reached, running e2fsck is recommended`

在挂载根分区之前,但 fsck 会在挂载后立即尝试检查该分区。因此该过程被中止。日志:

mount: / is busy
*** ERROR!  Cannot fsck root fs because it is not mounted read-only!

如何在挂载分区之前强制 fsck 检查文件系统?预先感谢您的任何帮助。

答案1

我可能会误解你的问题,但是:

没有必要为了跑tune2fs而跑fsck。由于您没有“调整”任何 fs 参数,tune2fs因此用作代理fsck只会增加开销,并且可能会稍微减慢启动过程。

也许你的意思是e2fsckfsck充当“包装”或者“前端”提供遗产支持。通常,fsck只需调用e2fsck即可完成实际工作。

无论如何 - 给出答案:

我认为fsck不同操作系统的调用可能有所不同。我的“嵌入式Linux”操作系统之一是RPi,fsck在启动时有两种调用方法根文件系统已挂载:

  1. forcefsck在文件系统的根目录中创建一个名为的文件/; IE

    $ sudo touch /forcefsck
    

    这可能必须在每次启动之前完成 - 我的操作系统在启动期间删除此文件

  2. 使用您的编辑器将以下内容添加到/boot/cmdline.txt

    fsck.mode=强制

    $ nano /boot/cmdline.txt
    

    从:
    控制台=serial0,115200 控制台=tty1 根=PARTUUID=6c586e13-02 rootfstype=ext4 电梯=截止日期 fsck.repair=yes rootwait

    到:
    console=serial0,115200 console=tty1 root=PARTUUID=6c586e13-02 rootfstype=ext4 lift=截止日期 fsck.mode=force fsck.repair=yes rootwait

再说一遍,我认为这取决于操作系统,所以 YMMV。

答案2

您需要一个 initram 文件系统来执行此操作。在切换到真实根之前检查真实根文件系统。

一旦安装了文件系统,就不能(不应该)对其进行修改,并且无法卸载根文件系统。

相关内容