Linux

Linux Server トラブル対応完全ガイド

サーバー運用では、なんらかの異常が発生して当然と考えておくとよいでしょう。

もちろん、異常が発生しないように予防することはできますが、予防困難な原因で異常が発生することもあるため、100%防ぐことはできません。それよりも、異常を早く検知すること、そしてできるだけ早く対処することが肝心となります。

今回の記事では、「異常発生時の対応」について詳細に解説していきます。
また、サーバー運用で頻繁に起こるトラブルについて簡単な対応方法も併せて記載していきます。

異常の把握

異常が発生した際は、まず最初にどのような異常が発生したのかを把握します。

たとえば、Webサイトの特定のページだけが見えないのかすべてのページが見えていないのか、全員が見えないのか特定の人が見えないのか、サーバーのすべてのサービスが利用できないのか特定のサービスが利用できないのか、などです。異常が発生したときに、「なんとなくおかしい」「どこかおかしい」ではなく、「ここがおかしい」という状態にするのが問題解決の第一歩です。

監視ツールの活用

  • サーバ監視ツール:Zabbix、Nagios、Prometheusなど
  • ネットワーク監視ツール:nmap、ping、mtrなど
  • ログ監視ツール:Graylog、ELK Stackなど

これらのツールを活用することで、以下の項目を常時監視し、異常を早期に検知できます。

  • サーバの稼働状況(CPU使用率、メモリ使用量、ディスク使用量、プロセス数など)
  • ネットワークの状況(通信速度、パケットロス、エラーなど)
  • アプリケーションの動作状況(応答時間、エラーログなど)
  • セキュリティログ(不正ログイン、攻撃など)

ログをチェックする

ログファイルには、システムやアプリケーションの動作情報やエラー情報が記録されています。異常が発生した場合は、以下のログを確認することで、原因の特定に役立ちます。

  • システムログ(syslog、dmesgなど)
  • アプリケーションログ(Apache、MySQLなど)
  • セキュリティログ(auth.log、firewalldなど)

異常発生時のアラート設定

監視ツールやログ監視ツールで、異常発生時にアラートを設定することで、迅速な対応が可能になります。

  • メール、SMS、チャットツールなど、適切な手段で通知を受け取れるように設定しましょう。
  • アラートの閾値は、業務に影響が出るレベルに設定する必要があります。

定期的なサーバの確認

定期的にサーバの状態を確認することで、潜在的な問題を早期に発見することができます。

  • サーバの稼働状況、ネットワーク状況、アプリケーション動作状況などを手動で確認する。
  • サーバの状態を自動的に確認するスクリプトを作成する。

次の項からよくあるトラブルの具体的なトラブルシューティングの方法を書いていきます。

パッケージの依存関係の問題

パッケージの依存関係の問題は、Linuxシステム管理者にとって一般的なトラブルです。以下に、この問題を解決するための手順を詳細に解説します。

  1. エラーメッセージの確認: まず、パッケージの依存関係に関するエラーメッセージを確認します。このエラーメッセージは、パッケージマネージャー(apt、yum、dnfなど)や、手動でパッケージをインストールしようとした際に表示されます。エラーメッセージには、どのパッケージが欠落しているか、またはどの依存関係が満たされていないかが記載されています。
  2. 依存関係の調査: エラーメッセージに示された依存関係を調査し、欠落しているパッケージや問題の原因を特定します。依存関係の問題は、特定のパッケージが古いバージョンである場合や、別のパッケージと競合する場合などがあります。
  3. 依存関係の解決: 依存関係の問題を解決するために、次の手順を実行します。
    • 欠落しているパッケージをインストールする: 欠落しているパッケージをパッケージマネージャーを使用してインストールします。apt install(Debian、Ubuntu)、yum install(CentOS、RHEL)、dnf install(Fedora)などのコマンドを使用します。
    • パッケージを更新する: 依存関係の問題を解決するために、システム全体のパッケージを最新の状態に更新します。apt update && apt upgradeyum updatednf upgradeなどのコマンドを使用します。
    • 依存関係を手動で解決する: 依存関係の問題が複雑な場合、依存関係が満たされるようにパッケージを手動でインストールする必要がある場合があります。この場合、注意深く依存関係を解決し、問題のパッケージをインストールします。
  4. 再試行: 依存関係の問題が解決されたら、再度パッケージのインストールやアップグレードを試みます。依存関係が正常に解決されれば、エラーメッセージは表示されず、パッケージのインストールが成功するはずです。
  5. ログの確認: 依存関係の問題が解決できない場合、ログファイルを確認して詳細を調査します。ログファイルは、通常は/var/logディレクトリにあります。依存関係の問題の原因を特定し、それに対処します。
  6. コミュニティやドキュメントの参照: パッケージの依存関係の問題に関する解決策やヒントを得るために、Linuxコミュニティや公式ドキュメントを参照します。特定のパッケージやディストリビューションに関するフォーラムやウェブサイトで、他のユーザーや開発者からの支援を受けることができます。

