第5章 手動のカーネルアップグレード

Red Hat Enterprise Linux カーネルは、サポートしているハードウェアとの整合性と互換性を保てるように、Red Hat Enterprise Linux カーネルチームがカスタムを構築します。Red Hat は、一連の厳格な品質保証テストに合格してから、カーネルをリリースしています。

Red Hat Enterprise Linux カーネルは、Yum または PackageKit パッケージマネージャーを使用し、簡単にアップグレードして検証できるように、RPM 形式でパッケージされます。PackageKit は自動的に Red Hat コンテンツ配信ネットワークサーバーをクエリーし、カーネルパッケージなど利用可能な更新が含まれれるパッケージを通知します。

本章は、yum ではなく、rpm コマンドを使用して手動でカーネルパッケージを更新する必要のあるユーザーに だけ 有用です。

警告

できる限り Yum または PackageKit パッケージマネージャーを使用して新しいカーネルをインストールしてください。理由は、これらのツールは常に新しいカーネルを インストール するからです。他の方法で現行バージョンを入れ替えると (失敗した場合) システムが起動できなくなる可能性が出てきます。

警告

Red Hat では、カスタムのカーネルは サポートされていません。ただし、ナレッジベースドキュメント https://access.redhat.com/solutions/25039 でガイダンスを確認できます。

yum でカーネルパッケージをインストールする方法は、https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/ch-yum.html#sec-Updating_Packages を参照してください。

Red Hat コンテンツ配信ネットワークに関する情報は、https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/chap-Subscription_and_Support-Registering_a_System_and_Managing_Subscriptions.html を参照してください。

5.1. カーネルパッケージの概要

Red Hat Enterprise Linux には以下のカーネルパッケージが含まれています。

  • kernel: シングルコア、マルチコア、マルチプロセッサーシステム用のカーネルが含まれます。
  • kernel-debug: カーネル診断ができるように複数のデバッグオプションが有効になっているカーネルが含まれます。デバッグオプションが有効になっているとパフォーマンスが低下します。
  • kernel-devel: kernel パッケージに対して、モジュールを構築するのに十分なカーネルヘッダーと makefiles を含んでいます。
  • kernel-debug-devel: カーネル診断ができるように複数のデバッグオプションが有効になっている開発バージョンのカーネルが含まれます。デバッグオプションが有効になっているとパフォーマンスが低下します。
  • kernel-doc: カーネルソースからのドキュメントファイルです。これらのファイルには、同梱で配布される Linux カーネルとデバイスドライバーのさまざまな部分が文書化されています。このパッケージをインストールすると、オプションへの参照が提供され、読み込み時に Linux カーネルモジュールに渡すことができます。

    デフォルトでは、これらのファイルは /usr/share/doc/kernel-doc-kernel_version/ ディレクトリーに配置されています。

  • kernel-headers: Linux カーネルと、ユーザー空間ライブラリーおよびプログラムとの間のインターフェースを指定する C ヘッダーファイルが含まれます。このヘッダーファイルはほとんどの標準プログラムを構築するのに必要な構造と定数を定義します。
  • linux-firmware: さまざまなデバイス操作に必要なファームウェアすべてを含んでいます。
  • perf: Linux カーネルのパフォーマンスモニタリングを有効にする perf ツールを含んでいます。
  • kernel-abi-whitelists: Red Hat Enterprise Linux カーネル ABI に関連する情報を含んでいます。これには、外部の Linux カーネルモジュールが必要とするカーネル記号の一覧と実施を支援する yum プラグインが含まれます。
  • kernel-tools: Linux カーネル操作のツールとサポートドキュメントが含まれています。

5.2. アップグレードへの準備

カーネルをアップグレードする前に、予防的な前準備手順の実行をお薦めします。

まず、問題が発生した場合に備えて、機能するブートメディアがシステムにあることを確認します。ブートローダーで新しいカーネルをブートするように正しく設定されていない場合には、このメディアを使って Red Hat Enterprise Linux をブートすることができます。

USB メディアは多くの場合、ペンドライブサムディスク または キー などと呼ばれるフラッシュデバイスの形式、または、外部接続のハードディスクとして提供されています。このタイプのほとんどすべてが VFAT ファイルシステムとしてフォーマットされています。ただし、ext2ext3ext4 または VFAT としてフォーマットされているメディア上でブート可能な USB メディアを作成することができます。

ディストリビューションのイメージファイル、または最低限ブートメディア (minimal boot media) イメージを USB メディアに転送することができます。デバイスには十分な空き領域があることを確認してください。約 4 GB がディストリビューション DVD イメージ用に必要で、約 700 MB がディストリビューション CD イメージ用に、そして約 10 MB が最低限ブートメディアイメージ用に必要です。

