答案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
}
原答案,因历史原因保留
两种选择:
- root 在引导期间以只读方式安装,并且在里面实施正在运行
fsck
。系统是个在里面在 mint 上实现,并且由于您已经检查了它是否存在,所以此选项不适用。 /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
用作脚本外壳,甚至可能替换udev
为mdev
,或者可能只是完全静态。我成立有些人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