前回に引き続き、CentOS 7のインストーラーの変更点についてみていきます。今回は、新しく搭載されたGRUB 2、運用管理者が知っておくべきCentOS 7でのレスキューモードの利用方法についてご紹介します。
CentOS 7で採用された新ブートローダ「GRUB 2」
CentOS 7から、ブートローダにGRUB 2が採用されています。従来のCentOS 6系までのGRUBと構造が大きく異なるため、注意が必要です。以下では、CentOS 7の管理者が、最低限知っておくべきGRUB 2の設定方法について紹介します。
GRUB 2の設定の基本は、/etc/default/grubファイルの編集と、grub2-mkconfigコマンドによる設定ファイルの生成です。GRUB 2の設定ファイル/etc/default/grubファイルにパラメータを設定し、grub2-mkconfigによってその設定を含んだファイル/boot/grub2/grub2.cfgファイルを生成します。
以下は、GRUB 2メニューが表示される時間(タイムアウト)を60秒に設定し、さらにIPv6を無効にする例です。タイムアウト値は、/etc/default/grubファイルの「GRUB_TIMEOUT=」に設定します。ブートパラメータは、/etc/default/grubファイルの「GRUB_CMDLINE_LINUX=」に設定します。
2 | GRUB_TIMEOUT=60 ←デフォルトの5を60に変更 |
3 | GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" |
5 | GRUB_DISABLE_SUBMENU=true |
6 | GRUB_TERMINAL_OUTPUT="console" |
7 | GRUB_CMDLINE_LINUX="nomodeset crashkernel=auto vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rhgb quiet ipv6.disable=1" ←IPv6を無効化するパラメータを追加 |
8 | GRUB_DISABLE_RECOVERY="true" |
上記/etc/default/grubファイルの変更を有効にするため、/boot/grub2/grub.cfgを再生成します。
01 | # cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.org |
02 | # grub2-mkconfig -o /boot/grub2/grub.cfg |
03 | Generating grub configuration file ... |
04 | Found linux image: /boot/vmlinuz-3.10.0-123.el7.x86_64 |
05 | Found initrd image: /boot/initramfs-3.10.0-123.el7.x86_64.img |
06 | Found linux image: /boot/vmlinuz-3.10.0-123.6.3.el7.x86_64 |
07 | Found initrd image: /boot/initramfs-3.10.0-123.6.3.el7.x86_64.img |
08 | Found linux image: /boot/vmlinuz-0-rescue-41f28cff512735f914d4f894f1944df1 |
09 | Found initrd image: /boot/initramfs-0-rescue-41f28cff512735f914d4f894f1944df1.img |
BIOS搭載マシンとUEFI搭載マシンでgrub2-mkconfigコマンドで出力するファイルgrub.cfgファイルのパスが異なりますので注意して下さい。
BIOS搭載マシン
1 | # grub2-mkconfig -o /boot/grub2/grub.cfg |
UEFI搭載マシン
1 | # grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg |
OSを再起動してタイムアウト値が反映されているかを確認します。
OSのブートメニューが表示されたら、メニュー画面が60秒間表示されていることを確認します。OSが起動したら、ブートパラメータが有効になっているかを確認します。
2 | BOOT_IMAGE=/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1 ro nomodeset crashkernel=auto vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rhgb quiet ipv6.disable=1 |
以上でカーネルのパラメータを変更することができました。CentOS 6系に慣れた管理者は、grub2-mkconfigコマンドを実行することを忘れてしまうミスを犯しがちです。GRUB 2の設定は慎重に行うようにして下さい。
ブートメニューのエントリーを追加する方法
GRUB 2では、複数のブートメニューエントリーが/boot/grub2/grub.cfgファイルに生成されますが、独自のブートパラメータを含んだカスタムのブートメニューエントリーを追加したい場合、grub.cfgファイルを直接編集することはできません。そこで、GRUB 2では、/etc/grub.d/40_customファイルを使用します。このファイルに、カスタムのエントリーを追加することができます。以下では、既存のエントリーにさらにカスタムのエントリーを追加する例です。
まず、cpコマンドで、既存の40_customファイルのバックアップを取っておき、バックアップを取ったファイルの実行権限を削除します。
2 | # cp 40_custom 40_custom.org |
3 | # chmod -x 40_custom.org |
カスタムのエントリーを40_customファイルに記述します。
02 | menuentry 'CUSTOM CentOS Linux, with Linux 3.10.0-123.el7.x86_64' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1' { |
09 | if [ x$feature_platform_search_hint = xy ]; then |
10 | search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 033eb63d-33d5-49e4-b045-463f2297ccaa |
12 | search --no-floppy --fs-uuid --set=root 033eb63d-33d5-49e4-b045-463f2297ccaa |
14 | linux16 /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1 ro nomodeset crashkernel=auto vconsole.font=latarcyrheb-sun16 vconsole.keymap=jp106 rhgb quiet ipv6.disable=0 |
15 | initrd16 /initramfs-3.10.0-123.el7.x86_64.img |
今回は、カスタムメニューを追加したことがわかるように、上記ファイルのmenuentry行に、'CUSTOM CentOS Linux, with Linux 3.10.0-123.el7.x86_64'を記載しました。
さらに、追加したカスタムメニューがOS起動時に自動的に選択されるように/etc/default/grubファイルを編集します。複数あるエントリーから特定のものを選択してデフォルトで起動させるには、40_custom ファイルのmenuentry行で、''で囲んだエントリー名の文字列をGRUB_DEFAULT行にそのまま記述することが可能です。
3 | GRUB_DEFAULT='CUSTOM CentOS Linux, with Linux 3.10.0-123.el7.x86_64' |
/boot/grub2/grub.cfgファイルを生成します。
1 | # grub2-mkconfig -o /boot/grub2/grub.cfg |
ブート可能なカーネルのエントリーを表示するには、/boot/gurb2/grub.cfgファイルのmenuentryの以下の'CentOS Linux, ...'の箇所を確認します。
1 | # cat /boot/grub2/grub.cfg |grep ^menuentry |
2 | menuentry 'CentOS Linux, with Linux 3.10.0-123.el7.x86_64' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1' { |
3 | menuentry 'CentOS Linux, with Linux 3.10.0-123.6.3.el7.x86_64' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.6.3.el7.x86_64-advanced-f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1' { |
4 | menuentry 'CentOS Linux, with Linux 0-rescue-41f28cff512735f914d4f894f1944df1' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-41f28cff512735f914d4f894f1944df1-advanced-f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1' { |
5 | menuentry 'CUSTOM CentOS Linux, with Linux 3.10.0-123.el7.x86_64' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1' { |
また、以下のようにawkコマンドを駆使することで、'CentOS Linux...'の箇所のみを抽出することもできます。
1 | # awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg |
2 | CentOS Linux, with Linux 3.10.0-123.el7.x86_64 |
3 | CentOS Linux, with Linux 3.10.0-123.6.3.el7.x86_64 |
4 | CentOS Linux, with Linux 0-rescue-41f28cff512735f914d4f894f1944df1 |
5 | CUSTOM CentOS Linux, with Linux 3.10.0-123.el7.x86_64 |
上記より、メニューエントリー' CUSTOM CentOS Linux, with Linux 3.10.0-123.el7.x86_64'が登録されていることがわかります。以上で、新しく追加したカスタムのエントリーで起動する準備が整いましたので、OSを再起動します。
OS再起動後に、自動的にカスタムのメニューが選択され、正常に起動するかを確認してください。
先述のawkコマンドを駆使したエントリーの表示では、4つのエントリーが表示されていますが、デフォルトで起動してほしいエントリーは、/etc/default/grubファイル内で、数字で指定することも可能です。たとえば、先述のawkコマンドの出力結果の一番上に出力されている「CentOS Linux, with Linux 3.10.0-123.el7.x86_64」をブート時にデフォルトで起動させる場合は、/etc/default/grubファイルのGRUB_DEFAULT=0を指定します。
/etc/default/grubファイルを更新したら、必ず/boot/grub2/grub.cfgファイルを生成してからOSを再起動して下さい。
1 | # grub2-mkconfig -o /boot/grub2/grub.cfg && reboot |
レスキューモードを使った復旧手順
CentOS 7では、レスキューモードが用意されています。このレスキューモードは、ローカルマシンにインストールされたCentOS 7が起動不能に陥った際に、それを復旧する役目を担います。また、レスキューモードを使えば、起動不能に陥ったCentOS 7からユーザーデータを取り出すことも可能です。以下では、CentOS 7のレスキューモードを使った復旧手順やユーザーデータの取得、さらに、ディスクイメージ全体の取得について解説します。
パッケージの上書きインストールによる復旧手順
OSが起動しなくなる原因は、施設の停電による突然の電源断や、管理者のオペレーションミス、ディスク障害など様々なものがあります。通常、ディスク障害や停電による電源断によってハードウェアやOSの設定状況に深刻なダメージがある場合は、ハードウェアの交換を行い、OSの再インストールを行うことが一般的です。しかし、ハードウェアの障害ではなく、管理者のオペレーションミスによってOSの起動に関わるプログラムを誤って削除する、あるいは、起動スクリプトの動作テストが不十分なことに起因したOSの起動障害に陥るといった場合は、CentOS 7のインストーラーが持つレスキューモードによって復旧することが可能です。
図5:レスキューモードに移行するには、CentOS 7のインストールメディアで起動後、「Troubleshooting」を選択する(クリックで拡大)
図6:Troubleshootingを選択後、「Rescue a CentOS system」を選択するとレスキューモードに移行する(クリックで拡大)
レスキューモードでは、通常、ローカルディスクにインストールされている既存のCentOS 7を認識します。レスキューモードにおける/mnt/sysimageディレクトリ配下に対して、ローカルディスクにインストールされている既存のCentOS 7を読み書き可能な状態でマウントさせる事が可能です。これにより、ローカルディスクにインストールされている既存のCentOS 7に対して様々な操作を施すことが可能になります。
図7:レスキューモードにおいて「Continue」を選択すると、ローカルディスクにインストールされた既存のCentOS 7を/mnt/sysimageディレクトリに読み書き可能でマウントする。書き込み不可の状態でマウントする場合は、「Read-Only」を選択する(クリックで拡大)
レスキューモードで、どのようにローカルディスクが見えているかをdfコマンドで確認します。すると、/mnt/sysimageディレクトリに、ローカルディスクにインストールされた既存のCentOS 7が見えていることが確認できます。また、CentOS 7のインストールメディアは、/run/install/repoディレクトリにマウントされます。
図8:レスキューモードにおいて、/mnt/sysimageディレクトリ配下にローカルディスクにインストールされた既存のCentOS 7のパーティションが見える(クリックで拡大)
レスキューモードでは、/mnt/sysimageディレクトリ配下にマウントされた既存のCentOS 7に対して、CentOS 7のメディアを使って、RPMパッケージ等を上書きインストールすることが可能です。例えば、なんらかの理由でmountコマンド自体が機能しなくなったと仮定します。mountコマンドが機能しない場合、システムはパーティションのマウントに失敗するため、OSの起動に失敗します。そこで、mountコマンドが含まれるutil-linux RPMパッケージをレスキューモードで再インストールします。インストールを行うには、rpmコマンドのオプションとして、-vhi --force --root /mnt/sysimageを指定します。これにより、/mnt/sysimage配下をルートパーティションとみなして既存のCentOS 7にパッケージを強制的にインストールすることができます。これにより、mountコマンドが含まれるutil-linux RPMパッケージがインストールされ、mountコマンドの復旧が実現できます。
図9:レスキューモードで、util-linux RPMパッケージを/mnt/sysimageディレクトリにマウントされた既存のローカルディスクのCentOS 7に強制的にインストールしている様子(クリックで拡大)
レスキューモードを終了するには、rebootコマンドでレスキューモードを離脱し、システムを再起動してください。
レスキューモードでのユーザーデータの救出
CentOS 7のOS本体に致命的なダメージがあり、OSの起動が困難な場合でも、ユーザーデータのみを救出したい場合があります。ユーザーデータの救出は、レスキューモードを使って行うことが可能です。ユーザーデータがUSBメモリやブルーレイDVDメディア等に入る程度の小さい場合は、レスキューモードの状態で、メディアをマウントすることでユーザーデータを退避できます。しかし、ユーザーデータがテラバイト級になる場合は、テープ装置の利用や、ネットワーク経由で別のファイルサーバー等にユーザーデータを転送する方法が一般的です。以下では、レスキューモードにおいて、ネットワーク経由で別のファイルサーバー等にユーザーデータを転送する例を示します。まず、レスキューモードで起動し、ネットワーク通信ができるように、NICにIPアドレスを付与します。IPアドレスの付与が可能なNIC一覧をipコマンドで表示します。
図10:レスキューモードで、ipコマンドを使って利用可能なNICを確認する(クリックで拡大)
ipコマンドで利用可能なNICが確認できたら、IPアドレスを付与します。以下の例では、IPアドレスとして、172.16.25.2/16を付与しています。このIPアドレスの付与は、対象サーバーのメモリ上で行われていますので、設定は恒久的なものでもなく、既存のローカルディスクにインストールされたCentOS 7の物理NICの設定に影響を与えません。
図11:ipコマンドを使って利用可能なNICにIPアドレスを付与する(クリックで拡大)
CentOS 7のレスキューモードでは、scpコマンドを利用することが可能ですので、遠隔にあるファイルサーバー等にscpコマンドを使ってユーザーデータをコピーすることが可能です。これにより、起動不可のCentOS 7のシステムからユーザーデータを救出が実現できます。
図12:レスキューモードでscpコマンドを使ってユーザーデータを救出している様子(クリックで拡大)
レスキューモードでのHDDイメージ全体の遠隔地への転送
マスターブートレコードを含むOS全体とユーザーデータ全てをイメージファイルとして遠隔のファイルサーバーに保管しておきたい場合があります。ローカルディスクにインストールされたOS全体をイメージファイルとして保管するには、CentOS 7のレスキューモードを活用できます。レスキューモードを使って、ディスク全体を遠隔のファイルサーバーにイメージファイルとして転送する手段としては、ddコマンドとsshコマンド、そしてcatコマンドを組合せます。まず、レスキューモードに移行し、先述の手順で、事前にネットワークの設定を行い、遠隔のファイルサーバーとscpやsshコマンドによるセキュア通信が可能な状態にしておきます。次に、イメージファイルとして取得するディスクの情報をpartedコマンドで出力します。下図の例では、3テラバイトのローカルディスクの/dev/sdaが、レスキューモードから認識できていることがわかります。
図13:レスキューモードでpartedコマンドにより、ローカルディスクの/dev/sdaの情報を確認している様子(クリックで拡大)
/dev/sda全体を遠隔のファイルサーバーにイメージファイルとして圧縮して転送します。/dev/sda全体をイメージ化するには、ddコマンドを使います。転送を行うには、sshコマンドを使用しますが、イメージファイルが巨大な場合は、gzipコマンドを組み合わせて圧縮するとよいでしょう。通常巨大ファイルの転送は、膨大な時間がかかりますので、今後、同様のイメージファイルの取得作業のスケジュール管理のためにも、コマンドの実行時間を計測しておくのがよいでしょう。コマンドの実行時間を計測するには、timeコマンドを付与します。下図は、遠隔のファイルサーバー(IPアドレスは172.16.25.4)の/backupディレクトリ以下に、n01sda_c70_20141007.img.gzというファイル名で保存する例です。
図14:レスキューモードを使ったローカルディスクのイメージファイルの取得の様子。遠隔のファイルサーバーにsshを使って転送している。パーティションが巨大のため、gzipにより圧縮を行っている(クリックで拡大)
まとめ
以上で、CentOS 7に関するインストールの新機能やOSの起動の仕組み、復旧のノウハウについて解説しました。CentOS 7のインストール自体は、非常に簡単ですが、インストール前の調査等、適切な情報収集が欠かせません。また、ブートローダの仕組みも従来のCentOS 6までと大きく異なっていますので、注意が必要です。不慣れなブートローダの設定ミスにより、CentOS 7が起動できなくなった場合は、レスキューモードが役に立ちますので、擬似的な障害を発生させてみてレスキューモードによる復旧の練習をしておくことをお勧めします。以下に、ポイントをまとめておきます。
- CentOS 7のインストール前にハードウェアの設定を適切に行っておく
- インストーラーにはトラブルシューティングモードが用意されている
- 従来のCentOS 6に比べ、CentOS 7のテキストモードのインストーラーは、機能が大幅に強化されている
- ブートローダの設定は、/etc/default/grubと/etc/grub.d/40_customファイルに記述する
- レスキューモードでは、パッケージのインストール、ユーザーデータやイメージファイルの転送が可能
この連載が書籍になりました! |
古賀 政純 著
価格:3,000円+税
発売日:2015年2月25日発売
ISBN:978-4-8443-3753-9
発行:インプレスジャパン
|
本書は、CentOS 7を取り巻く市場動向、CentOS 7が利用されるサーバーシステムの選定、CentOS 7の基礎、システム設計、OS管理やCentOS 7に対応したアプリケーションサーバーの構築手順などの勘所をご紹介します。連載では書ききれなかった本の内容、見どころが満載!
- セキュリティ管理
- チューニング
- 自動インストール
- Hadoop構築
- GlusterFS
- Ceph
 
|