initramfsで変数を保存する(起動時)

initramfsで変数を保存する(起動時)

実際のファイルシステムをマウントする前に、起動時に環境変数をどのように保存できますか?

私は知っていますが、/etc/environmentinitramfsはまだファイルにアクセスできません。値を保存するためにファイルを作成することも検討しましたが、ファイルがシステムに存在している間に物理ファイルシステムをマウントした後に上書きされます。

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/environmentinitramfsはまだファイルにアクセスできません。

興味深い部分はおおよそファイルシステムの初期化欲しいものは何でもできるということです。唯一の限界はあなたの想像力です。

ファイルにアクセスできるように設定できます。マウント、修正、削除。あるいは、チェックサムなしで既存のファイルシステムを使用している場合は、それを変更することもできます。いいえ何でもインストールします(または少なくとも読み取り/書き込みモードでない場合)。 GRUBはいgrubenv

ファイルシステムや物理ストレージを混乱させたくない場合は、ramディスク、tmpfs、またはループデバイスを設定できます。 initramfs何かを残す方法は数え切れないほどあります(通常はクリーンアップに取り組む必要があります)。それ)。

答え2

initramfsが実行されているすべてのファイルをクリーンアップするときルートディレクトリの切り替えこれにより、/proc、/dev、/sys、/run フォルダを除くすべてのファイルが削除されます。これらのフォルダの1つに特別なファイルを作成することは可能ですが、いくつかのトリックがあります。

望むより:/proc/sysにディレクトリとファイルを作成することは可能ですか?

もちろん、最も簡単なオプションは、ルートファイルシステムをロードした後にinitを実行する前に、ファイルシステムに変数を書き込むスクリプトを追加することです。これは「地域の床「フォルダー。できない理由はありますか?

答え3

これはとても簡単です。 fstabを見てください。次に、ルートデバイスをマウントし、マウントされたルートデバイスのファイルに変数を書き込みます。私はこれをkdumpから学びました。

関連情報