ファイルシステムのエラー

ファイルシステムのエラーは、ディスクやファイルシステムに関する問題が原因で発生することがあります。ここでは、ファイルシステムのエラーのトラブルシューティング手順を詳細に解説します。

  1. エラーメッセージの確認:
    • ファイルシステムのエラーが発生した場合、まずはエラーメッセージを確認します。エラーメッセージには問題の原因や場所が記載されていることがあります。
  2. ディスクの検査:
    • ファイルシステムエラーが発生した場合、まずはディスク自体の問題を確認します。ディスクの物理的な損傷や不良セクターが原因でエラーが発生することがあります。ディスクのSMART情報を確認し、必要に応じてディスクのテストを実行します。
  3. ファイルシステムのチェック:
    • ファイルシステムのチェックツール(例: fsck)を使用して、ファイルシステムの整合性を確認します。このツールはファイルシステム内のエラーを修復し、データの損失を最小限に抑えるために使用されます。
  4. マウントオプションの確認:
    • ファイルシステムをマウントする際のオプション設定を確認します。間違ったオプション設定がエラーの原因となることがあります。特に、ファイルシステムが読み取り専用モードでマウントされているかどうかを確認します。
  5. ファイルシステムの拡張:
    • ファイルシステムが容量不足でエラーが発生している場合、ファイルシステムを拡張することで問題を解決することがあります。ファイルシステムの拡張方法については、使用しているファイルシステムとLinuxディストリビューションに応じたドキュメントを参照します。
  6. ログの確認:
    • ログファイル(例: /var/log/messages、/var/log/syslog)を確認し、ファイルシステムエラーに関する追加情報を収集します。ログにはエラーの詳細や原因が記録されている場合があります。
  7. システムの再起動:
    • ファイルシステムエラーが一時的なものである可能性がある場合、システムを再起動して問題が解決されるかどうかを確認します。再起動後もエラーが続く場合は、より詳細なトラブルシューティングが必要です。

ファイルシステムのエラーは、データの損失やシステムの安定性に影響を与える可能性があるため、早めに対処することが重要です。上記の手順を参考にして、ファイルシステムエラーを迅速かつ効果的に解決してください。

パフォーマンスの低下

Linuxサーバーでのパフォーマンス低下のトラブルシューティングには、以下の手順が含まれます。

  1. リソースのモニタリング:
    • CPU、メモリ、ディスク、ネットワークなどのリソース使用状況をモニタリングします。
    • top, htop, vmstat, iostat, sarなどのツールを使用して、リソース使用状況を監視します。
  2. ボトルネックの特定:
    • パフォーマンス低下の原因となるボトルネックを特定します。CPU、メモリ、ディスクI/O、ネットワークなどが一般的なボトルネックです。
    • リソース使用状況が異常に高い場合、その原因を特定します。
  3. プロセスの分析:
    • CPU使用率の高いプロセスを特定し、それらが何を実行しているかを調査します。
    • メモリ使用量の大きいプロセスやメモリリークが発生しているプロセスを特定します。
  4. ディスクのトラブルシューティング:
    • ディスクI/Oのボトルネックを特定し、アクセス速度の遅いディスクや読み込み/書き込みが頻繁に発生するファイルを特定します。
    • iostatiotopを使用して、ディスクI/Oのパフォーマンスを監視します。
  5. メモリのトラブルシューティング:
    • メモリ使用量が高いプロセスやメモリリークを特定し、不要なプロセスを終了させるか、メモリを解放します。
    • freevmstatを使用して、メモリ使用状況を監視します。
  6. ネットワークのトラブルシューティング:
    • ネットワークボトルネックを特定し、ネットワーク帯域幅が不足しているか、ネットワークエラーが発生しているかを確認します。
    • netstatiftopを使用して、ネットワークのトラフィックを監視します。
  7. システム設定の最適化:
    • パフォーマンスを向上させるために、カーネルパラメータやシステム設定を調整します。
    • キャッシュやバッファの調整、ファイルシステムの最適化、ネットワークバッファのサイズの調整などが含まれます。
  8. ログの分析:
    • システムログやアプリケーションログを分析し、パフォーマンス低下の原因を特定します。
    • エラーログや警告メッセージを確認し、問題を解決します。

