有没有办法检测当前启动媒体用于启动Linux 实时操作系统? 在实时操作系统中,我想唯一地确定当前的启动媒体(CD/USB) 已用于启动磁盘。我想在操作系统级别而不是引导加载程序级别确定这一点。
当前启动媒体对我来说意味着媒体用于启动操作系统的引导加载程序所在的位置。
我已经检查了以下内容,但似乎没有一个具有当前启动媒体的开发路径的信息(例如 /dev/sr0 表示当前启动路径是 cd)
- 检查 systemd日志控制日志。
- 检查消息日志。
- 可能的接口udev和乌德瓦德公用事业。
- Busybox rdev就像建议的那样http://free-electrons.com/blog/find-root-device/。将 stat / 与 /dev/sr0 的主设备号:次设备号进行比较的过程似乎不匹配。
我还检查了 GRUB2,http://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/kern/i386/pc/init.cGRUB 环境变量根和字首已设置。例如,在从 CD 启动的 GRUB2 shell 上,如果我输入回显 $root,我得到hd31。现在我该如何将其映射到 Linux 块设备路径,例如/dev/sr0用于CD或某些/dev/sdb1是否需要 U 盘?我还检查了Linux:获取当前启动盘的设备名称和https://stackoverflow.com/questions/6787819/how-to-determine-the-booting-device但两者似乎都无济于事。
理想情况下我希望避免安装每张 CD/USB(/dev/sr0 或 /dev/sdb1 等)都手动检查 initrd 和内核文件是否存在。这种方法并不万无一失。有没有直接的方法可以做到这一点?
答案1
我找到了以下内容,但不确定什么可以设置它。也许是内核/grub,在这种情况下你应该设置。
“它也可能是另一个 LiveOS 文件系统的挂载点的设备节点引用,包括当前正在运行的(例如已启动的 Live CD/DVD/USB,其中 /run/initramfs/livedev 链接到已启动的 LiveOS 设备)”。
答案2
Linux 内核本身并不关心从哪里加载 - 它认为这是引导加载程序的工作。理想情况下,引导加载程序会将此信息记录在内核稍后可以获取的某个地方 - 这对于 U-Boot 引导加载程序来说很简单,但对于 x86 BIOS/UEFI 来说就不那么简单了。
因此,我认为您无法从 Linux 本身获取此信息,尽管大多数情况下 Linux 都是从根文件系统加载的。完全有可能从一个地方加载内核,而根文件系统则来自另一个地方,这在嵌入式平台上很常见。
因此有些事情你可以尝试。
cat /proc/cmdline
可能会告诉您根文件系统的加载位置 -root=
内核命令行参数会告诉您内核在加载时被告知在哪里找到根文件系统。您还可以发出
mount
命令并查找/
文件系统并查看其设备。