编辑2:检查来源

编辑2:检查来源

在此输入图像描述我正在阅读启动期间运行的所有内容,并且看到在安装 rootfs 之后/sbin/fsck.ext4运行,在 systemd 运行之后运行。我想知道在哪里或如何fsck运行,因为我在内核源代码中搜索它但找不到它并且它不是初始化脚本的一部分。那么什么运行呢fsck?我使用的发行版是薄荷的。

编辑:在此图像中显示 fsck 在安装根文件系统后运行

答案1

编辑2:检查来源

我找到了ubuntuinitramfs-工具源。在这里您可以清楚地看到,Begin: "Mounting root file system"首先打印消息,但在实际安装之前运行该mount_root函数。fsck我省略了一些不相关的代码,只是为了表明顺序。 (如果您检查链接的源,您还会从屏幕截图中找到其他报告的脚本)。

/init第256行

log_begin_msg "Mounting root file system"
# Always load local and nfs (since these might be needed for /etc or
# /usr, irrespective of the boot script used to mount the rootfs).
. /scripts/local
. /scripts/nfs
. /scripts/${BOOT}
parse_numeric ${ROOT}
maybe_break mountroot
mount_top
mount_premount
mountroot
log_end_msg

/scripts/local@第244行

mountroot()
{
    local_mount_root
}

/scripts/local@第131行

local_mount_root()
{
# Some code ommited
    # FIXME This has no error checking
    [ -n "${FSTYPE}" ] && modprobe ${FSTYPE}

    checkfs ${ROOT} root "${FSTYPE}"

    # FIXME This has no error checking
    # Mount root
    mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt}
    mountroot_status="$?"
    if [ "$LOOP" ]; then
        if [ "$mountroot_status" != 0 ]; then
            if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then
                panic "<Error message ommited>"
            fi
        fi

        mkdir -p /host
        mount -o move ${rootmnt} /host
# Some code ommitted
}

原答案,因历史原因保留

两种选择:

  1. root 在引导期间以只读方式安装,并且在里面实施正在运行fsck系统是个在里面在 mint 上实现,并且由于您已经检查了它是否存在,所以此选项不适用。
  2. /sbin/fsck.ext4运行在“早期用户空间”,由一个设置初始化文件系统。您的系统中最有可能出现这种情况。

系统

即使您注意到/sbin/fsck.ext4之前已经运行过systemd,我也想详细说明一下。系统完全能够fsck在只读安装的文件系统上自行运行。看[电子邮件受保护]文档。最有可能的是,该服务在 mint 中默认未启用,因为它与早期用户空间一。

初始化文件系统

我不知道 initramfs mint 的哪个实现正在运行,但我会使用dracut举个例子。 (在 Debian、openSuse 等中使用)它在其中声明了以下内容安装准备文档:

当根文件系统最终变得可见时:

  • 任何维护任务无法在已安装的根文件系统上运行的情况已完成。
  • 根文件系统以只读方式挂载。
  • 任何必须继续运行的进程(例如 rd.splash 屏幕帮助程序及其命令 FIFO)都会被提升到新安装的根文件系统中。

维护任务包括fsck。进一步的证据表明,有可能dracut 命令行选项关闭fsck

rd.skipfsck

跳过 rootfs 和 /usr 的 fsck。如果您以只读方式挂载 /usr 并且 init 系统在重新挂载之前执行 fsck,您可能需要使用此选项来避免重复

initramfs 的实现

动态(基于 udev)且灵活的 initramfs可以使用系统基础设施。 Dracut 就是这样的一个实现,可能有一些发行版想要编写自己的实现。

另一种选择是基于脚本的 initramfs。在这种情况下,busybox ash用作脚本外壳,甚至可能替换udevmdev,或者可能只是完全静态。我成立有些人busybox由于 int mint 的某些 fsck 错误而被丢弃到 shell,因此此实现可以适用于 mint。

如果您确实想确定,请尝试解压缩 initramfs 文件/boot并查看其中的内容。也可能会看到它安装在/initramfs.

答案2

[电子邮件受保护]和 systemd-fsck-root.service 是负责文件系统检查的服务。它们针对配置为文件系统检查的每个设备进行实例化。 systemd-fsck-root.service 负责根文件系统上的文件系统检查,但前提是根文件系统未在 initramfs 中检查。[电子邮件受保护]用于所有其他文件系统以及 initramfs 中的根文件系统。

https://www.freedesktop.org/software/systemd/man/[电子邮件受保护]

听起来您可能对此也感兴趣:

https://www.freedesktop.org/software/systemd/man/bootup.html

相关内容