我应该在 initramfs 中挂载和卸载什么?

我应该在 initramfs 中挂载和卸载什么?

我从 Gentoo Wiki 找到了这个简单的 initramfs 示例:

#!/bin/busybox sh

# Mount the /proc and /sys filesystems.
mount -t proc none /proc
mount -t sysfs none /sys

# Do your stuff here.
echo "This script just mounts and boots the rootfs, nothing else!"

# Mount the root filesystem.
mount -o ro /dev/sda1 /mnt/root

# Clean up.
umount /proc
umount /sys

# Boot the real thing.
exec switch_root /mnt/root /sbin/init

它安装proc/procsysfs/sys。最后,在 之前switch_root,它会卸载它们。然而,在man switch_root我读到:

switch_root moves already mounted /proc, /dev, /sys and /run to newroot and makes newroot the new root filesystem and starts init process

  • 为什么这个 initramfs 示例会卸载proc并且sys是否switch_root应该移动它们?
  • sysfs安装到/sys;来自哪里sysfs以及为什么它的名称不同?
  • 我看过一个示例/dev,那么我如何知道要挂载哪些目录?

答案1

为什么这个 initramfs 示例会卸载proc并且sys是否switch_root应该移动它们?

手册页你阅读文件交换机根目录由提供实用程序Linux。正如您所说,此命令将一些虚拟文件系统移动到新的根目录。但是,您提供的脚本有舍邦 #!/bin/busybox sh,这意味着它使用忙碌盒。 BusyBox 提供了自己的交换机根目录,这不会移动这些文件系统。 BusyBox 的目的是将多个包合而为一,因此该脚本很可能使用 BusyBox 版本的switch_root.

sysfs安装到/sys;来自哪里sysfs以及为什么它的名称不同?

该脚本中的命令使用mount -t [type] [device] [dir]:

  • cat /proc/filesystems列表[type]
  • 如果cat /proc/filesystems列出带有 的文件系统nodev,那么它是虚拟文件系统, 和[device]是任意的(通常none)。
  • [dir]是挂载点。

要查看文件系统的当前挂载点,请运行mount并使用grep来查找文件系统。在我的系统上,mount | grep sysfs显示sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime).

我看过一个示例/dev,那么我如何知道要挂载哪些目录?

我不知道如何判断要挂载哪些虚拟文件系统,但我相信 Gentoo 的示例。如果您在 initramfs 中还有更多事情要做(您可能会这样做),那么我建议您执行以下操作:

mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t devtmpfs devtmpfs /dev
mkdir /dev/pts
mount -t devpts devpts /dev/pts

相关内容