これらの手順を組み合わせて、Linuxサーバーのパフォーマンス低下のトラブルシューティングを行います。問題の特定と解決には、経験と知識が必要ですが、適切な手順に従うことで効果的に対処できます。

ネットワークの問題

ネットワークの問題をトラブルシューティングする際には、以下の手順に従うことが一般的です。

  1. 問題の特定:
    • ネットワーク上で発生している具体的な問題を特定します。例えば、インターネットに接続できない、LAN内の特定のコンピューターと通信できないなど。
  2. 障害の範囲を確認:
    • 問題が発生しているのは個々のコンピューター、ネットワーク全体、あるいは特定のサービスなどの一部なのかを確認します。
  3. 基本的なトラブルシューティング:
    • ネットワークケーブルやポートの状態を確認します。
    • ネットワーク機器(ルーター、スイッチ、アクセスポイントなど)の電源、LEDインジケータ、接続状態を確認します。
    • コンピューターのネットワーク設定(IPアドレス、サブネットマスク、デフォルトゲートウェイなど)を確認し、必要に応じて修正します。
  4. ネットワークトラフィックの監視:
    • ネットワークトラフィックを監視し、パケットの流れや通信の状態を確認します。ネットワーク監視ツールを使用してトラフィックの分析を行います。
  5. アクセス制御リスト(ACL)の確認:
    • ファイアウォールやルーターなどのネットワーク機器に設定されているアクセス制御リストを確認し、通信がブロックされていないかを確認します。
  6. ネットワークトポロジの確認:
    • ネットワークのトポロジを確認し、物理的な接続や論理的な構成が適切であるかを確認します。障害があれば修正します。
  7. ログの確認:
    • ネットワーク機器やサーバーのログを確認し、問題の原因や関連するエラーメッセージを探します。
  8. トラブルシューティングの記録:
    • すべての実行した手順と結果を記録し、将来の参照のために文書化します。
  9. 問題の解決と修正:
    • 特定された問題に対して適切な修正を実施します。これには、設定の変更、機器の交換、またはネットワークの再構成が含まれる場合があります。
  10. 再テスト:
    • 修正が完了したら、ネットワークの動作を再テストして、問題が解決されたことを確認します。

これらのステップに従うことで、ネットワークのトラブルシューティングを効果的に行うことができます。

起動エラー

Linuxサーバーの起動エラーのトラブルシューティングは、さまざまな要因に基づいて行われます。以下に、一般的な起動エラーのトラブルシューティング手順を示します。

  1. 起動メッセージの確認:
    • サーバーを起動し、コンソールまたはログファイルで起動メッセージを確認します。
    • 起動時にエラーが表示されている場合、それを確認してください。エラーメッセージは問題の特定に役立ちます。
  2. システムログの確認:
    • /var/log/messages/var/log/syslogなどのシステムログを確認します。
    • 起動時に発生したエラーや警告メッセージを探し、問題の特定に役立てます。
  3. シングルユーザーモードでの起動:
    • シングルユーザーモードでシステムを起動し、問題が発生する前の状態に戻します。
    • シングルユーザーモードでは、最小限のサービスでシステムが起動されるため、問題を特定しやすくなります。
  4. ファイルシステムの確認:
    • ファイルシステムのエラーを確認するために、fsck(ファイルシステムのチェック)を実行します。
    • ファイルシステムに問題がある場合は、修復する必要があります。
  5. 起動プロセスの確認:
    • システムの起動プロセスを確認し、正しく実行されているかどうかを確認します。
    • systemdinitなどのプロセスマネージャーを使用して、プロセスのステータスを確認します。
  6. ハードウェアの問題の確認:
    • ハードウェアの故障が起動エラーの原因である可能性があります。ハードウェアを検査して、問題を特定します。
    • メモリ、ストレージデバイス、ネットワークカードなどの問題を確認し、修復または交換します。
  7. 再起動や復元:
    • システムの再起動を試みます。時には単純な再起動で問題が解決される場合があります。
    • 最後の動作が問題を引き起こした場合、システムを以前の正常な状態に戻すためにバックアップからシステムを復元します。
  8. コンフィグレーションの確認:
    • システムの設定ファイルや起動スクリプトを確認し、構成が正しいことを確認します。
    • システムの変更が問題の原因である場合、元の設定に戻すか、問題を修正します。

