我从 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
到/proc
和sysfs
到/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