ホームページ  >  記事  >  運用・保守  >  Linux rootfsとは何ですか

Linux rootfsとは何ですか

藏色散人
藏色散人オリジナル
2023-04-19 10:11:253156ブラウズ

linux rootfs は Linux のルート ファイル システムを指します。ルート ファイル システムは、カーネルの起動時にマウントされる最初のファイル システムです。カーネル コード イメージ ファイルはルート ファイル システムに保存され、システム ブート プログラムはルート ファイル システムがマウントされると、いくつかの基本的な初期化スクリプトとサービスが実行のためにメモリにロードされます。

Linux rootfsとは何ですか

#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。

Linux rootfs とは何ですか?

Linux のルート ファイル システム (rootfs の原理と導入)

1. ファイルとはシステム

ファイル システムは、ストレージ デバイス (通常はディスクですが、NAND フラッシュに基づくソリッド ステート ドライブも含む) またはパーティション上のファイルを識別するためにオペレーティング システムによって使用される方法およびデータ構造です。 、ストレージデバイス上の ファイルを整理する方法。オペレーティング システムでのファイル情報の管理と保存を担当するソフトウェア組織は、ファイル管理システム、または略してファイル システムと呼ばれます。ファイル システムは、ファイル システム インターフェイス、オブジェクトの操作と管理のためのソフトウェア コレクション、オブジェクトと属性の 3 つの部分で構成されます。システムの観点から見ると、ファイル システムは、ファイル ストレージ デバイスのスペースを整理して割り当て、ファイル ストレージを担当し、保存されたファイルを保護および取得するシステムです。具体的には、ユーザー用のファイルの作成、ファイルの保存、読み取り、変更、ダンプ、ファイル アクセスの制御、ユーザーがファイルを使用しなくなったときのファイルの取り消しを担当します。

カーネルは Linux の中核ですが、ユーザーがオペレーティング システムと対話するために使用する主なツールはファイルです。これは、UNIX の伝統に従ってファイル I/O メカニズムを使用してハードウェア デバイスとデータ ファイルを管理する Linux に特に当てはまります。

2. ルート ファイル システムとは何ですか

ルート ファイル システムは、カーネルの起動時にマウントされる最初のファイル システムです。、カーネルコード イメージ ファイルはルート ファイル システムに保存され、システム ブート プログラムは、ルート ファイル システムのマウント後に実行できるように、いくつかの基本的な初期化スクリプトとサービスをメモリにロードします。

3. ルート ファイル システムはなぜそれほど重要ですか?

ルート ファイル システムの前に「ルート」が付いている理由は、それが「ルート」であることを示しています。 " 他のファイル システムをロードする場合。そのようなルートが存在しない場合、他のファイル システムをロードすることはできません。

ルート ファイル システムには、システムの起動に必要なディレクトリと重要なファイルのほか、他のファイル システムをマウントできるようにするために必要なファイルが含まれています。例:

init プロセスのアプリケーションはルート ファイル システムで実行する必要があります;
ルート ファイル システムはルート ディレクトリ "/" を提供します;
Linux がマウントするときに依存する情報パーティションはルートに保存されます ファイル システム内 /etc/fstab;
ls、cd、その他のコマンドなどのシェル コマンド プログラムはルート ファイル システムで実行する必要があります;
つまり、Linux システムのみカーネル自体は動作できません。動作するには、rootfs (etc ディレクトリ内の設定ファイル、/bin /sbin およびその他のディレクトリ内のシェル コマンド、/lib ディレクトリ内のライブラリ ファイルなど) の協力が必要です。

Linux が起動すると、最初にマウントする必要があるのはルート ファイル システムです。システムが指定されたデバイスからルート ファイル システムをマウントできない場合、システムはエラーを発生して起動を終了します。成功したら、他のファイル システムを自動または手動でマウントできます。したがって、異なるファイル システムがシステム内に同時に存在することができます。 Linux でファイル システムをストレージ デバイスに関連付けるプロセスは、マウントと呼ばれます。 mount コマンドを使用して、ファイル システムを現在のファイル システム階層 (ルート) に接続します。マウントを実行するときは、ファイル システム タイプ、ファイル システム、マウント ポイントを指定します。ルート ファイル システムがルート ディレクトリ下の「/」にマウントされると、ルート ディレクトリの下にルート ファイル システムのさまざまなディレクトリ、ファイル /bin /sbin /mnt などが存在し、他のパーティションを / にマウントします。 mnt ディレクトリ。 /mnt ディレクトリには、このパーティションのさまざまなディレクトリとファイルがあります。