これらの手順に従って、Linuxサーバーの起動エラーをトラブルシューティングすることができます。ただし、個々の状況に応じて対処法が異なる場合がありますので、十分な注意を払って解決策を見つけてください。

「grub >」が表示されて起動しない

ブートローダーが破損し正常に起動が出来なくなっています。このパターンは色々な種類が考えられるので、以下の手順を試してみて下さい。

症状

  • 電源オン時に「grub >」というプロンプトが表示される
  • OSが起動できない

原因

  • Grub設定ファイル(/boot/grub/grub.cfg)の破損
  • MBR(Master Boot Record)の破損

Grubの再インストール

  1. 起動メニューからUbuntuを選択: 「grub >」が表示されている場合、GRUBブートローダーは起動していますが、正常にUbuntuが起動していません。この状態で再起動し、GRUBメニューが表示されたら、Ubuntuのエントリを選択して起動してみてください。
  2. 修復モードで起動: Ubuntuを起動できない場合は、修復モードで起動してみてください。修復モードでは、ファイルシステムのエラーを修復したり、パッケージの依存関係を修正したりすることができます。
  3. 再インストールGRUB: GRUBが破損している場合、再インストールすることで修復できる場合があります。UbuntuのライブCDやUSBから起動し、再インストールする方法は以下の通りです。
sudo mount /dev/sda1 /mnt  # ルートパーティションをマウント
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt  # ルートファイルシステムに入る
grub-install /dev/sda  # GRUBを再インストール
exit  # chrootを抜ける
sudo reboot  # システムを再起動

ブート修復ツールの使用

  • Ubuntuインストールメディアから起動
  • “Try Ubuntu without installing”を選択
  • “Grub修復”ツールを実行

Grub設定ファイルの修復

chroot環境で以下のコマンドを実行

sudo mount /dev/sda1 /mnt
grub-install /dev/sda

MBRの修復

  • Ubuntuインストールメディアから起動
  • “Try Ubuntu without installing”を選択
  • “GParted” ツールを実行
  • /dev/sda を選択
  • “Boot” フラグを確認

起動オプションの変更

  • 電源オン時に、Grubメニューが表示されるまで待機します。
  • “e” キーを押して、起動オプションを編集します。
  • “linux /boot/vmlinuz-5.15.0-47-generic root=/dev/sda1” という行を見つけ、末尾に “nomodeset” を追加します。
  • “F10” キーを押して、変更を保存して起動します。

Grubが破損して起動できない

Grubが表示されていれば、先に述べた対処を行えば良いのですが、Grubが完全に破損するとGrubメニューも表示されません。

症状

  • 電源オン時にGrubメニューが表示されない
  • “Error: No such device: …” などのエラーメッセージが表示される
  • 起動しようとすると、カーネルパニックが発生する

原因

  • Grub設定ファイル(/boot/grub/grub.cfg)の破損
  • MBR(Master Boot Record)の破損
  • ファイルシステムのエラー
  • ハードウェアの故障

ブート修復ツールの使用

  • Ubuntuインストールメディアから起動
  • “Try Ubuntu without installing”を選択
  • “Grub修復”ツールを実行

Grub設定ファイルの修復

chroot環境で以下のコマンドを実行

sudo mount /dev/sda1 /mnt
grub-install /dev/sda

MBRの修復

  • Ubuntuインストールメディアから起動
  • “Try Ubuntu without installing”を選択
  • “GParted” ツールを実行
  • /dev/sda を選択
  • “Boot” フラグを確認

