启动时对环回设备进行 Fsck

启动时对环回设备进行 Fsck

我发现不可能通过文件内的标志fsck在启动时在环回设备上运行,也不可能通过在安装环回设备时手动运行来完成此操作。fsckfstabfsck

是否有其他方法可以在启动时检查设备?

答案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/”启动阶段编写了一个脚本,以便在安装文件系统之前处理我的循环磁盘。

下面详细介绍一下:

  1. 将脚本创建为/etc/initramfs-tools/scripts/local-premount/
  2. 更新初始化文件通过命令更新-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

问候!

相关内容