Linux でも GUI が充実してきており、一般的な操作においては、コマンドを叩かずに、Windows と同様に、アイコンをクリックして使用することができます。しかし、いざトラブルシューティングとなった場合には、コマンドを叩いてしまった方が、解決に近付くことも少なくありません。私自身、これまで数回のトラブルシューティングを行ってきましたが、その中で覚えていったコマンドやファイルの役割を解説します。これだけ覚えていれば、ある程度までのトラブルシューティングは可能になります。
1.コマンド群
2.特別なファイル(ディレクトリを含む)
Linux に限らず、Widnows でもトラブルシューティングにおいては、コマンドを知っているかどうか、ということかが非常に重要になります。Windows では、GUI が使えない状態は、かなり致命的な状態と言わざるを得ませんが、Linux であれば、コマンドを知ってさえいれば、CUI からの復旧はかなりの部分が可能となります。というより、CUI で設定できるものを GUI 化した、という方が正しい表現かもしれません。なお、コマンドのオプションなどについては、Vine Linux 3.2 に準じるため、異なるディストリビューションにおいては、書式が異なる場合があります。
ここでは、知っておくと、初期のトラブルシューティングに役立つコマンド類について、触れていきます。
ls は LIst の略で、カレントディレクトリのファイル一覧を表示するコマンドです。特にパス名を指定した場合には、指定したパス名のファイルの情報を表示します。Windows でいうところの DIR に相当します。
ls にはいくつかのオプションがありますが、最低限覚えておくべきなものとしては、-l -a があります。-l はファイル情報を詳細に表示するオプションで、おそらく long からきていると思われます。-a は、隠しファイルを含めたすべてのファイルを表示する、というオプションです。なお、-l と -a を同時に指定する場合には、-la とします。
ls コマンドで表示されるファイルは、ファイル属性(コラム参照)に r(read)が立っているものとなります。この属性は、ファイルだけでなく、ディレクトリにも設定されるため、ディレクトリに r 属性が立っていないと、そのディレクトリの一覧表示はできません。通常、ログイン直後は、ユーザーのホームディレクトリとなっているため、r 属性が立っていますが、他のユーザーのホームディレクトリについては r 属性がたっていないため、引数として指定しても、「許可がありません」または「Permission denied.」となります。
実行例 $ ls BP16-33.txt VMware-player-1.0.0-16981.i386.rpm firefox-installer/ vmware/ Desktop/ VMware-player-1.0.0-18007.i386.rpm hibernate-0.98-1.src.rpm vpncmd.txt Download/ Xrootenv.0 lib/ vpncmd.txt~ HTML/ bookmarks.html rpm/ wakwak.txt Hot-Room.txt colum2_attribute.html se2-linux-result.txt win98/ Hot-Room.txt~ colum2_attribute.html~ upgrade-log work/ TP600_ERROR.TXT common/ vm_win98.LZH*
cat は conCATenate の略で、元々は複数のファイルを結合するためのコマンドです。この機能は、あるファイルの中身を読み出し、指定された順番で中身を並べて、ひとつのファイルとして出力する、という機能なのです。本来は結合されるファイルと、契合されたファイルのふたつの引数を必要としますが、ひとつだけの引数を使用した場合は、出力側のファイルとして標準出力を使用します。(コラム−標準出力?標準入力?−参照)
一般的には、標準入力はキーボード、標準出力はモニターとなっているので、cat コマンドの場合は、ひとつの引数しか指定していない場合は、指定したファイルの内容を標準出力に出力する、という機能になり、MS-DOS の TYPE コマンド相当の機能を持つようになるわけです。
ただし、cat コマンドには、注意すべき点があります。まず、出力する際には、文字コードの変換などは一切行わない、ということです。Linux 上で作成したファイルであれば問題ありませんが、Windows 上で作成したファイルを Linux に複写する場合、文字コードが異なる(Windows は Shift-JIS 形式、Linux は EUC-JP 形式、ただし、設定により、別の文字コードとなる場合があり)ため、cat コマンドで表示しても、中身が判読できないことがありえます。使われている文字コードがなにであるか、は意識しておく必要があります。最新のディストリビューションでは、Unicode が標準の文字コードである場合があります。
cp は copy の略で、ファイルを複写するために使用します。引数は常にふたつ使用することになります。なお、指定しない場合は、複写先をカレントディレクトリとして実行することになります。また、標準出力を用いるため、cat コマンドとほぼ同じ動作となります。
実行例 $cp master_file copy_file
mv は MoVe の略で、ファイルを移動するコマンドです。ファイルを移動するということは、ファイルの保存情報を書き換える、という機能であると定義できることから、ファイル名の変更も mv コマンドの担当となります。typo(コラム-TYPO ってなに?-) してしまった場合に、正しいファイル名への変更が発生することはままあります。
rm は ReMove の略で、ファイルを削除するコマンドです。rm コマンドで削除すると、物理的にファイルが削除sあれてしまうことになるため、多くのディストリビューションでは、削除前の確認を行うようにエイリアス設定を行っています。安易に使うと、後悔することまちがいなしのコマンドであり、中級者ほど陥りやすい罠を有しているともいえます。
rm コマンドの対象は、ファイルだけでなく、ディレクトリも対象となります。ーR オプションをつけると、ディレクトリを再帰的に対象とするので重宝する半面、誤って実行してしまった場合の被害も半端ではなく、より慎重な扱いを必要とするオプションともいえます。個人的な見解ですが、直接 rm コマンドを実行するかわりに、mv コマンドで適当なフォルダに一時的に保存しておき、一定期間の経過後に、改めて rm コマンドで物理的に削除することをお薦めします。
less コマンドの由来は、more にあります。MS-DOS にも同名のコマンドがありますが、more の機能は、標準出力への出力を、画面単位に停止させることができる、というものです。このため、単独のコマンドとして使用されるよりも、他のコマンドの出力を加工するために利用されることが多いコマンドです。less は、この more に対する反語として名付けられました。しかし、名前とは裏腹に、more よりも機能が充実しています。特に、more はもっていない『バックスクロール機能』(すでにスクロールさせてしまった画面を再び表示させる機能)は、うっかりものには非常に重宝します。一画面で収まる程度の内容は、cat で表示させても問題はありませんが、GPL のような長文を読むとなると、cat でさあっと流されてしまっては、読むこともままならないため、less を使って、一画面ずつ出力を停止させることで、内容をじっくりと確認することが出来るようになるわけです。
less は、他のプログラムの出力を受け取って加工する、と先に示しましたが、このようにあるプログラムの出力を他のプログラムへ受け渡す機能をパイプ機能とよび、『|』で表されます(表示するフォントによっては、中間にすき間がある場合があります)。例えば、『ls -l』 を実行する際に、ファイル名が非常に多くて、一画面で収まらない場合、『ls -l | less』とすることで、『ls -l』 の出力を一画面ずつ確認することができます。後述する tail コマンドや grep と組み合わせて、使うことが多いです。
引数で指定された文字列を引数で指定されたファイル内から検索します。結果が大量になる場合には、less を組み合わせて使うこともよくあります。また、特定のファイルではなく、別のコマンドの出力からパイプを使って検索することもできます。syslog などのデータは、非常に大量なため、別のコマンドで必要な部分を切り出して、その上で grep で処理することになることが、運用としては多いです。トラブルシューティングにおいては非常に重宝するコマンドです。
Linux の起動時に表示されるメッセージは、/var/log/dmesg に出力されていますが、この内容を表示するコマンドが、dmesg コマンドです。起動時のデバイス認識状態などを確認することができます。ただ、表示される情報が膨大なので、通常は、less を併用して dmesg | less としたり、grep と組み合わせて dmesg | grep 〜 として用いられることが多いです。
ファイルの末尾を取り出すコマンドです。ログファイルのように、追記されていくものは、tail コマンドで最新の情報を切り出して、問題解決の糸口にするため、重要です。引数として、取り出す行ととりだし元のファイル名を指定しますが、取り出す行を指定しない場合には、10行が取り出されます。また、-f オプションを指定すると、引数で指定されたファイルへの追記をリアルタイムで追いかけることが出来るため、syslog を監視して、デバイスやプログラムが正しく動作しない場合に、原因究明に非常に役立ちます。なお、表示できるファイルは、アクセス権限が許可されている必要があります。/var/log/messages は、root のみアクセス可能となっているので、一般ユーザーでは内容を表示させることが出来ません。
# tail /var/log/messages syslog を末尾から10行取り出す。 # tail -20 /var/log/messages syslog を末尾から20行取り出す。 # tail -30 /var/log/messages | less syslog を末尾から30行取り出し、一画面ずつ表示する。 # tail -f /var/log/messages syslog を末尾から10行ずつリアルタイムに取り出す。
Linux の動的モジュール(デバイスドライバ等)を読み込ませるコマンドです。設定ファイルに記述しておくことで、OS の起動時に、自動的に読み込ませることも可能ですが、手動で追加したデバイスなどがある場合、自動で組み込まれないことが多く、modprobe を手動で実行することが必要になることも少なくありません。特に、複数のネットワークデバイスを使うような場合には、同時にはひとつしか使わないため、どれかひとつだけを起動すれば良い、ということから、手動で modprobe することも、珍しいことではありません。
モジュールの load には、root 権限が必要となりますので、modprobe を使うことができるのは root のみ、となります。
# modprobe prism54 (無線 LAN デバイス I/O Data WN-G54/CB を使用する場合) # modprobe ipw2200 (Intel Pro/Wireless 2200BG を使用する場合) # modprobe acm (Suntac AS64LX を使用する場合) # modprobe ndiswrapper (ndiswrapper を使用する場合)
なお、組み込むモジュール名は、別途調べる必要があります。また、この時指定したモジュールは、/lib/modules/kernel-version/ 以下に存在している必要があります。
(11) の modprobe と似た機能を持ちます。違いとしては、insmod は引数で指定したモジュールのみを load しますが、modprobe は引数で指定したファイルに加え、依存関係のあるファイルもあわせて Load しますので、insmod を使うことは、あまりないと思います。
現在 Load されているモジュールを一覧表示します。LiStMODdule から名付けられていると思われます。insmod や modporbe したモジュールが読み込まれているか、正しく活動しているか、ということを確認する際に利用します。
# lsmod Module Size Used by snd_pcm_oss 45732 0 snd_mixer_oss 15744 1 snd_pcm_oss snd_intel8x0 28840 0 snd_ac97_codec 55172 1 snd_intel8x0 snd_pcm 77320 2 snd_pcm_oss,snd_intel8x0 snd_timer 19588 1 snd_pcm snd_page_alloc 8452 2 snd_intel8x0,snd_pcm gameport 3456 1 snd_intel8x0 snd_mpu401_uart 5376 1 snd_intel8x0 snd_rawmidi 18720 1 snd_mpu401_uart snd_seq_device 6152 1 snd_rawmidi snd 42084 9 snd_pcm_oss,snd_mixer_oss,snd_intel8x0,snd_ac97_codec,snd_pcm,snd_timer,snd_mpu401_uart, snd_rawmidi,snd_seq_device soundcore 6080 1 snd ds 10116 4 yenta_socket 14592 0 pcmcia_core 59112 2 ds,yenta_socket e1000 85640 0 ide_cd 35460 0 cdrom 31132 1 ide_cd nls_cp932 80768 1 nls_euc_jp 4996 1 ntfs 82636 1 psmouse 20752 0 ehci_hcd 19972 0 uhci_hcd 26640 0 usbcore 87772 4 ehci_hcd,uhci_hcd
組み込まれたモジュールを取り除くコマンドです。modprobe/insmod したモジュールが不要になり、取り外す場合に使用します。
# rmmod prism54
ネットワークの設定を行うコマンドです。引数を指定しないで実行すると、現在 利用可能な(up された)ネットワークの設定を表示します。引数にネットワークてデバイスを指定すると、指定されたネットワークデバイスの設定情報を表示します。
# ifconfig eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.0.20 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:150964 errors:0 dropped:0 overruns:0 frame:0 TX packets:101702 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:70981258 (67.6 Mb) TX bytes:7668457 (7.3 Mb) Base address:0x8000 Memory:c0220000-c0240000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:66640 errors:0 dropped:0 overruns:0 frame:0 TX packets:66640 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:7640889 (7.2 Mb) TX bytes:7640889 (7.2 Mb)
-a オプションを指定すると、現在組み込まれている全てのネットワークデバイスを表示します.-a 付きで指定すると表示され、-a なしでは表示されないものは、up されていないため、有効になっていないことになります。下記の実行例でも、vpn_se2 は -a 付きでのみ表示されることから、無効(down)状態となっているネットワークデバイスであることがわかります。
# ifconfig eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.0.20 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:151075 errors:0 dropped:0 overruns:0 frame:0 TX packets:101784 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:70990862 (67.7 Mb) TX bytes:7674347 (7.3 Mb) Base address:0x8000 Memory:c0220000-c0240000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:66698 errors:0 dropped:0 overruns:0 frame:0 TX packets:66698 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:7646865 (7.2 Mb) TX bytes:7646865 (7.2 Mb) # ifconfig -a eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.0.20 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:151076 errors:0 dropped:0 overruns:0 frame:0 TX packets:101785 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:70990926 (67.7 Mb) TX bytes:7674411 (7.3 Mb) Base address:0x8000 Memory:c0220000-c0240000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:66698 errors:0 dropped:0 overruns:0 frame:0 TX packets:66698 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:7646865 (7.2 Mb) TX bytes:7646865 (7.2 Mb) vpn_se2 Link encap:Ethernet HWaddr 00:AC:A7:5B:1F:8B BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) vpn_se2 は -a 付きでのみ表示されることから、無効(down)状態となっているネットワークデバイスです。
ifconfig コマンドを使うと、デバイスに IP アドレスを割り当てることが出来ます。なお、DHCP による IP の割り当てを行っている場合、ifconfig コマンドにて、DHCP による IP アドレスの割り当てを行おうとしても、できません。ifconfig コマンドは、手動で IP アドレスを設定するために用いられるので、かならず IP アドレスを指定する必要があります。DHCP の場合は、pump や dhcpcd などのコマンドを用いて、DHCP サーバーへ IP アドレスを要求する必要があります。手動割当が成功したかどうかは、ifconfig コマンドで確認しましょう。
# ifconfig eth0 192.168.0.1
IP アドレスのみを指定して、サブネットマスクを省略すると 255.255.255.0 が付加されます。クラスCプライベートアドレス以外を指定する場合には、指定したアドレスに併せてサブネットマスクを付加します。
ネットワークの経路を設定するためのコマンドです。ifconfig コマンドで、IP アドレスを割り当てた場合に、LAN 内の PC へはアクセスできるものの、Internet にアクセスできない場合には、デフォルトゲートウェイの設定が正しいかどうか、route コマンドで調べてみましょう。
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 loopback * 255.0.0.0 U 0 0 0 lo default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
実行例では、default の行が存在していますので、デフォルトゲートウェイは正しく指し示されていますが、もしなかったり、複数存在していた場合には 手動でデフォルトゲートウェイを設定する必要があります。手動でデフォルトゲートウェイを設定する場合、下記のように操作します(デフォルトゲートウェイが 192.168.0.1 とします。)。設定後には、route コマンドを実行して、default が一行のみに正しく設定されているか、確認しましょう。
# route add default gw 192.168.0.1
誤って、複数のデフォルトゲートウェイを設定してしまった場合には、次のようにして削除します。
# route del default
各種設定ファイルが納められているディレクトリです。アプリケーションやシステム全体に関する設定となり、ユーザーごとの設定は別の場所(ホームディレクトリ)に保存されます。
いろいろな設定フィルがありますが、最低限抑えておくべきファイル類は、下記のものではないかと思います。
/etc/resolv.conf は、リゾルバの設定ファイルです。というと難しく感じますが、簡単にいえば、名前解決に関する設定を行うファイルです。もっと具体的にいうと、利用する DNS の設定ファイル、ということになります。このため、FireFox などのアプリケーション上で、名前解決が行われていないような場合、このファイルの中身が正しいかどうかを確認することになります。
[/etc/resolv.conf] domain thinkpad-lover.org nameserver 192.168.0.1 nameserver 192.168.0.2
domain は、自分の属するドメインを指定します。domain 設定を行っておくと、ホスト名だけを指定した場合に、自動的にドメイン名を付記してくれるため、タイプする量が少なくなり、ミスタイプを減らすことができます。
nameserver は、利用する DNS のアドレスを指定します。ここで、DNS サーバーのホスト名を登録してはいけません。なぜなら、ホスト名を指定していると、名前解決のため、DNS へアクセスしようとした場合に、DNS 自身のアドレスを知るための問い合わせが発生してしまうことになります。DNS 自身の IP アドレスがわからなければ、DNS へ名前解決要求はできませんので、ホスト名での設定では問題が生じてしまうことになるのです。
nameserver で指定する DNS は、どこにあっても構いませんが、指定した DNS へ必ずアクセスできることが必須となります。自宅で DNS を動作させていない場合は、プロバイダの DNS サーバーを指定するか、使用しているルータのアドレスを指定することになります。現在市販されている、多くのブロードバンドルータは、簡易 DNS の機能がありますので、プロバイダの DNS の代行をしてくれます。プロバイダの DNS の負担軽減のため、なるべく LAN 内の DNS を指定することをお薦めします。
nameserevr 行は、3つまで記述することが出来ますが、先頭に近いものから使用されるため、メインで使おうとしている DNS は、なるべく先頭に記述します。
/etc/sysconfig ディレクトリは、システム設定に関する内容を保存しているディレクトリです。daemon と呼ばれるサーバープログラムの設定ファイルも、このなかに置かれるものが多くあります(すべてが sysconfig ディレクトリのなかにあるわけではありません)。
/etc/sysconfig/network は、ネットワーク設定のうち、全般にかかる設定を担当します。
[/etc/sysconfig/network] networking=yes hostname=pc1.thinkpad-lover.org
networking はネットワークを使用するかどうか、の設定です。通常はネットワークを利用するので、yes と設定されています。Linux をインストールした時点で、NIC がなかったりして、ネットワークの利用をしない、と設定してしまった場合には、この設定が no となっている場合があります。NIC は正しく認識されているのに、ネットワークが利用できない場合に、まずは確認してみるポイントになります。
hostname は、自機に設定するホスト名を完全な形で指定します。この完全な形のホスト名を FQDN(Full Qulaified Domain name)と呼びます。FQDN の構成は、ホスト名.ドメイン名 の形で指定します。例では、ホスト名が pc1 で、ドメイン名が thinkpad-lover.org のマシンの FQDN である、ということになります。
このディレクトリには、ネットワークデバイスごとの設定が保存されています。NIC が存在すると、ifcfg-eth0 というファイルが存際してます。
[ifcfg-eth0] DEVICE=eth0 ONBOOT=no BOOTPROTO=static IPADDR=192.168.0.25 NETMASK=255.255.255.0 GATEWAY=192.168.0.1
DEVICE 行は、どのデバイスに対する設定かを示しています。一般的には、ファイル名と DEVICE 指定はあわせておきます。
ONBOOT 行は、起動時に自動認識させるかどうかを示しています。ONBOOT=no という指定をしているので起動時に自動立ち上げはせずに、手動で組み込むことを示しています。
BOOTPROTO 行は、IP アドレスの割り当てを固定(statiic)とするか、bootp とするか、dhcp とするか、の指定を行います。BOOTP は、DHCP の元となったプロトコルで、現在はほとんど使用しません。DHCP を使うか、固定にするか、は使い方によります。static を指定している場合、IP アドレス(IPADDR)、ネットマスク(NETMASK)、ゲートウェイ(GATEWAY)、を指定します。
設定を手動変更する場合には、これらのファイルを直接編集することも、有効です。
Linux のブートローダである LILO の設定が保存されています。kernel のアップグレードを行った場合などには、/etc/lilo.conf を編集して、LILO に新しい kernel を教える必要があります。注意する点としては、lilo.conf は設定しただけでは駄目で、/sbin/lilo を実行して、新しい設定を書き込む必要があります。これをうっかり忘れると、いくら lilo.conf へ設定を行っても、新しい kernel が読み込まれない、という状態に陥ります。
LILO を扱う際には、少々注意する点があります。それは、LILO はファイルシステムを経由してアクセスするのではなく、直接ディスクにアクセスを行う、という点です。どのような場合かというと、パーティション変更を行い、パーティションの物理アドレスが変更となった場合に、LILO が kernel を見付けられなくなる、ということを意味します。それほど頻発するものではありませんが、ある程度使っていくと、容量不足を感じることになるため、注意が必要となります。
LILO は MBR に保存される 1st stage と LILO の本体であり 1st stage から呼び出される 2nd stage の2段構成となっています。MBR は容量に制限があるため、LILO のすべてを保存することができません。さらには、1st stage が 2nd stage を呼び出すときには、ファイルシステムを理解できないため、HDD 上の物理アドレスを直接指定して読み込むようになります。LILO のフプロンプトのうち、LI は 1st stage の読み込みに成功していることを示し、LO は 2nd stage が読み込めたことを意味しますので、起動に失敗するときには、どこで LILO がこけているか、判断することができます。
/var は、variable の略で、書き込みが頻繁に発生するディレクトリになります。シングルパーティション構成で使用している場合、/var の容量増加により Disk Full となり、システム起動不可になってしまうことがあります。私自身一度 Disk Full を経験して、かなり怖い思いを感じました。なので、/var は別パーティションにわけることをお勧めしています。
/var/log は、ログファイルを作成するためのディレクトリとして用意されています。/var/log/messages は syslog と呼ばれるシステム全体のログとなっており、/var/log/maillog はメール送受信のログとなっています。いずれも、root のみアクセスが許されていますので、一般ユーザーからは、ファイルの存在のみ確認できる形となっています。
デバイスの認識がうまくいかない場合、/var/log/messages を確認すると、解決に近付きます。すべての内容が /var/log/messages に出力されているわけでないので、使用するアプリケーションによっては、別のファイルになります。たとえば、メールを送受信する postfix は、ログを /var/log/maillog に保存しますし、httpd である apache のログは /var/log/httpd/ に出力されます。
起動に関するファイルが納められているディレクトリで、kernel などもこのディレクトリに保存されています。私は、このディレクトリに関しては、独立したパーティションを割り当てすべき、と考えています。/boot はそれほど大きな容量を確保する必要がない(64MBもあれば十分です)ため、区画番号を消費させる必要はないと考えらがちです。しかし、kernel が存在するということが、大きな落し穴になります。Vine Linux の標準ブートローダは lilo です。lilo は kernel を読み込むときには、ファイルとして読み込むのではなく、HDD 上の物理アドレスに書かれている内容を読みにいきます。通常、ファイルへアクセスする場合には、ユーザーは、そのファイルが何番の物理アドレスに記録されているかを意識することなく、kernel あるいはライブラリが実際の物理アドレスにアクセスするようになっているわけですが、kernel 自体を読み込む際には、kernel の機能を使うわけには行かない(缶切りのなかにしか缶切りがなかったら、その缶を開けることは出来ないですよね)ので、直接物理アドレスを読みにいくしかないわけです。このため、ファイルコピー等で、kernel の位置が代わることは許されないため、独立したパーティションにして、通常は触らないようにしておくことが望ましい、と私は考えます。lilo ではなく、grub を使う場合は、grub の機能に、ファイルシステムを理解する機能が含まれているため、kernel の物理アドレスが変化しても、起動することに問題はありません。
/boot は、起動に必要なファイルを保存しているため、原則として基本区画に作成する必要があります。これは、MBR に記録されている IPL(Initial Program Loader) に Windows の IPL を用いる場合ですが、lilo または grub を MBR に導入している場合には、拡張区画に /boot があっても起動できます。ただし、Windows の再インストール等で上書きされる危険性がありますので、ブートローダは MBR ではなく、基本区画の先頭セクタに記述することをお勧めします。
ブートローダである grub に関するファイルが納められています。grub の設定ファイルも、このてディレクトリに保存されています。中をみると、ファイルシステムのドライバらしきファイルが納められています。
Linux の動的モジュールが保存されています。モジュールは、大雑把にいえば、Windows の Windows\System フォルダに相当します。モジュールは kernel に依存しているため、導入した kernel と同じ数だけ存在しています。きちんと区別されているため、異なるバージョンのモジュールを誤って読み込むことは、ほとんどありません。さすがに、ユーザーが手動でコピーしてしまった場合は、さすがにどうしようもないですが(笑)。
モジュールが見当たらない、と言われた場合は、このディレクトリの中身を確認してみましょう。
このディレクトリを見付けることは、冷汗ものまちがいないです。というのも、lost+found に含まれるファイルは、その一部が失われた(lost)ことを発見(found)されたファイルとなり、かなりの確率で、復旧は困難な状態になっているといえます。これまでの最悪の状態としては、ルートディレクトリに、lost+found しか存在していない状態ですね。ええ、ルートディレクトリが崩壊している状態で、修復は事実上不可能で、再インストール必須となっていました。このディレクトリが出来ていたら、HDD の交換も検討すべきだと思います。
Last Update is 2006.04.23