Red Hat Enterprise Linux のインストール DVD、またはインストール CD-ROM#1 からの boot.iso ファイルのコピーと、約 16 MB の空き領域を持つ VFAT ファイルシステムでフォーマットした USB ストレージデバイスが必要になります。

USB ストレージデバイスの使用に関する詳しい情報は、https://access.redhat.com/solutions/624423「How to format a USB key」https://access.redhat.com/solutions/39373「How to manually mount a USB flash drive in a non-graphical environment 」 を確認してください。

以下の手順では、コピー先のファイルと同じパス名を指定しなければ、USB ストレージデバイス上にある既存のファイルは影響を受けません。USB ブートメディアを作成するには、root ユーザーとして以下のコマンドを実行します。

  1. syslinux パッケージがインストールされていない場合は、これをインストールします。root として yum install syslinux コマンドを実行します。
  2. USB ストレージデバイス上に SYSLINUX ブートローダーをインストールします。

    # syslinux /dev/sdX1

    sdX にはデバイス名を指定します。

  3. boot.iso と USB ストレージデバイス用にマウントポイントを作成します。

    # mkdir /mnt/isoboot /mnt/diskboot
  4. boot.iso をマウントします。

    # mount -o loop boot.iso /mnt/isoboot
  5. USB ストレージデバイスをマウントします。

    # mount /dev/sdX1 /mnt/diskboot
  6. ISOLINUX ファイルを boot.iso から USB ストレージデバイスにコピーします。

    # cp /mnt/isoboot/isolinux/* /mnt/diskboot
  7. boot.iso からの isolinux.cfg ファイルを USB デバイス用の syslinux.cfg ファイルとして使用します。

    # grep -v local /mnt/isoboot/isolinux/isolinux.cfg > /mnt/diskboot/syslinux.cfg
  8. boot.iso と USB ストレージデバイスをアンマウントします。

    # umount /mnt/isoboot /mnt/diskboot
  9. このブートメディアでマシンを再起動して、ブートできることを確認してから他の操作に移ります。

別の方法として、フロッピードライブがあるシステム上でブートディスクを作成するには、mkbootdisk パッケージをインストールして、root として mkbootdisk コマンドを実行します。このパッケージをインストールした後に使用法について確認するには、man mkbootdisk の man ページを参照してください。

どのカーネルがインストールされているかを判定するには、シェルプロンプトでコマンド yum list installed "kernel-*" を実行します。出力では、システムのアーキテクチャーに応じて、以下のパッケージのすべてか、または一部が示されます。バージョン番号は異なる場合があります。

# yum list installed "kernel-*"
kernel.x86_64                   3.10.0-54.0.1.el7           @rhel7/7.0
kernel-devel.x86_64             3.10.0-54.0.1.el7           @rhel7
kernel-headers.x86_64           3.10.0-54.0.1.el7           @rhel7/7.0

この出力から、カーネルのアップグレード用にダウンロードすべきパッケージを判断します。シングルプロセッサーのシステムでは、必要なパッケージは kernel パッケージのみです。別のパッケージの説明は、「カーネルパッケージの概要」 を参照してください。

5.3. アップグレードされたカーネルのダウンロード

システム用に更新されたカーネルが利用可能かを判定する手段は数種類あります。

yum が Red Hat Network からの更新されたカーネルのダウンロードとインストールに使用される場合は、「初期 RAM ファイルシステムイメージの確認」「ブートローダーの確認」 の指示にのみ従ってください。カーネルはデフォルトで起動するように 変更しないでください。Red Hat Network がデフォルトのカーネルを最新バージョンに自動的に変更します。カーネルを手動でインストールするには、「アップグレードの実行」 に進みます。

5.4. アップグレードの実行

必要なパッケージをすべて取り込んだ後は、既存カーネルをアップグレードします。

重要

新しいカーネルに問題がある場合を考え、古いカーネルの維持を強く推奨します。

シェルプロンプトで、カーネル RPM パッケージを格納しているディレクトリーに移動します。rpm コマンドに -i 引数を使用して古いカーネルを残します。-U オプションは現在インストールしてあるカーネルを上書きして、ブートローダーの問題を起こすので、これは 使用しないでください。例を示します。

# rpm -ivh kernel-kernel_version.arch.rpm

次の手順では、初期 RAM ファイルシステムイメージが作成されているかどうかを検証します。詳細は「初期 RAM ファイルシステムイメージの確認」を参照してください。

5.5. 初期 RAM ファイルシステムイメージの確認

初期 RAM ファイルシステムイメージの仕事は、IDE、SCSI、RAID などのブロックデバイスモジュールをプレロードすることです。そうすることで、それらのモジュールが通常配備されている root ファイルシステムがアクセス可能になりマウントできるようになります。Red Hat Enteprise Linux 7 システムでは、パッケージマネージャーの YumPackageKit、または RPM のいずれかを使用して新しいカーネルをインストールする場合は、常に Dracut ユーティリティーがインストールスクリプトにより呼び出され、initramfs (初期 RAM ファイルシステムイメージ) を作成します。

