Linuxの起動に関するトラブルを調べていくと「initramfs」や「dracut」という用語に必ず行き当たります。
これらは普段意識する機会は少ないですが、起動が途中で止まる、デバイス名が変わって認識されない、必要なドライバが読み込まれないといった問題では切り離せない存在です。
initramfsは、Linuxカーネルがブート時に利用する一時的なルートファイルシステムで、本来のルートディスクに到達する前の“橋渡し”の役割を担います。
一方でdracutは、このinitramfsを生成・再構築するための仕組みを提供するツールです。カーネルを更新したり、後からストレージを追加した場合、必要なモジュールやドライバが含まれていないとシステムは正常に起動できません。
そのような状況でdracutを用いてinitramfsを再作成すれば、ブートプロセスに必要な環境を整え直すことができます。
この記事では、initramfsの基本からdracutの仕組みや活用方法までを整理し、トラブル解決につなげるための知識を解説していきます。
Linuxの基礎知識 【Linuxの基礎知識】学習ロードマップ7ステップで完全習得 🟢基本操作系 🟡 ログ・監視系 🔵 プロセス・サービス系 🟣 ネットワーク系 🔴 ディスク・ファイル系 🟤 セキュリティ・運用系 🟠 仮想化・バックアップ
📌 Linux環境を扱うための最初のステップを学ぶ入門カテゴリ
📌 システムの健全性を保つためのログ活用と監視テクニック
📌 サービスを安定稼働させるためのプロセス管理と制御の基本
📌 ネットワーク通信を理解しトラブルを解決するための実践知識
📌 データを守り効率的に扱うためのストレージ管理スキル
└─【Linuxの基礎知識】ディスク・ファイル系でよくあるトラブルと解決の入口
├─ 【Linuxの基礎知識】ファイルシステムを極める!ディレクトリ構造とその関連性を解説
├─ 【Linuxの基礎知識】ディレクトリとファイル操作を完全マスター!初心者向けガイド
├─ 【Linuxの基礎知識】リンクとiノードを理解してファイル管理をマスターしよう
├─ 【Linuxの基礎知識】ディスク管理の完全ガイド!初心者から実践までを徹底解説
├─ 【Linuxの基礎知識】再起動時に入れ替わるデバイス名「sdX」を固定したい
├─ 【Linuxの基礎知識】df / duコマンドによる容量解析とncdu・iotopでの応用監視
└─ 【Linuxの基礎知識】mount / umountとfstabの基本と応用
📌 安全なシステム運用を実現するためのアクセス制御と防御策
📌 柔軟な環境構築とリスク対策を両立する仮想化とバックアップ技術
再起動後にデバイスマップが変わる原因
Linux OSで外部ストレージからLUN(Logical Unit Number)を追加し、再起動後にデバイスマップが変わる原因は、主に以下の要因によるものです。
デバイスマップが変わる原因
過去の経験から、再起動時にデバイス名が入れ替わる代表的な(ケース)原因をいくつか挙げてみます。(どれも実際に筆者が過去にぶち当たった障害です。)
恐らく下記ケースの中にある「ストレージ構成の変更」が原因と思われます。
ケースの具体例
- カーネル関連の変更
・新しいカーネルをインストールした場合
カーネルをアップデートすると、対応する新しいinitramfsが必要です。
・カーネルモジュールの変更
カーネルモジュール(例: ファイルシステムなど)を追加・削除・更新した。 - ストレージ構成の変更
・ディスクやパーティションの追加・変更
ブートプロセスに影響するディスク、パーティションを変更した。
・マルチパス(multipath)の設定変更
SAN(ストレージエリアネットワーク)環境でmultipath.confを編集した。 - ブート構成の変更
・「/etc/fstab」の変更
UUIDやLABELを利用してファイルシステムを指定し直した。
・LVM(論理ボリューム管理)の変更
ルートファイルシステムがLVM上にあるLVMの構成を変更した。
・ファイルシステムの変更
新しいファイルシステム(例: XFS, ZFSなど)をルートパーティションに使用した。 - 特殊なケース
・カーネルパラメータの変更
ブートローダー(GRUBなど)でカーネルパラメータを変更した。
・システムの復旧作業
initramfsが破損している場合や、システムが正常に起動しない。
通常外部ディスクのLUN領域は、余裕を見てサイズを切り出し、未使用領域は後の拡張分として切り出しておくのが一般的です。ただし、昨今は予算の関係から必要と思われるサイズギリギリでLUNを切り出し、不足分はその都度追加する切り張りプロジェクトが増えている気がします。
上記の理由などからOS起動段階で読み込まれるイメージファイル内のデバイス構成情報と起動後にMODPROBEによって認識されるデバイス構成情報に差が発生しているのではないかと思われます。
LinuxOSがデバイスを認識するプロセス