ファイルシステムの修復

  • Ubuntuインストールメディアから起動
  • “Try Ubuntu without installing”を選択
  • “fsck” ツールを実行

ハードウェアの故障

  • 上記の方法で解決しない場合は、ハードウェアの故障が疑われます。
  • 専門業者に診断を依頼することをおすすめします。

セキュリティの問題

セキュリティの問題をトラブルシューティングする際には、以下の手順を順番に実行することが重要です。

  1. 問題の特定:
    • 最初に、何が問題なのかを正確に特定します。不正アクセス、権限の不備、ハッキングの試み、マルウェア感染など、さまざまなセキュリティ問題が発生する可能性があります。
  2. ログの確認:
    • システムログ、セキュリティログ、アクセスログなど、関連するログを確認して、問題がいつ、どのように発生したのかを特定します。異常なアクティビティやエラーメッセージを探します。
  3. 脅威の分析:
    • 発生している問題に関連する脅威を分析します。ウイルス、トロイの木馬、スパイウェア、不正アクセスなど、さまざまな脅威が考えられます。
  4. 脆弱性の評価:
    • システムやアプリケーションにある脆弱性を評価し、それらが攻撃者によって悪用された可能性があるかどうかを確認します。セキュリティパッチやアップデートが適用されているかを確認します。
  5. セキュリティポリシーの確認:
    • システムやネットワークのセキュリティポリシーを確認し、適切に設定されているかどうかを確認します。アクセス制御、パスワードポリシー、ファイアウォールルールなどが正しく設定されているかを確認します。
  6. 対策の実施:
    • 特定されたセキュリティの問題に対して適切な対策を実施します。これには、セキュリティパッチの適用、不要なサービスの無効化、セキュリティソフトウェアの導入、アクセス制御の強化などが含まれます。
  7. 監視と防御の強化:
    • セキュリティの問題が解決された後も、システムとネットワークの監視を継続し、新たな脅威や攻撃を検知するための監視と防御を強化します。ログの監視、侵入検知システムの導入、セキュリティイベントの警告などが含まれます。

これらの手順を順番に実行することで、セキュリティの問題を迅速かつ効果的に解決することができます。ただし、セキュリティの問題は常に進化しており、最新の脅威に対処するためには常に注意が必要です。

ログインの問題

ログインの問題は、Linuxサーバーで最も一般的なトラブルの1つです。以下は、ログインの問題を解決するためのトラブルシューティング手順です。

  1. ログイン時のエラーメッセージの確認:
    • ユーザーがログインしようとするときに表示されるエラーメッセージを確認します。これにより、問題の原因を特定できることがあります。一般的なエラーメッセージには、パスワードの期限切れ、アカウントロックアウト、権限の不足などがあります。
  2. システムログの確認:
    • /var/log/messages/var/log/auth.logなどのログファイルを確認して、ログイン時に発生したエラーまたは警告メッセージを探します。これにより、問題の詳細を把握できることがあります。
  3. ユーザーアカウントの確認:
    • ユーザーがログインするための有効なアカウントが存在することを確認します。/etc/passwdファイルや/etc/shadowファイルなどのユーザーアカウント情報を確認します。
  4. パスワードの確認:
    • ユーザーが正しいパスワードを入力していることを確認します。また、パスワードが期限切れになっていないかどうかも確認します。
  5. パーミッションの確認:
    • ユーザーのホームディレクトリや関連するファイルのパーミッションを確認します。必要に応じて、chmodコマンドやchownコマンドを使用して修正します。
  6. NISやLDAPなどの外部認証サービスの確認:
    • システムがNISやLDAPなどの外部認証サービスを使用している場合、それらのサービスが正しく動作しているかどうかを確認します。必要に応じて、認証サービスの設定を確認および修正します。
  7. ユーザーログインシェルの確認:
    • ユーザーアカウントのログインシェルが正しく設定されていることを確認します。不正なログインシェルが設定されている場合は、適切なシェルに変更します。
  8. セキュリティポリシーの確認:
    • セキュリティポリシーによってログインが制限されている場合、それに合わせて設定を調整します。たとえば、アクセス制御リスト(ACL)やPAM(Pluggable Authentication Modules)を使用して、ログインの制限を設定できます。