/etc/sysctl.conf ファイルまたは別の sysctl 設定ファイルを変更してカーネル属性を変更し、変更した設定がブートプロセスの初期段階で使用される場合には、dracut -f コマンドを使用して、初期 RAM ファイルシステムイメージの再構築が必要な場合があります。たとえば、ネットワーク関連の変更を受けて、ネットワークにアタッチされたストレージから起動する場合などです。

IBM eServer System i (「IBM eServer System i 上の初期 RAM ファイルシステムイメージとカーネルの検証」 を参照) 以外のすべてのアーキテクチャーでは、dracut コマンドの実行により initramfs を作成できますが、通常は手動で initramfs を作成する必要はありません。この手順は、カーネルとその関連パッケージが Red Hat 配布の RPM パッケージからインストールされているか、またはアップグレードされている場合に自動的に実行されます。

現在のカーネルバージョンに該当する initramfs が存在していること、それが grub.cfg 設定ファイル内で正しく指定されているかを検証するには、以下の手順にしたがいます。

初期 RAM ファイルシステムイメージの確認

  1. root として、/boot ディレクトリーのコンテンツを一覧表示して、カーネル (vmlinuz-kernel_version) と最新のバージョン番号を持つ initramfs-kernel_version を見つけます。

    例5.1 カーネルと initramfs バージョンの一致を確認

    # ls /boot
    config-3.10.0-67.el7.x86_64
    config-3.10.0-78.el7.x86_64
    efi
    grub
    grub2
    initramfs-0-rescue-07f43f20a54c4ce8ada8b70d33fd001c.img
    initramfs-3.10.0-67.el7.x86_64.img
    initramfs-3.10.0-67.el7.x86_64kdump.img
    initramfs-3.10.0-78.el7.x86_64.img
    initramfs-3.10.0-78.el7.x86_64kdump.img
    initrd-plymouth.img
    symvers-3.10.0-67.el7.x86_64.gz
    symvers-3.10.0-78.el7.x86_64.gz
    System.map-3.10.0-67.el7.x86_64
    System.map-3.10.0-78.el7.x86_64
    vmlinuz-0-rescue-07f43f20a54c4ce8ada8b70d33fd001c
    vmlinuz-3.10.0-67.el7.x86_64
    vmlinuz-3.10.0-78.el7.x86_64

    例5.1「カーネルと initramfs バージョンの一致を確認」 は以下を示します。

    • 3 つのカーネルがインストールされています (より正確には、3 つのカーネルファイルが /boot ディレクトリーにあります)。
    • 最新のカーネルは vmlinuz-3.10.0-78.el7.x86_64 です。
    • そのカーネルバージョンに一致する initramfs ファイルである initramfs-3.10.0-78.el7.x86_64kdump.img も存在します。

      重要

      /boot ディレクトリーで、複数の initramfs-kernel_versionkdump.img ファイルが見つかる場合があります。それらは、カーネルのデバッグ目的で Kdump メカニズムで作成される特殊ファイルであり、システムの起動には使用されず、無視しても問題ありません。kdump の詳細は、Red Hat Enterprise Linux 7 カーネルクラッシュダンプガイド を参照してください。

  2. 使用している initramfs-kernel_version ファイルが、/boot ディレクトリーにある最新カーネルのバージョンと一致しない場合、または他の特定の状況では、Dracut ユーティリティーを使用して initramfs ファイルを生成する必要がある場合があります。root としてオプションなしで dracut を呼び出すと、それが /boot 内にある最新のカーネル用に initramfs ファイルを生成するようになります。

    # dracut

    dracut が既存の initramfs を上書きするには (たとえば、 initramfs が破損している場合など)、-f--force オプションを使用する必要があります。これを使用しないと、dracut は既存の initramfs ファイルの上書きを拒否します。

    # dracut
              Does not override existing initramfs (/boot/initramfs-3.10.0-78.el7.x86_64.img) without --force

    現在のディレクトリーに initramfs を作成するには、dracut initramfs_name kernel_version を呼び出します。

    # dracut "initramfs-$(uname -r).img" $(uname -r)

    プレロードするカーネルモジュールを指定する必要がある場合には、/etc/dracut.conf 設定ファイルの add_dracutmodules+="module more_modules " ディレクティブの括弧の中に (.ko などの任意のファイル名のサフィックスを取り除いて) 対象のモジュール名を追加します。dracut で作成した initramfs イメージファイルのファイルコンテンツを一覧表示するには、lsinitrd initramfs_file コマンドを使用します。

    # lsinitrd /boot/initramfs-3.10.0-78.el7.x86_64.img
    Image: /boot/initramfs-3.10.0-78.el7.x86_64.img: 11M
    ========================================================================
    dracut-033-68.el7
    ========================================================================
    
    drwxr-xr-x  12 root     root            0 Feb  5 06:35 .
    drwxr-xr-x   2 root     root            0 Feb  5 06:35 proc
    lrwxrwxrwx   1 root     root           24 Feb  5 06:35 init -> /usr/lib/systemd/systemd
    drwxr-xr-x  10 root     root            0 Feb  5 06:35 etc
    drwxr-xr-x   2 root     root            0 Feb  5 06:35 usr/lib/modprobe.d
    [output truncated]

    オプションと用途に関する詳しい情報は man dracutman dracut.conf を参照してください。

  3. /boot/grub2/grub.cfg 設定ファイルを検査して、起動中のカーネルバージョンについて initramfs-kernel_version.img ファイルが存在することを確認します。以下が例になります。

    # grep initramfs /boot/grub2/grub.cfg
    initrd16 /initramfs-3.10.0-123.el7.x86_64.img
    initrd16 /initramfs-0-rescue-6d547dbfd01c46f6a4c1baa8c4743f57.img

    詳しい情報は 「ブートローダーの確認」 を参照してください。

