在 Linux 操作系统中,挂载根文件系统(Root Filesystem)是系统启动过程中的关键步骤之一。根文件系统包含了系统启动和运行所需的所有基本文件和目录。以下是有关根文件系统挂载的详细说明:
根文件系统挂载过程
-
Bootloader 加载内核:
-
启动过程开始于引导加载程序(Bootloader),如 GRUB 或 LILO。引导加载程序加载 Linux 内核并将控制权交给内核。
-
-
内核初始化:
-
内核开始初始化其各个子系统,包括内存管理、进程管理和设备驱动程序。此时,内核还在使用只读的初始根文件系统(通常是 initramfs)。
-
-
挂载初始根文件系统(initramfs/initrd):
-
内核加载 initramfs 或 initrd,这是一种临时的根文件系统,包含基本的用户空间工具和脚本,用于挂载实际的根文件系统。initramfs/initrd 包含的工具通常包括
busybox
等。
-
-
运行初始脚本:
-
内核执行 initramfs/initrd 中的初始脚本,这些脚本负责检测硬件并准备实际的根文件系统挂载。例如,这些脚本可能会探测磁盘设备并加载必要的驱动程序。
-
-
挂载实际的根文件系统:
-
初始脚本挂载实际的根文件系统到一个临时的挂载点(通常是
/mnt
)。 -
使用
mount
命令挂载根文件系统,例如:mount /dev/sda1 /mnt
其中,
/dev/sda1
是实际根文件系统所在的设备或分区。
-
-
切换到实际根文件系统:
-
初始脚本使用
pivot_root
或switch_root
命令切换到实际的根文件系统。pivot_root
将新的根文件系统挂载到/
,而将旧的根文件系统移动到一个临时位置。 -
使用
pivot_root
的示例:pivot_root /mnt /mnt/old_root
或者,使用
switch_root
的示例:switch_root /mnt /sbin/init
-
-
启动 init 进程:
-
一旦实际的根文件系统挂载完毕,initramfs/initrd 中的初始脚本将启动系统的第一个用户进程,即
init
进程(或systemd
),通常位于/sbin/init
或/lib/systemd/systemd
。
-
挂载根文件系统的常见命令和选项
-
mount 命令:
-
mount
命令用于挂载文件系统。基本语法如下:mount <设备> <挂载点>
例如,挂载
/dev/sda1
到/mnt
:mount /dev/sda1 /mnt
-
-
指定文件系统类型:
-
使用
-t
选项可以指定文件系统类型:mount -t ext4 /dev/sda1 /mnt
-
-
查看挂载点:
-
使用
mount
命令不带参数可以查看当前所有的挂载点:mount
-
-
卸载文件系统:
-
使用
umount
命令可以卸载文件系统:umount /mnt
-
总结
挂载根文件系统是 Linux 启动过程中至关重要的一步,涉及多个阶段和工具。理解这一过程有助于排除启动问题并自定义系统启动行为。以下是该过程的主要步骤:
-
引导加载程序加载内核。
-
内核初始化。
-
加载并挂载初始根文件系统(initramfs/initrd)。
-
运行初始脚本检测硬件并准备实际的根文件系统。
-
挂载实际的根文件系统。
-
切换到实际的根文件系统。
-
启动 init 进程,进入用户空间。
这些步骤确保系统能够顺利启动并运行,提供稳定的操作环境。