2

romfs を使用して、カスタマイズされたローダブル モジュールを含むファイル システムを作成する必要があります。ただし、いくつかの混乱があります (私はまだカーネル関連に慣れていません)。

  • romfsドキュメントを読んだ後:私の知る限り、romfsromfsは に似たファイルシステムext2, ext3, ext4....であり、カーネルがブート時に必要とする init ramdisk を作成するために使用されます。romfsただし、バージョン 2.1.21 からカーネルに組み込まれていると言われています: romfs ホームページ。ホームページでは、画像ファイルgenromfsを作成するためのユーティリティしかダウンロードできません。romfsここで明確にしたいのですがromfs、カーネルに含まれるモジュールはromfsファイルシステムを読み取るためのgenromfsものであり、ファイルシステムを作成するために使用されますね (私は試しgenromfsましたが、確認したい)?

  • initrdmkinitrd -allow-missing -f initrd.img kernel-versionソースディレクトリ(ロードするファイルシステム)で作成され、: によってアンパッケージされgzip -dc initrd.img | cpio -idvます。これはカーネル起動時の initrd と同じですか? 圧縮が含まれていますが、そうではありませんが、これは問題ありませんか?mkinitrdgenromfs -fdv romfs.imginitrdromfs

  • もしそうなら、romfs初期のカーネル起動段階で読み取るために、モジュールをカーネルに組み込む必要がありますか? 私のシステムにはディスクレス マシンがあり、現在、initrdブート フェーズのファイルシステムおよび最終的なルート ファイルシステムとして使用されています。ただし、romfs読み取り専用であるため、romfs拒否されたユーザーを使用してファイルシステムに書き込むことができますか (したがって、のようなことはできませんecho "something" > /tmp/something.txt)。

4

2 に答える 2

2

(1) の場合、はい、モジュールromfsは、実装が非常に単純な単純な読み取り専用ファイル システムをサポートするファイル システムです。このプログラムを使用すると、モジュールがロードさgenromsれたカーネルの下でマウントおよびアクセスできる romfs ファイル システムのインスタンスを作成できます。romfs

genromfs ツールは、ブロック デバイスまたは既存のファイル システム上のファイルに配置できるファイル システム イメージを生成します。

(2) の場合、romfsファイル システムにアクセスするためのカーネル サポートがコンパイルされている限り、ファイル システムを初期 RAM ディスクとして使用できromfsます。違いは、initrd のロード時に発生します。標準initrdイメージの場合、ブートの開始に使用される ramdisk に解凍されます。romfs イメージでは、解凍されず、そのまま使用されます。

イメージをファイル システムとして使用する主な理由は、romfsイメージを読み取り専用メモリのブロックに配置し、拡張 RAM ディスク イメージに物理メモリを使用する必要なく直接アクセスできることです。

(3) については、はい、ファイル システムを、ロード可能なモジュールではなく組み込みコンポーネントとしてシステムにコンパイルする必要があります。つまり、カーネル ファイル システム構成Yのオプションに ' ' を選択します。rom file system

romfs ファイル システムをルート ファイル システムとして使用することはお勧めしません。POSIX 属性 (所有権、アクセス許可) が不足しているため、一般的な日常的な使用に適切なファイル システムとして実行することはできません (詳しくはわかりません)。確かに; このようなファイルシステムを使用するのは非常に奇妙だと思います)

initrd は実行時にメモリに解凍されるため、ファイル システムへの書き込みはシステムの再起動後に保持されません。その拡張 RAM ディスクのファイル システムに適切なパーミッションがある場合、カーネルは、通常のユーザーがディスク上の特定のコンテンツに変更を加えることを防止する必要があります。ユーザーが root としてシステムにログオンすることを許可せず、ファイル システムの権限に依存してファイルの変更を防止します。

読み取り専用で変更できないという事実は、/tmp ファイルが必要な場合は、genromfs呼び出しの一部としてディレクトリを作成する必要があり、次に tmpfs をそのマウント ポイントにマウントする必要があることを意味します。そのディレクトリへの書き込みを実行するために。

ルート ファイル システムを読み取り専用にする方法を探している場合は、リモート ファイル システムから読み取り専用共有をマウントすることを検討してください。この方法では、ユーザーがファイル システムを変更する実際の方法はありません。すべての書き込み操作はサーバーによって拒否されます。のような機能を使用するFS-Cache/CacheFSと、パフォーマンスがかなり向上します。

于 2012-05-15T08:10:40.983 に答える
2

ファイルシステムはromfs非常に限られているため、今日では基本的に使用されなくなりました。大規模な読み取り専用メディアがあり、圧縮に関心がない場合にのみ使用します。

以前は、initrd は、romfsロードされた RAM ブロックからマウントされたイメージであり、アンマウント後に RAM ブロックが解放されました。これは、フォーマット アーカイブ (ZIP ファイルに類似)tmpfsからのデータで初期化されるインスタンス (読み取り/書き込み RAM ベースのファイルシステム)に置き換えられました。cpio

カーネルが二度と必要とされないすべてのコードをアンロードするブート プロセスのポイント (「初期メモリの解放」) があり、これはプロセス 1 が開始される直前に発生します。このromfsアプローチでは、initrd はこの時点で initrd イメージからマウントされるため、romfs イメージにアクセスするために必要なコードと initrd コードはここにロードされたままにする必要があります。起動されます。

現在の initrd アプローチは、後でファイルシステムにも使用されるのと同じ ramdisk コードを使用し/tmp(システムがこのように構成されている場合)、そのファイルシステムの初期化全体がメモリが解放されるポイントの前に実行されるため、デッド コードは残りません。 initrd の起動後にロードされます。

romfs も cpio フォーマットの initrds も書き込めません。新しいコード パスは、最初にデータを書き込み可能なファイル システムにコピーします。これにより、initrd スクリプトがデータを書き込むことができます。ただし、これがイメージに書き戻されることはありません。

于 2012-05-15T08:12:17.283 に答える