IBM eServer System i 上の初期 RAM ファイルシステムイメージとカーネルの検証

IBM eServer System i のマシンでは、初期 RAM ファイルシステムとカーネルファイルは1つのファイルに統合してあり、これは addRamDisk コマンドで作成されます。カーネルとその関連パッケージがインストールされているか、または Red Hat 配布の RPM パッケージでアップグレードされている場合は、この手順は自動的に実行されるので、手動で実行する必要はありません。このファイルが作成されていることを確認するには、root で以下のコマンドを実行して /boot/vmlinitrd-kernel_version ファイルがすでに存在することを確認します。

# ls -l /boot/

kernel_version は、先程インストールしたカーネルバージョンと一致する必要があります。

初期 RAM ファイルシステムイメージへの変更を戻す方法

たとえば、システムの設定を間違えたことで起動しなくなったような場合は、以下の手順に従って初期 RAM ファイルシステムイメージに加えた変更を戻す必要があります。

初期 RAM ファイルシステムイメージへの変更を戻す方法

  1. GRUB メニューでレスキューカーネルを選択してシステムを再起動します。
  2. initramfs の誤動作を引き起こしている間違った設定を変更します。
  3. root で以下のコマンドを実行して、正しい設定で initramfs を作成し直します。

    # dracut --kver kernel_version --force

上記の手順は、sysctl.conf ファイルで vm.nr_hugepages を間違って設定してしまった場合などに便利です。sysctl.conf ファイルは initramfs に含まれているため、新たな vm.nr_hugepages 設定は initramfs で適用されてしまい、initramfs が再構築されてしまいます。ただし、設定が間違っているので、新規の initramfs は破損しており、新規に構築されるカーネルは起動しないため、上記の手順を使用した設定の修正が必要になります。

初期 RAM ファイルシステムイメージのコンテンツの一覧表示

initramfs に含まれるファイルを一覧表示するには、root で以下のコマンドを実行します。

# lsinitrd

/etc ディレクトリーにあるファイルだけを表示するには、以下のコマンドを使用します。

# lsinitrd | grep etc/

現行カーネルの initramfs に保存されている特定ファイルのコンテンツを出力するには、-f オプションを使用します。

# lsinitrd -f filename

たとえば、sysctl.conf のコンテンツを出力するには、以下のコマンドを実行します。

# lsinitrd -f /etc/sysctl.conf

カーネルのバージョンを指定するには、--kver オプションを使用します。

# lsinitrd --kver kernel_version -f /etc/sysctl.conf

たとえば、カーネルバージョン 3.10.0-327.10.1.el7.x86_64 についての情報を一覧表示するには、以下のコマンドを使用します。

# lsinitrd --kver 3.10.0-327.10.1.el7.x86_64 -f /etc/sysctl.conf

5.6. ブートローダーの確認

yum コマンドまたは rpm コマンドで、カーネルをインストールしてください。

rpm を使用してカーネルをインストールすると、カーネルパッケージはブートローダー設定ファイル内にその新しいカーネル用のエントリーを作成します。

いずれのコマンドも、/etc/sysconfig/kernel 設定ファイルに以下の設定を含める場合にのみ、新しいカーネルがデフォルトのカーネルとして起動するよう設定することに留意してください。

DEFAULTKERNEL=kernel
UPDATEDEFAULT=yes

DEFAULTKERNEL オプションは、デフォルトのカーネルパッケージタイプを指定します。UPDATEDEFAULT オプションは、新規カーネルパッケージがデフォルトで新しいカーネルにするかを指定します。