LinuC レベル1(LPIC-1対応)対策
GRUB
ブートローダはカーネルを読み込む係で、Linux では GRUB2 が標準です。101 試験では設定ファイルの場所、パラメータ名、設定を反映させるコマンドが繰り返し問われます。
このコースのサンドボックスは GRUB ではなく syslinux で起動しているため、/etc/default/grub も /boot/grub も存在せず、実機演習は用意していません。ここは読んで覚える回です。書式とコマンド名がそのまま穴埋めで出るので、確実に覚えてください。
直接書き換えた grub.cfg は次の生成で消えます
最頻出の引っかけが、人が編集するファイルと機械が生成するファイルの区別です。
| 対象 | 役割 | 人が編集してよいか |
|---|---|---|
/etc/default/grub | GRUB 全体の既定値を書くファイル | 編集する |
/etc/grub.d/ 以下 | メニュー項目を生成するスクリプト群 | 必要なら編集する |
/boot/grub/grub.cfg | 実際に読まれる最終的な設定 | 直接編集しない |
grub.cfg は上の2つを材料に自動生成されます。直接書き換えても、次に生成コマンドが走った瞬間に上書きされて消えます。生成コマンドはディストリビューションで名前が違います。
ターミナル
# Debian / Ubuntu 系
update-grub
# Red Hat 系。出力先を明示するのが作法
grub2-mkconfig -o /boot/grub2/grub.cfgupdate-grub は実体としては grub-mkconfig -o /boot/grub/grub.cfg を呼ぶラッパーです。
ブートローダ本体をディスクへ書き込むのは grub-install (Red Hat 系では grub2-install) で、設定の再生成とは別物です。この2つの取り違えは頻出です。
/etc/default/grub の主なパラメータ
| パラメータ | 意味 |
|---|---|
GRUB_DEFAULT | 既定で選ばれるメニュー項目。番号または saved |
GRUB_TIMEOUT | メニューを表示して待つ秒数。0 なら即起動、-1 なら無限に待つ |
GRUB_CMDLINE_LINUX | 全カーネル項目に付けるパラメータ |
GRUB_CMDLINE_LINUX_DEFAULT | 通常起動の項目にだけ付けるパラメータ |
末尾の2つの違いが頻出です。前者はリカバリ項目を含むすべてに付き、後者は通常起動の項目にだけ付きます。quiet splash のような見た目の指定は後者に置くのが定石です。
ターミナル
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="quiet"書き換えたら必ず update-grub か grub2-mkconfig を走らせます。走らせない限り grub.cfg は古いままで、再起動しても何も変わりません。
ログインできない機械に入る
パスワードを忘れた、サービスの起動失敗でログインできない。こういう場面では、メニューから一時的にカーネルパラメータを足します。手順は次の通りです。
- 起動時にメニューが出たら、目的の項目にカーソルを合わせて
eを押す linuxまたはlinux16で始まる行を探す- 行末にパラメータを追記する
Ctrl-xまたはF10で、その内容で1回だけ起動する
| 追記する語 | 入る状態 |
|---|---|
single または s または 1 | シングルユーザーモード (systemd では rescue 相当) |
systemd.unit=rescue.target | rescue ターゲット |
systemd.unit=emergency.target | 最小限。root だけが読み取り専用でマウントされる |
init=/bin/bash | init を通さずシェルを直接起動する |
この編集は一時的で grub.cfg には保存されません。次の起動では元に戻ります。恒久的に変えるなら /etc/default/grub を直して生成コマンドを走らせます。
よくある引っかけ
GRUB_TIMEOUT=0 は「無限に待つ」ではなく「待たずに即起動」です。無限に待たせたいなら -1 です。逆に覚えている受験者が多いところです。
GRUB Legacy (0.9x) との違いも問われます。設定ファイルが /boot/grub/menu.lst で人が直接書くこと、そしてパーティション番号が 0 から数えられることです。1台目1番目のパーティションは Legacy が (hd0,0)、GRUB2 が (hd0,1) です。ディスク側はどちらも 0 始まりのままです。
復習ミニクイズ
Debian 系の機械で `/etc/default/grub` の `GRUB_TIMEOUT` を書き換えました。この変更を次回の起動に反映させるために必要な操作はどれですか。