/sbin/init 是可执行文件吗?

/sbin/init 是可执行文件吗?
# Mount the root filesystem.
1 .mount -o ro /dev/sda1 /mnt/root
# Boot the real thing.
2 .exec switch_root /mnt/root /sbin/init

这是 initramfs 的 /init 文件中的一段代码,如中所述巴布亚新几内亚。此处,rootfs 挂载到 /mnt/root,之后执行 switch_root,其中 /mnt/root 作为 newroot,/sbin/init 作为目标。

第 1 行执行后,/dev/sda1 的内容被挂载到 /mnt/root。我试过,

sudo mount -o ro /dev/sda1 /mnt/temp并收到此消息,

安装:/mnt/temp:/dev/sda1 已安装在/boot/efi 上。

所以我尝试了,cd /boot/efi它说

cd: 未找到命令

所以我./efi在 /boot 目录中尝试过,但现在我收到了这条消息,

bash: ./efi: 是一个目录

然后我尝试查看 /sbin/init 的内容:

cd /sbin/init但现在它说,

bash: cd: /sbin/init: 不是目录

我很困惑。怎么 /dev/sda1 和 /mnt/root 是目录,但突然 /sbin/init 是可执行文件?那不应该也是一个目录吗?

答案1

这里出现混乱是因为你误解了它的switch_root作用。

从联机帮助页:

NAME
       switch_root - switch to another filesystem as the root of the mount tree

SYNOPSIS
       switch_root [-hV]

       switch_root newroot init [arg...]

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

       WARNING: switch_root removes recursively all 
       files and directories on the current root filesystem.

通俗地说,这意味着目录指定为第一个参数(在您的情况下,/mnt/root成为新的根文件系统(它成为/),各种虚拟文件系统树被挂载,并且程序指定为第二个参数的将作为 new 执行init

更重要的是,看起来这些指令是错误的,并且不适用于您拥有的任何设置,因为在您的情况下/dev/sda1是挂载 EFI 文件系统的位置。

强烈地建议您在知道自己在做什么以及原因之前不要尝试执行此操作。

答案2

手册页说:

SWITCH_ROOT(8)                               System Administration                                                   > SWITCH_ROOT(8)

NAME
      switch_root - switch to another filesystem as the root of the
      mount tree

SYNOPSIS
      switch_root newroot init [arg...]

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

因此,当您运行 时switch_root /mnt/root /sbin/init,您正在使用 make /mnt/root/as /,复制一些系统目录,然后执行/sbin/init.

在我的 debian 系统上/sbin/init有一个符号链接:

$ ls -la /sbin/init
lrwxrwxrwx 1 root root 20 Aug 17 22:28 /sbin/init -> /lib/systemd/systemd

它链接到/lib/systemd/systemd一个可执行文件:

$ ls -la /lib/systemd/systemd
-rwxr-xr-x 1 root root 1649088 Aug 17 22:28 /lib/systemd/systemd

相关内容