我发现不可能通过文件内的标志fsck
在启动时在环回设备上运行,也不可能通过在安装环回设备时手动运行来完成此操作。fsck
fstab
fsck
是否有其他方法可以在启动时检查设备?
答案1
关键短语有“当安装循环设备时”。你能fsck
在未安装的环回设备上运行。
换句话说,您可以运行losetup
来创建环回块设备并将其附加到相关文件,然后fsck
在其上运行,然后就mount
可以了。
当然,这可以编写脚本。/etc/rc.local
如果环回挂载被标记noauto
为/etc/fstab
- 然后对 中的每个环回 fs 执行 losetup/fsck/mount,您甚至可以在 或 中执行类似操作/etc/fstab
。
请注意,这是对该标志的滥用,noauto
因为环回文件系统最终将被自动安装。注释掉您不希望自动安装的任何环回文件系统。
或者,您可以修改mount -a
系统上运行的任何代码(systemd、sysvinit shell 脚本或其他),以便它改为运行mount -a -tnoloop
,这样环回文件系统就不会像其他文件系统一样自动挂载。然后可以编写执行 losetup/fsck/mount 的脚本来尊重该noauto
标志(如果存在)。
答案2
我找到了一个优雅且可靠的解决方案。
我为“/etc/initramfs-tools/scripts/local-premount/”启动阶段编写了一个脚本,以便在安装文件系统之前处理我的循环磁盘。
下面详细介绍一下:
- 将脚本创建为/etc/initramfs-tools/scripts/local-premount/。
- 更新初始化文件通过命令更新-initramfs -u。
这是脚本源:
#!/bin/sh
# Antonio Petricca <[email protected]> - 03/01/2018
PREREQ=""
# Output pre-requisites
prereqs()
{
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. /scripts/functions
log_begin_msg "Running file system check on loop device(s)"
DEV=/dev/sdb5
MNT=/tmp/mnt
LOOP=$MNT/.linux-loops/242eef08-32d6-42c2-93eb-afdc2111a13e.ext4
mkdir $MNT && \
mount -t ntfs $DEV $MNT && \
fsck.ext4 -p -v $LOOP && \
umount $MNT
# Uncomment next line to hold messages for debugging
# sleep 10
log_end_msg "Done"
# Continue boot anyway
exit 0
问候!