何か問題が発生した場合には、解決するための方法がいくつかあります。ただし、この方法を行うためには、システムを十分に理解することが必要です。本章では、知識を使用してシステムのレスキューを行うことのできる、レスキューモードでブートする方法を説明します。
レスキューモードとは、コンパクトなLinux環境のすべてをフロッピーディスク、CD-ROMから、またはいくつかのその他の手段を使用して起動する機能のことです。
名前が示すように、レスキューモードは、何かからレスキュー(救助)するためのものです。通常の運用では、プログラムの実行、ファイルの格納など、何をするにしても、ハードディスクドライブ上に格納されたファイルを使用します。
ただし、時にはLinuxが完全には動作しないために、システムのハードディスクドライブ上のファイルにアクセスできないこともあります。レスキューモードを使用すれば、実際にはハードディスクドライブからLinuxを起動できない場合であっても、ハードディスクドライブ上に格納されたファイルにアクセスすることができます。
通常は、レスキューモードが必要になる理由は以下のようなものです。
Linuxを起動できない。
ハードウェアまたはソフトウェアの問題があるので、システムのハードディスクドライブからいくつかの重要ファイルを取り外したい。
次に、これらのシナリオについて詳しく見てみましょう。
多くの場合、その原因はRed Hat Linuxをインストールした後で別のオペレーティングシステムをインストールしたことです。他のオペレーティングシステムの中には、コンピュータ上に自分以外のオペレーティングシステムは存在しないと決めてかかり、本来はLILOブートローダーが含まれていたマスターブートレコード(MBR)を上書きするものがあります。そのようにしてLILOが上書きされた場合は、Red Hat Linuxを起動することはできません。そのような場合のために、レスキューモードがあります。
このシナリオの場合は、さまざまな異なる状況が存在します。ハードディスクドライブが壊れた場合と、新しいカーネルを構築した後でLILOの実行を忘れた場合の2つが代表的な例です。このような場合は、Red Hat Linuxを起動できなくなる可能性があります。レスキューモードを利用できるならば、問題を解決できる可能性があります。少なくとも、最重要ファイルのコピーをとることができるかもしれません。
レスキューモードでシステムを起動するには、インストールブートプロンプトに対して以下のコマンドを入力します。
boot: linux rescue |
以下のいずれかの方法でマシンを起動します。
インストールブートディスクからシステムをブートする。[1]
ネットワークブートディスクまたはPCMCIAブートディスクからブートする。これらの方法は、ネットワーク接続が機能する場合に利用することができます。また、ネットワークホストと転送タイプを識別することが要求されます。その情報を指定する方法については、オフィシャル Red Hat Linux x86インストールガイド の「ネットワークからのインストール」を参照してください。
レスキューモードでシステムを起動すると、VC(仮想コンソール)2上にプロンプトが表示されます(VC 2にアクセスするには、 Ctrl-Alt-F2キーを使用します)。
bash# |
このプロンプトから、以下のような多数の役立つコマンドを実行することができます。
anaconda gzip mkfs.ext2 ps badblocks head mknod python bash hwclock mkraid python1.5 cat ifconfig mkswap raidstart chattr init mlabel raidstop chmod insmod mmd rcp chroot less mmount rlogin clock ln mmove rm collage loader modprobe rmmod cp ls mount route cpio lsattr mpartition rpm dd lsmod mrd rsh ddcprobe mattrib mread sed depmode mbadblocks mren sh df mcd mshowfat sync e2fsck mcopy mt tac fdisk mdel mtools tail fsck mdeltree mtype tar fsck.ext2 mdir mv touch fsck.ext3 mdu mzip traceroute ftp mformat open umount gnome-pty-helper minfo pico uncpio grep mkdir ping uniq gunzip mke2fs probe zcat |
ただし、ダメージを受けていないのであればルート(/)ファイルシステムをマウントし、標準的なLinuxのユーティリティを実行することができます。たとえば、ルートファイルシステムが/dev/hda5にある場合、以下のコマンドを使用して、このパーティションをマウントすることができます。
mount -t ext2 /dev/hda5 /foo |
ここで/foo はすでに作成済みの、マウント用のディレクトリです。
この時点で、chroot、fsck、manなどのユーティリティを実行できるようになります。Linuxはシングルユーザーモードで動作しています。
Linuxパーティションの名前がわからない場合は、推測してもかまいません。存在しないパーティションをマウントしても害はありません。
直接、シングルユーザーモードでブートできる可能性があります。システムがブートするものの、ブート完了後にログインすることができない場合は、リブートしてからLILOのブートプロンプトに対して以下のいずれかのオプションを指定してみてください(グラフィカルLILOを使用している場合は Ctrl-x キーを押してグラフィカル画面を終了し、 boot: プロンプトに入る必要があります)。
boot: linux single boot: linux emergency |
シングルユーザーモードでは、コンピュータはランレベル1でブートします。つまりローカルファイルシステムはマウントされますが、ネットワークは有効になりません。システム保守用のシェルが利用可能になります。
緊急モードでは、可能な限り小さな環境でブートします。ルートファイルシステムは読み込み専用でマウントされ、ほとんど何もセットアップされません。このモードの linux single に対する主な長所は、 init ファイルがロードされないことです。 init が壊れたか機能しない場合でも、ファイルシステムをマウントすることによって、再インストールすれば失われる可能性のあるデータを復元することができます。
カーネルを再構築し、その新しいカーネルを一刻も早く試したくて、 /sbin/lilo を実行する前にリブートしてしまうということは、まれにあります。しかし、lilo.confのすでに古いカーネルに対するエントリがなくなったら、問題になります。この問題を解決する方法については、このセクションを読んでください。
多くの場合は、Red Hat LinuxブートディスクからRed Hat Linuxシステムをブートし、[1]ルートファイルシステムをマウントして作業を進めることができます。以下にその方法を示します。
ブートディスクのboot:プロンプトに対して以下のコマンドを入力します。
linux single root= /dev/hd XX initrd= |
XX /dev/hd XX /dev/hdXXのXXを、ルートパーティションを表す適切な文字と数字で置き換えます。
このコマンドを入力すると何が起こるのでしょうか。まず、システムがシングルユーザーモードでブートし、指定したルートパーティションがルートパーティションとして設定されます。空の initrd を指定すると、ブートディスク上のインストール関連イメージがバイパスされるので、即座にシングルユーザーモードに入ります。
残念ながら、この方法には欠点もあります。Red Hat Linuxブートディスク上のカーネルは組み込みのIDEしかサポートしていないため、SCSIベースのシステムを使用している場合、この方法を使用することができません。その場合は、上記のlinux rescueコマンドを使用して、レスキューモードにアクセスする必要があります。
[1] | インストールブートディスクを作成するには、空のフロッピーディスクまたはRed Hat Linux CD-ROM #1をドライブに挿入し、Red Hat Linux CD-ROM #1に格納されているimages/boot.imgファイルを使用して、dd if=boot.img of=/dev/fd0コマンドを入力します。 |