Linux live OS 確定目前啟動媒體(CD/USB),用於啟動駐留在相同媒體上的核心和 rootfs

Linux live OS 確定目前啟動媒體(CD/USB),用於啟動駐留在相同媒體上的核心和 rootfs

有沒有辦法檢測到目前啟動媒體用於啟動Linux 即時作業系統?在即時作業系統中,我想唯一地確定當前的啟動媒體(光碟/USB)已用於啟動磁碟。我想在作業系統層級而不是引導程式層級確定這一點。

目前啟動媒體對我來說是指媒體用於啟動作業系統的引導程式所在的位置。

我檢查了以下內容,但似乎沒有一個有當前啟動媒體的開發路徑資訊(例如 /dev/sr0 指示當前啟動路徑是 cd)

  • 檢查系統日誌控制紀錄.
  • 檢查訊息紀錄.
  • 可能的接口在烏德夫烏德瓦德姆公用事業。
  • Busybox研發就像建議的那樣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.c其中 GRUB 環境變量字首已設定。例如,在從 CD 啟動的 GRUB2 shell 上,如果我輸入回顯$root,我得到高清31。現在我該如何將其對應到 Linux 區塊裝置路徑,例如/dev/sr0CD 或一些/dev/sdb1用於筆式驅動器?我也檢查過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 設備)」。

https://www.mankier.com/8/livecd-iso-to-disk

答案2

Linux 核心本身並不關心它是從哪裡加載的——它認為這是引導程式的工作。理想情況下,引導程式會將這些資訊記錄在內核稍後可以取得的地方 - 這對於 U-Boot 開機載入程式來說是微不足道的,但 x86 BIOS/UEFI 則不然。

因此,我真的不認為您可以從 Linux 本身獲取此信息,儘管根文件系統所在的位置可能是大多數時候加載 Linux 的位置。 100% 可能從一個地方加載核心並從另一個地方獲取根檔案系統,這在嵌入式平台上很常見。

所以有些事情你可以嘗試。

  • cat /proc/cmdline可能會告訴您根檔案系統被載入到哪裡 -root=核心命令列參數告訴您載入時核心被告知在哪裡找到根檔案系統。

  • 您也可以發出mount命令並查找/檔案系統,然後查看其設備。

相關內容