はじめに
この実験では、Linux で特定のカーネルブートオプションが有効になっているかどうかを確認する方法を学びます。これを達成するための 3 つの主要な方法を探ります。
まず、cat /proc/cmdline コマンドを使用して、現在のブートセッション中にカーネルに渡されたコマンドライン引数を表示します。次に、/etc/default/grub にある GRUB 設定ファイルを調べて、これらのブートオプションの一部がどこで設定されているかを理解します。最後に、dmesg コマンドを使用してブートログを調べ、カーネルがブートオプションをどのように解釈して適用したかを確認します。これらの手順を完了することで、Linux システムのブートプロセスを診断し理解する実践的なスキルを身につけることができます。
cat /proc/cmdline でブートオプションを確認する
このステップでは、Linux システムが起動する際に使用されたブートオプションを表示する方法を探ります。この情報は /proc ファイルシステム内の特別なファイルに格納されています。
/proc ファイルシステムは、Linux の仮想ファイルシステムで、プロセスに関する情報やその他のシステム情報を提供します。これはディスク上に実際のファイルを含んでいるわけではなく、カーネルのデータ構造を見るための窓口を提供します。
私たちが関心を持っているファイルは /proc/cmdline です。このファイルには、ブート時にカーネルに渡されたコマンドライン引数が含まれています。これらの引数は、カーネルの動作や検出するハードウェアに影響を与えることができます。
このファイルの内容を表示するには、cat コマンドを使用します。cat コマンドは、ファイルの内容を表示するために使用されるシンプルなユーティリティです。
ターミナルが開いていない場合は、開きましょう。デスクトップの左側にある Xfce Terminal アイコンをクリックすることで、これを行うことができます。
次に、以下のコマンドを入力して Enter キーを押します。
cat /proc/cmdline
次のような出力が表示されます。
BOOT_IMAGE=/boot/vmlinuz-... root=UUID=... ro console=ttyS0,... quiet splash vt.handoff=7
正確な出力はシステムの設定によって異なりますが、起動されるカーネルイメージ (BOOT_IMAGE)、ルートファイルシステムの場所 (root=)、および ro(最初は読み取り専用ファイルシステム)、quiet、splash などの他のオプションが表示されます。
これらのブートオプションを理解することは、ブート問題のトラブルシューティングや特定のカーネル動作の設定に役立ちます。
覚えておいてください、/proc/cmdline はカーネルによって生成される動的なファイルであるため、その内容は現在のブートセッションを反映しています。
Continue をクリックして次のステップに進みます。
cat /etc/default/grub で GRUB 設定を確認する
前のステップでは、カーネルが起動した 後 にカーネルに渡されたコマンドライン引数を見ました。今度は、それらの引数の一部がどこから来るのかを見てみましょう。それは GRUB 設定ファイルです。
GRUB (GRand Unified Bootloader) はブートローダーです。その主な役割は、オペレーティングシステムのカーネルをメモリにロードし、制御を渡すことです。GRUB 設定ファイルは、ブートメニューのオプション、デフォルトのオペレーティングシステム、およびカーネルパラメータを決定します。
多くの Linux システムでの GRUB の主要な設定ファイルは /etc/default/grub です。このファイルには、実際の GRUB ブートメニュー設定を生成するために使用される設定が含まれています。
再び cat コマンドを使用して、このファイルの内容を表示します。
ターミナルが開いていない場合は、開きましょう。
次のコマンドを入力して Enter キーを押します。
cat /etc/default/grub
次のような出力が表示されます。
## If you change this file, run 'update-grub' afterwards to update
## /boot/grub/grub.cfg.
## For full documentation of the options in this file, see:
## info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2>/dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
## Uncomment to enable booting from a full graphics screen using grub-gfxpayload
#GRUB_GFXPAYLOAD_LINUX=keep
## Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
## The resolution used on graphical terminal
## needs to be in the format e.g. 640x480 or 800x600 or 1024x768
## and your graphics card needs to support it. A list of all available resolutions can
## be found with 'videoinfo' command in grub.
#GRUB_GFXMODE=640x480
## Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_UUID=true
## Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"
## Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
GRUB_CMDLINE_LINUX_DEFAULT で始まる行を探します。ここにリストされているオプション(例:"quiet splash")は、ブート時にカーネルに渡されることが多く、前のステップで cat /proc/cmdline の出力に見られたかもしれません。
このファイルは重要です。なぜなら、これを使うと、ブートするたびに手動で入力する必要なく、デフォルトのカーネルパラメータを設定できるからです。
重要な注意: 実際のシステムでこのファイルを変更した場合、通常はその後に sudo update-grub を実行して、変更を実際のブート設定ファイル (/boot/grub/grub.cfg) に適用する必要があります。ただし、この実験環境では、単にファイルを調べているだけです。
Continue をクリックして次に進みます。
dmesg でブートログを調査する
この最後のステップでは、dmesg コマンドを使用してカーネルリングバッファのメッセージを見ていきます。カーネルリングバッファは、ハードウェア検出、デバイスドライバ、およびブートプロセス中に発生するシステムイベントに関する情報を含む、カーネルからのメッセージを格納します。
dmesg コマンドは、これらのメッセージを表示するために使用されます。これは、ハードウェア問題の診断やシステム起動時に何が起こったかを理解するための重要なツールです。
ターミナルが開いていない場合は、開きましょう。
次のコマンドを入力して Enter キーを押します。
dmesg
このコマンドは、非常に長いメッセージのリストを出力する可能性があります。これらのメッセージは、カーネルが初期化され、システムのハードウェアやソフトウェアと相互作用する際に生成されます。
次のような出力が表示されます(正確な出力は大きく異なります)。
[ 0.000000] Linux version ... (buildd@lcy02-amd64-...) (gcc-...) #...-Ubuntu SMP ...
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-... root=UUID=... ro console=ttyS0,... quiet splash vt.handoff=7
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
...
[ 1.234567] usbcore: registered new interface driver usbfs
[ 1.234567] usbcore: registered new interface driver hub
[ 1.234567] usbcore: registered new device driver usb
...
出力には、/proc/cmdline で見たのと同様に、カーネルバージョンとコマンドライン引数が含まれていることに注意してください。
dmesg の出力は膨大になる可能性があるため、less や more などのページャーにパイプして、画面ごとに表示することがよく行われます。
このコマンドを試してみましょう。
dmesg | less
これで、矢印キーを使って出力を上下にスクロールできます。q を押すと less を終了します。
また、grep を使用して出力をフィルタリングし、「error」やハードウェアデバイスの名前などの特定のキーワードを検索することもできます。
たとえば、USB デバイスに関連するメッセージを表示するには、次のようにします。
dmesg | grep -i usb
このコマンドは、「usb」を含む行のみを表示します(-i フラグにより大文字小文字を区別しません)。
dmesg の出力を調査することは、Linux システム管理とトラブルシューティングにおける基本的なスキルです。
Continue をクリックして、この実験を完了します。
まとめ
この実験では、/proc/cmdline ファイルを調べることで、Linux でカーネルブートオプションが有効になっているかどうかを確認する方法を学びました。このファイルは、現在のブートセッション中にカーネルに渡されたコマンドライン引数の動的な表示を提供し、システムがどのように起動したか、およびその初期設定についての洞察を得ることができます。
また、システムが起動する前にカーネルブートパラメータを定義する重要な場所である GRUB 設定ファイル /etc/default/grub を見ることで、これらのブートオプションのソースを調べ始めました。