特に上記の「1. カーネル関連の変更」「カーネルモジュールの変更」にフォーカスします。これは主に外部ディスクの容量が足りずに後から外部ストレージ側のLUN(スライス)を追加した場合によく起こる障害です。(実際これ系の質問が一番届いていました。)
つまり、Linuxが起動するとき、最初に「ミニLinux」という小さな仕組みが働いています。このミニLinuxは、起動に必要な部品を確認するために「initramfs」という特別なファイルを使います。この中には、ディスクの情報やドライバがあらかじめ入っています。
でも、もし新しいディスクを追加したり、設定を変えたりしても、initramfsの中身が古いままだと、その新しいディスクの情報がLinuxに正しく伝わりません。その結果、ディスクが見える順番が変わってしまい、「/dev/sdX」という名前が再起動のたびに入れ替わることがあります。
これを防ぐためには、initramfsの中身を新しい状態に更新する必要があります。こうすることで、Linuxが起動するときに最新のディスク情報を使い、デバイス名がコロコロ変わる問題を解消できるのです。
OSが外部デバイスを認識する順序は下記のとおりです。
ポイント
- 電源を投入する。
- BIOSを起動、デバイス認識・初期化
- ブートデバイスから(HDD)MBRをロード
- ブートローダーを起動
- ブートローダが「カーネル」イメージをロード:
こで小さなLinuxが起動します。
「Linuxのブートストラップで読み込まれるイメージ」後述参照 - カーネルを起動
- カーネルが「systemd(旧/sbin/init)」を実行する
外部デバイス認識順序の「ブートローダが「カーネル」イメージをロード」する時、内部ではカーネルがイメージファイルを読み込み、小さなLINUXを展開します。(「initramfs」とは、この時カーネルから読み込まれるイメージファイルの正体です。)
展開された小さなLINUXが起動してカーネルが起動した後、「systemd(旧/sbin/init)」が実行され、正式なLINUXシステムが起動します。狭義の"Linux"とは、このカーネル部分のみを指しています。一連の処理を終えて、いよいよLinuxが立ち上がります。
なぜこのような煩わしい仕組みが採用されているかは、昨今のOSシステムの肥大化に伴い、システム起動までに必要な時間が長くなる傾向にあります。そこで予め小さなLINUXを内部で立ち上げ、システム起動までの時間を短く見せかける必要があるためです。
正式なLINUXが起動後、「MODPROBE」モジュールが実行され始めて最新のデバイス情報が認識されます。「initramfs:イメージファイル」の中身は、初期構築時に作成され自動で更新することはありません。その後、新たなデバイスの追加が発生した場合は「initramfs」を最新の情報を反映させるため再作成する必要があるのです。
Linuxのブートストラップで読み込まれるイメージ
initramfsは、Linuxシステムが起動する際に非常に重要な役割を果たし、カーネルがハードウェアを認識し、必要なドライバやツールを提供するために使用されます。ブートプロセスの初期段階でシステムが正しく動作するために欠かせない部分です。
- カーネル起動
Linuxカーネルがシステムのブートプロセスを開始します。
- initramfs実行
小さなLinux環境がカーネルによって立ち上がります。この環境は、構築時の必要なドライバやツール情報を含んでおり、各種デバイスとの接続を行います。
- ドライバ提供
initramfsは、ハードウェアデバイスを操作するためのドライバを提供します。これにより、システムは周辺機器と通信できるようになります。
- ファイルシステムの準備
必要なファイルシステムがマウントされ、システムが正常に動作するための準備が整います。
- システム初期化
システムの初期化が行われ、必要なサービスやプロセスが起動されます。
- ルートファイルシステム切り替え(正規Linux)
最後に、initramfsから正規のLinuxルートファイルシステムに切り替えられ、完全なLinux環境が立ち上がります。
initramfsとは
initramfsはLinuxシステムの起動において不可欠な役割を果たしており、ハードウェアとの接続やファイルシステムの準備を行うことで、スムーズなブートプロセスを実現しています。
1. initramfsとは何か?
- 初期RAMファイルシステム(initramfs)は、Linuxカーネルが起動する際に、システムが必要とする初期的なドライバやツールを含む、一時的なファイルシステムです。通常、initramfsは圧縮されたアーカイブ形式(例:initramfs.img)として提供され、システムメモリ(RAM)に展開されます。
2. 役割と目的
- カーネルのサポート: initramfsは、カーネルがディスクを正しく認識するために必要なドライバを提供します。これにより、カーネルがブート時にハードウェアやファイルシステムにアクセスできるようになります。
- ファイルシステムの準備:
ルートファイルシステム(通常はHDDやSSDにある)をマウントするための準備をします。これが完了すると、initramfsは通常のファイルシステムに切り替わります。 - システムの初期化:
initramfsは、カーネルが起動する前に必要なツール(たとえば、ディスクのマウント、LVMやRAIDの設定など)を実行します。
3. initramfsが使用される場面
- 新しいハードウェアのサポート:
特定のハードウェアを認識するためのドライバを提供する。 - 暗号化されたディスク:
例えば、LUKS(Linux Unified Key Setup)で暗号化されたディスクを復号化する際に使用されます。 - 特殊なストレージ構成:
RAIDやLVM、ネットワークブートなど、複雑なストレージ設定を行う際にも使用されます。
4. 起動プロセスとの関係
- カーネル起動:
カーネルがロードされ、initramfsがメモリに展開されます。 - 2.initramfsの実行:
必要なドライバや設定を実行し、最終的にルートファイルシステムをマウントします。 - 3.ルートファイルシステムへの切り替え:
initramfsが終了し、実際のルートファイルシステムが使用されるようになります。
5. initramfsとinitrdの違い
- initramfsとinitrd(Initial RAM Disk)は似たような役割を持ちますが、initramfsはより新しい技術で、initrdよりも柔軟で効率的に動作します。
デバイスマップを固定化する
新たにデバイス「LUN(外部ディスク)」の追加によってチグハグになったiniitramfs内の情報を最新のデバイス情報へ更新します。
initramfsの再作成手順
initramfsの再作成は、ストレージデバイス関連の初期化プロセスに関わる重要な変更を適用するために必要な場合があります。設定後に予期しない動作を防ぐため、変更内容を正確に理解し、適切に再作成するようにしてください。
step
1現在のinitramfsの確認
現在の「initramfs」を確認します。「initramfs」は「/boot/」は以下に作成されています。
ls -l /boot/initramfs-$(uname -r).img
cp -ip initramfs-$(uname -r).img initramfs-$(uname -r).img_$(date +%Y%m%d)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@job01 boot]# cd /boot [root@job01 boot]# ls -l /boot/initramfs-$(uname -r).img -rw------- 1 root root 18365340 Jul 14 2022 initramfs-3.10.0-1160.71.1.el7.x86_64.img [root@job01 boot]# cp -ip initramfs-$(uname -r).img initramfs-$(uname -r).img_$(date +%Y%m%d) [root@job01 boot]# ------------------------------------------------- [root@job01 boot]# ls -l drwxr-xr-x. 3 root root 4096 Nov 25 2020 efi drwxr-xr-x. 2 root root 4096 Nov 25 2020 grub drwx------. 5 root root 4096 Jul 14 2022 grub2 -rw------- 1 root root 18365340 Jul 14 2022 initramfs-3.10.0-1160.71.1.el7.x86_64.img -rw------- 1 root root 18365340 Jul 14 2022 initramfs-3.10.0-1160.71.1.el7.x86_64.img_20241130 👈 バックアップファイル [root@job01 boot]# ------------------------------------------------- [root@job01 boot]# rm initramfs-3.10.0-1160.71.1.el7.x86_64.img rm: remove regular file ‘initramfs-3.10.0-1160.71.1.el7.x86_64.img’? y [root@job01 boot]# ------------------------------------------------- [root@job01 boot]# ls -l drwxr-xr-x. 3 root root 4096 Nov 25 2020 efi drwxr-xr-x. 2 root root 4096 Nov 25 2020 grub drwx------. 5 root root 4096 Jul 14 2022 grub2 -rw------- 1 root root 18365340 Jul 14 2022 initramfs-3.10.0-1160.71.1.el7.x86_64.img_20241130 |
※ 思わぬ事故を防ぐために必要に応じてバックアップを取得してから実行してください。
「initramfs」の上書き再作成は怒られてしまうため、一旦現在の「initramfs」ファイルを削除してから再作成コマンドを実行します。
step
2再作成コマンドの実行
Linuxでは、各カーネルバージョンに対応したinitramfsイメージが/bootディレクトリに保存されています。
末尾に$(uname -r)が付いている理由は、現在使用しているカーネルバージョンを動的に取得し、適切なバージョンに対応するinitramfsを再作成するためです。
- RHEL/CentOS系
dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
1 2 |
[root@job01 boot]# dracut "initramfs-$(uname -r).img" $(uname -r) [root@job01 boot]# |
特に問題がなければ、イメージファイルの作成ご、プロンプトが帰ってきます。
すでに同じカーネルバージョンが存在する状態でオーバーライド(上書き)しようとすると怒られます。
1 2 3 4 5 6 7 |
[root@job01 boot]# dracut "initramfs-$(uname -r).img" $(uname -r) Will not override existing initramfs (/boot/initramfs-3.10.0-1160.71.1.el7.x86_64.img) without --force Broadcast message from systemd-journald@job01 (Fri 2024-12-06 13:12:24 JST): dracut[27105]: Will not override existing initramfs (/boot/initramfs-3.10.0-1160.71.1.el7.x86_64.img) without --force Message from syslogd@job01 at Dec 6 13:12:24 ... dracut:Will not override existing initramfs (/boot/initramfs-3.10.0-1160.71.1.el7.x86_64.img) without --force [root@job01 boot]# ls -l |
- Debian/Ubuntu系
update-initramfs -u -k $(uname -r)
step
3変更を確認
コマンド実行後、作成された「initramfs」のカーネルがマシンのカーネルと一致していることを確認します。
ls -l /boot/initramfs-$(uname -r).img
1 2 3 |
[root@job01 boot]# ls -l /boot/initramfs-$(uname -r).img -rw------- 1 root root 18364187 Dec 6 13:14 /boot/initramfs-3.10.0-1160.71.1.el7.x86_64.img [root@job01 boot]# |
step
4再起動
カーネルの更新が必要なため、必ずOSの再起動を行なう必要があります。
reboot
※実行する場合は、必ずバックアップファイルを作成してからコマンドを実行してください。
ココに注意
- dracutやupdate-initramfsでエラーが発生した場合、設定ファイル(例:/etc/fstab, multipath.conf, udevルール)を再確認してください。
- /etc/fstabに誤った設定がある場合、ブートプロセスが停止する可能性があるため、特に注意が必要です。
▶︎ この記事を読んだら、次は 「df / duコマンドによる容量解析とncdu・iotopでの応用監視」 を読むのがおすすめです!