Mount

我應該在 initramfs 中掛載和解除安裝什麼?

  • October 20, 2020

我從 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。最後, before 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,那麼我怎麼知道要掛載哪些目錄?

為什麼這個 initramfs 範例會解除安裝proc以及sys是否switch_root應該移動它們?

您閱讀的手冊頁記錄了util-linux提供的switch_root。如您所說,此命令將一些虛擬文件系統移動到新根目錄。但是,您提供的腳本有shebang,這意味著它使用BusyBox。BusyBox 提供了自己的switch_root,它不會移動這些文件系統。BusyBox 的目的是將多個包合二為一,因此腳本很可能使用 BusyBox 版本的. #!/bin/busybox sh``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

引用自:https://unix.stackexchange.com/questions/614231