4. ルート ファイル システムをカーネルにマウントする方法

init/main.c->

start_kernel()->vfs_caches_init(totalram_pages)–>

mnt_init()–>

/* sysfs用来记录和展示linux驱动模型,sysfs先于rootfs挂载是为全面展示linux驱动模型做好准备 /
     / mnt_init()调用sysfs_init()注册并挂载sysfs文件系统,然后调用kobject_create_and_add()创建fs目录 */
     sysfs_init();

/* init_rootfs()注册rootfs,然后调用init_mount_tree()挂载rootfs */
     init_rootfs();

init_mount_tree();

1、sysfs文件系统目前还没有挂载到rootfs的某个挂载点上,后续init程序会把sysfs挂载到rootfs的sys挂载点上;

2、rootfs是基于内存的文件系统,所有操作都在内存中完成;也没有实际的存储设备,所以不需要设备驱动程序的参与。基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘文件系统。

start_kernel
  vfs_caches_init
    mnt_init
      init_rootfs注册rootfs文件系统
      init_mount_tree 挂载rootfs文件系统
        vfs_kern_mount
          mount_fs
            type->mount其实是rootfs_mount
              mount_nodev
                fill_super 其实是ramfs_fill_super
                  inode = ramfs_get_inode(sb, NULL, S_IFDIR | fsi->mount_opts.mode, 0);
                  sb->s_root = d_make_root(inode);
                    static const struct qstr name = QSTR_INIT("/", 1);[1*]
                    __d_alloc(root_inode->i_sb, &name);
          …
          mnt->mnt.mnt_root = root;[2*]
          mnt->mnt.mnt_sb = root->d_sb;[3*]
          mnt->mnt_mountpoint = mnt->mnt.mnt_root;[4*]
          mnt->mnt_parent = mnt;[5*]
root.mnt = mnt;
        root.dentry = mnt->mnt_root;
        mnt->mnt_flags |= MNT_LOCKED;
        set_fs_pwd(current->fs, &root);
        set_fs_root(current->fs, &root);
  …
  rest_init
  kernel_thread(kernel_init, NULL, CLONE_FS);

kernel_init を実行する前に、roofs ファイル システムが確立されます。

1. ルート ディレクトリの名前は「/」に設定されます;
2. vfsmount のルート ディレクトリは次の場所に設定されます;
3. ルート ディレクトリはvfsmount はスーパー ブロックに設定されます;
4. vfsmount のファイル マウント ポイントはそれ自体を指すように設定されます;
5. vfsmount の親ファイル システムの vfsmount はそれ自体に設定されます;

5 、ルート ファイル システムのさまざまな共通ディレクトリの紹介

通常、ルート ファイル システムには少なくとも次のディレクトリが含まれます:

/etc/:存储重要的配置文件。
/bin/:存储常用且开机时必须用到的执行文件。
/sbin/:存储着开机过程中所需的系统执行文件。
/lib/:存储/bin/及/sbin/的执行文件所需的链接库,以及Linux的内核模块。
/dev/:存储设备文件。

6. 共通ディレクトリ

Linux ファイル システムには通常、次のディレクトリがあります:

/bin ディレクトリ
このディレクトリには、すべてのユーザーが使用できる基本的なコマンドが保存されています。これらのコマンドは、他のファイル システムをマウントする前に使用できるため、/bin ディレクトリは、 root ファイルシステムは同じパーティション内にあります。
/bin ディレクトリで一般的に使用されるコマンドには、cat、chgrp、chmod、cp、ls、sh、kill、mount、umount、mkdir、mknod、test などがあります。 Busybox を使用してルート ファイル システムを作成する場合、 bin ディレクトリには、使用可能なコマンドを含むいくつかの実行可能ファイルが表示されます。

