我正在使用 Yocto 进行嵌入式 Linux 构建。我的目标是在每次系统启动期间强制执行文件检查。到目前为止,我执行了以下步骤:
- 我修改了该
/etc/default/rcS
文件并设置了ENABLE_ROOTFS_FSCK=yes
和FSCKFIX=yes
。 - 我在每次启动期间使用此命令
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
只会增加开销,并且可能会稍微减慢启动过程。
也许你的意思是e2fsck
?fsck
充当“包装”或者“前端”提供遗产支持。通常,fsck
只需调用e2fsck
即可完成实际工作。
无论如何 - 给出答案:
我认为fsck
不同操作系统的调用可能有所不同。我的“嵌入式Linux”操作系统之一是RPi,fsck
在启动时有两种调用方法前根文件系统已挂载:
forcefsck
在文件系统的根目录中创建一个名为的文件/
; IE$ sudo touch /forcefsck
这可能必须在每次启动之前完成 - 我的操作系统在启动期间删除此文件
使用您的编辑器将以下内容添加到
/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 文件系统来执行此操作。在切换到真实根之前检查真实根文件系统。
一旦安装了文件系统,就不能(不应该)对其进行修改,并且无法卸载根文件系统。