我應該在 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
到/proc
和sysfs
到/sys
。最後, beforeswitch_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