/sbin ディレクトリ
このディレクトリには、システム コマンド (管理者のみが使用できるコマンド) が格納されます。システム コマンドは、/usr/sbin、/usr/local にも格納できます。 / sbin ディレクトリの下の /sbin ディレクトリには、基本的なシステム コマンドが保存されています。これらは、システムの起動やシステムの修復などに使用されます。/bin ディレクトリと同様に、/sbin は他のファイル システムをマウントする前に使用できます。 sbin ディレクトリはルート ファイル システムと同じパーティションにある必要があります。
/sbin ディレクトリで一般的に使用されるコマンドには、shutdown、reboot、fdisk、fsck などが含まれます。ローカル ユーザーによってインストールされたシステム コマンドは、/usr/local/sbin ディレクトリに配置されます。

/dev ディレクトリ
このディレクトリにはデバイス ファイルが保存されます。デバイス ファイルは Linux 独自のファイル タイプです。Linux システムでは、さまざまなデバイスがファイルの形式でアクセスされます。つまり、デバイス ファイルを読み書きすることで特定のハードウェアを操作します。たとえば、シリアル ポート 0 は「dev/ttySAC0」ファイルを通じて操作でき、MTD デバイスの 2 番目のパーティションには「/dev/mtdblock1」を通じてアクセスできます。

/etc ディレクトリ
さまざまな構成ファイルがこのディレクトリに保存されます。PC 上の Linux システムの場合、/etc ディレクトリには多くのファイルとディレクトリがあります。これらのディレクトリ ファイルはオプションです。 、それらは、システム上にあるアプリケーションと、構成ファイルが必要かどうかによって異なります。組み込みシステムでは、これらを大幅に削減できます。

/lib ディレクトリ
このディレクトリには共有ライブラリとロード可能ファイル (ドライバ) が格納され、共有ライブラリはシステムの起動に使用されます。 /bin /sbin ディレクトリ内のプログラムなど、ルート ファイル システム内の実行可能プログラムを実行します。

/home directory
ユーザー ディレクトリ、これはオプションです。通常のユーザーごとに、/home ディレクトリにユーザー名にちなんだ名前のサブディレクトリがあります。ユーザー関連の設定を保存します。ファイル。

/root directory
root ユーザーのディレクトリ、同様に、一般ユーザーのディレクトリは /home の下のサブディレクトリです。

/usr ディレクトリ
# /usr ディレクトリの内容は別のパーティションに保存され、システムの起動後にルート ファイル システムの /usr ディレクトリにマウントされます。 。これは、共有の読み取り専用プログラムとデータを保存します。これは、/usr ディレクトリの内容が複数のホスト間で共有できることを示しており、これらは主に FHS 標準に準拠しています。 /usr 内のファイルは読み取り専用で、他のホストに関連しており、変数ファイルは /var などの他のディレクトリに保存する必要があります。 /usr ディレクトリは組み込みシステムでは削減できます。

/var ディレクトリ
/usr ディレクトリとは対照的に、/var ディレクトリには、スプール ディレクトリ (メール、ニュース)、ログ ファイル、一時ファイルなどの可変データが保存されます。 。

/proc ディレクトリ
これは空のディレクトリで、proc ファイル システムのマウント ポイントとしてよく使用されます。proc ファイル システムは仮想ファイル システムです。実際のファイル システムはありません。ディレクトリとファイルは、システムの実行ステータスを表すためにカーネルによって一時的に生成され、ファイル制御システムを操作することもできます。

/mnt directory
は、ファイル システムを一時的にマウントするために使用されるマウント ポイントです。通常は空のディレクトリです。/ などの空のサブディレクトリをその中に作成することもできます。 mnt/cdram /mnt/hda1。 CD やハードドライブを一時的にマウントするために使用されます。

/tmp ディレクトリ
は、一時ファイル (通常は空のディレクトリ) を保存するために使用されます。一時ファイルを生成する必要がある一部のプログラムは /tmp ディレクトリを使用するため、/tmp ディレクトリは存在し、アクセス可能です。

関連する推奨事項: 「Linux ビデオ チュートリアル

以上がLinux rootfsとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。