從 initramfs 儲存變數(在啟動時)

從 initramfs 儲存變數(在啟動時)

在安裝真正的檔案系統之前,如何在啟動時保存環境變數?

我知道/etc/environment但在 initramfs 中該文件還無法存取。我還想過編寫一個文件來存儲該值,但是當該文件在系統上存在時,它會在安裝真實文件系統後被覆蓋

Ps:我只想儲存變數以供以後使用,而不是在啟動時讀取它

回答後編輯

大約 :

  • 建立內核模組(尋找幫助這裡那裡) 命名為mod.ko
  • 確保模組在啟動時可用(透過使用 initramfs-tools 將其包含在核心映像中或在檔案系統中尋找它)
  • 將以下行新增至您的腳本中

如果您尚未將該模組包含在核心映像中

insmod /path/to/mod.ko

否則直接

echo "env_var=value" > /proc/name_of_your_process

其中是模組name_of_your_process內部給出的名稱(執行時)__initentry = proc_create("name_of_your_process",0777,NULL,&my_fops);

然後在腳本的啟動過程中

cat /proc/name_of_your_process
>> env_var=value
rmmod mod.ko

答案1

好吧,常規環境繼承(只需導出它......)在理論上是可行的,但是......問題是,無論你的初始化檔案系統啟動可能會故意清理環境,因為通常這樣做是為了確保沒有發生任何奇怪的情況。不檢查環境變數可能會帶來安全隱憂。

我知道/etc/environment但在 initramfs 中該文件還無法存取。

有趣的部分是關於初始化檔案系統就是你可以做任何你想做的事。唯一的限制是你的想像。

您完全可以使該文件可存取。掛載、修改、卸載。或者,如果您使用的是傳統檔案系統 - 沒有校驗和 - 您甚至可以修改它沒有安裝任何東西(或至少不在讀寫模式)。 GRUB 對grubenv.

如果你不想弄亂檔案系統或物理存儲,你可以設定一個 ram 磁碟或 tmpfs 或循環裝置或... initramfs 有無數種方法可以留下一些東西(你通常必須製作一個努力清理)。

答案2

當 initramfs 清理它運行的所有檔案時交換器根目錄這將刪除除以下資料夾之外的所有檔案:/proc、/dev、/sys 和 /run。可以在這些資料夾之一中建立一個特殊文件,但其中涉及一些技巧。

看:是否可以在/proc/sys中建立目錄和檔案?

當然,最簡單的選擇是在加載根檔案系統之後但運行 init 之前添加一個腳本以將變數寫入檔案系統。這將進入“本地底部「資料夾。有什麼理由不能這樣做嗎?

答案3

這很簡單。看一下 fstab。然後安裝根設備並將變數寫入已安裝的根設備上的檔案中。我從 kdump 學到了這一點。

相關內容