このすみ技術ろぐ

とあるWebエンジニアが、技術や趣味について書くブログです。

Linuxの初期RAMディスクについて

Liuxが起動するまでの流れは、ざっくり次のような流れになっています。

  1. 電源投入
  2. BIOS/UEFIの起動
  3. ブートローダ(GRUB,GRUB2..)
  4. カーネル(vmlinuz)とinitramfs(初期RAMディスク)の読み込み
  5. カーネルの実行
  6. initramfs(初期RAMディスク)の実行
  7. initの実行(SysVinit,Systemd..)

ブートローダは、MBR (Master Boot Record)の先頭に記録されていたりするので比較的理解しやすいのですが、この中でよくわからなかったのがinitramfsです。

初期RAMディスクとは

検索して調べていたのですが、1CD Linuxの作成サイト様にすごくわかりやすい解説がありました。

初期RAMディスクとは、Linuxシステムの起動の途中で一時的に利用される小さなルートファイルシステムのことです。

初期RAMディスクには、/bin /lib /dev などのディレクトリがあり、それぞれのディレクトリには必要最低限のコマンドやデバイスファイルなどが含まれています。 つまり、初期RAMディスクは、小さなLinuxシステムであるともいえます。
https://my1cdlinux.eksd.jp/createbootablelivecd_aboutinitrd.html より

初期RAMディスクのファイルにはinitrd形式とinitramfs形式があり、GRUBやGRUB2のブートローダ設定ファイルを見ると、実際に指定されていることがわかります。

[root@centos7 grub2]# cat /boot/grub2/grub.cfg | grep initrd
set tuned_initrd=""
    initrd16 /initramfs-3.10.0-1127.19.1.el7.x86_64.img
    initrd16 /initramfs-3.10.0-957.5.1.el7.x86_64.img
    initrd16 /initramfs-3.10.0-957.1.3.el7.x86_64.img
    initrd16 /initramfs-3.10.0-862.14.4.el7.x86_64.img
    initrd16 /initramfs-3.10.0-862.el7.x86_64.img
    initrd16 /initramfs-0-rescue-6a3b2d45446a4d9d841027638e2d24f2.img

初期RAMディスクがなぜ必要なのか?

Linuxのカーネルモジュールは、カーネルが必要とする機能を必要な時にメモリにロードするようになっています。 そうすれば、カーネル本体は小さい状態を維持できます。

しかしながら、最終的にルートファイルシステムに指定されるハードディスクなどのデバイスは、SCSIやUSB接続といった物理的な接続方法に加え、EXTやXFSをはじめとするファイルシステムタイプなどさまざまです。 これらの状況にすべて対応しようとすると、どうしてもカーネルが肥大化してしまいます。

そこで登場するのが初期RAMディスクです。 初期RAMディスクには、必要最低限のコマンドやデバイスファイルなどが含まれています。

この初期RAMディスクによる一時的なルートファイルシステムを経由して、Linuxは最終目的である真のルートファイルシステムのマウントへと到達します。

さいごに

本記事で解説をいろいろ書こうと思ったのですが、あまりにも1CD Linuxの作成サイト様の解説がわかりやすすぎたので、気になる方はぜひ以下のサイト様をご参照ください。

my1cdlinux.eksd.jp