これらのトラブルシューティング手順を実行することで、Linuxサーバーでのログインの問題を解決するのに役立ちます。

サーバー監視用スクリプト

ここまで紹介してきた内容を全て人力でチェックして運用する事は困難です。
スクリプトの簡単な例を紹介するので、ご自身の環境やチェックしたい内容に併せて修正し、cronなどで自動監視を行う事をお勧めします。

#!/bin/bash

# パッケージの依存関係の問題をチェック
function check_package_dependency {
    echo "Checking package dependency issues..."
    # apt の場合
    apt-get check
    # yum の場合
    yum check
    # dnf の場合
    dnf check
}

# ファイルシステムのエラーをチェック
function check_filesystem_error {
    echo "Checking filesystem errors..."
    fsck -n /dev/sda1  # 修正を行わずにチェック
}

# パフォーマンスの低下をチェック
function check_performance {
    echo "Checking system performance..."
    top -b -n 1 | head -n 20  # 上位のプロセスを表示
}

# ネットワークの問題をチェック
function check_network_issue {
    echo "Checking network issues..."
    ping -c 4 google.com  # Googleに対してpingを送信
}

# 起動エラーをチェック
function check_boot_error {
    echo "Checking boot errors..."
    dmesg | grep "error"  # カーネルメッセージからエラーを検索
}

# セキュリティの問題をチェック
function check_security_issue {
    echo "Checking security issues..."
    # 未適用のセキュリティパッチのリストを取得
    apt list --upgradable | grep "security"
}

# ログインの問題をチェック
function check_login_issue {
    echo "Checking login issues..."
    # ログインできないユーザーアカウントを表示
    cat /etc/passwd | grep "nologin"
}

# 各チェック関数を実行
check_package_dependency
check_filesystem_error
check_performance
check_network_issue
check_boot_error
check_security_issue
check_login_issue

このスクリプトを実行すると、各チェック関数が実行され、それぞれの問題に対するチェックが行われます。Cronジョブとして定期的に実行されるように設定することで、システムの問題を定期的に監視できます。

Linuxサーバーの運用で注意すること

Linuxサーバーの運用で注意することをいくつか挙げます。

  1. セキュリティの確保:
    • セキュリティパッチの定期的な適用
    • 不要なサービスの無効化
    • ファイアウォールの設定
    • 強力なパスワードポリシーの実施
    • 不正アクセスのモニタリングとログの監視
  2. バックアップの実施:
    • システム設定や重要なデータの定期的なバックアップ
    • バックアップのテストと検証
    • バックアップの保存場所の冗長化
  3. パフォーマンスの最適化:
    • リソースのモニタリングとトラブルシューティング
    • ディスク容量の管理と不要なファイルの削除
    • キャッシュやバッファの最適化
  4. 定期的なメンテナンス:
    • システムのアップデートとパッチ適用
    • ディスクのデフラグメンテーション
    • 不要なプロセスやサービスの終了
  5. 監視とアラートの設定:
    • システムの監視ツールの導入と設定
    • リソース使用状況やパフォーマンスメトリクスの監視
    • アラートの設定と適切な対応
  6. 適切なアクセス権の設定:
    • ユーザーとグループの管理
    • ファイルおよびディレクトリのアクセス権の設定
    • 最小特権の原則の適用
  7. ドキュメントと手順の作成:
    • システム構成や設定のドキュメント化
    • 運用手順やトラブルシューティングのガイドラインの作成
    • 新しい機能や変更のドキュメントとテスト

これらの手順とベストプラクティスを遵守することで、Linuxサーバーの運用を安全かつ効率的に行うことができます。

まとめ

トラブルの対応は、サーバー構築以上にスキルの差が出るポイントだと言えます。

マニュアル通りにこうやればよいというものがほぼなく、できる限り早く解決することが求められますが、同時に誤魔化さずに解決することも求められます。サイバー攻撃を受けたという場合は特に時間をかけてでも慎重になる必要があります。ネットワークやアプリケーションに原因がある場合、ネットワークの知識も要求されますし、切り分けの段階からさまざまなコマンドを駆使することになります。

トラブルは避けたいものですが、長い間サーバーの管理を行っていると、どうしても発生するものでもあります。難しいところですが、サーバー管理者としては逃げられないところです。