Linuxの問題解決シナリオ:実世界の課題と解決策

Linuxは強力で信頼性の高いオペレーティングシステムですが、経験豊富なユーザーでさえ予期せぬ問題に遭遇することがあります。削除されたファイル、忘れられたルートパスワード、または遅いシステムなど、効率的なトラブルシューティング方法を知ることは、真のLinuxエキスパートになるための鍵です。

このガイドでは、システム管理者、開発者、そして日常的なLinuxユーザーの間で一般的な、実際のLinuxの問題解決シナリオと、段階的な解決策を紹介しています。

シナリオ1:重要なファイルを誤って削除した

rmコマンドを使用して重要なファイルを誤って削除し、今それを回復する必要があります。 WindowsmacOSとは異なり、Linuxには端末から削除されたファイルのための「ごみ箱」が組み込まれていません。

回復オプションは使用中のファイルシステムに依存します。

EXT3/EXT4ファイルシステムの場合

Linuxでext3およびext4ファイルシステムから削除されたファイルを回復するために設計されたオープンソースユーティリティであるextundeleteを使用します。

sudo apt install extundelete  # Debian-based  
sudo yum install extundelete  # RHEL-based  

回復を試みる前に、削除されたデータが上書きされるのを防ぐためにパーティションをアンマウントしてください。

sudo umount /dev/sdX

次に、次のコマンドを実行して削除されたファイルを回復してください。ファイルが削除された実際のパーティションに/dev/sdXを置き換えてください。

sudo extundelete /dev/sdX --restore-all

XFS、Btrfs、またはNTFSファイルシステムの場合

システムが XFSBtrfs、またはNTFSを使用している場合、testdiskツールがより良い選択肢です。

sudo apt install testdisk  # Debian-based  
sudo yum install testdisk  # RHEL-based  

testdiskを実行し、対話型プロンプトに従って失われたファイルを復元します。

sudo testdisk

予防のヒント:

    • trash-cli の使用: rmの代わりに、ファイルを復元可能なゴミ箱に送信するためにtrash-cliを使用します。
sudo apt install trash-cli  
trash-put myfile.txt  
  • 定期的なバックアップの有効化: 重要なファイルを自動的にバックアップするためにrsyncまたはTimeshiftを設定します。

シナリオ2: ルートパスワードのリカバリ

ルートパスワードを忘れて管理的なタスクを実行できない場合、ソフトウェアのインストール、システム設定の変更、クリティカルなファイルへのアクセスができません。

回復モードにブートしてルートパスワードをリセットするか、GRUBブートローダーを変更します。

回復モードの使用(Ubuntu/Debian)

最初にシステムを再起動して、起動中にShiftキーを押してGRUBメニューにアクセスし、「高度なオプション」→「回復モード」を選択し、「rootシェルプロンプトに切り替え」を選択します。

ここで、ルートファイルシステムを書き込み可能に再マウントしてrootパスワードをリセットします。

mount -o remount,rw /
passwd root

システムを再起動します。

reboot

rd.break を使用する(RHEL/CentOS/Fedora)

最初に、システムを再起動し、GRUBメニューでeを押して、linuxで始まる行を見つけて末尾にrd.breakを追加します。

次に、ルートファイルシステムをマウントして、rootパスワードをリセットします。

mount -o remount,rw /sysroot  
chroot /sysroot  
passwd root  

最後に、終了して再起動します。

exit  
reboot  

予防のヒント:

シナリオ3: パッケージをインストールしたが動作しない

パッケージをインストールしましたが、実行しようとすると「command not found」と表示され、通常はバイナリがシステムのPATHにない、パッケージが正しくインストールされていない、または依存関係が不足している場合に発生します。

解決策は、まずパッケージがインストールされているかどうかを確認する必要があります。

dpkg -l | grep package-name  # Debian-based  
rpm -qa | grep package-name  # RHEL-based  

不足している場合は、再インストールします。

sudo apt install package-name  
sudo yum install package-name  

次に、コマンドがシステムのPATHにあるかどうかを確認します。

which package-name  
echo $PATH

バイナリが標準以外の場所にある場合は、それをPATHに追加します:

export PATH=$PATH:/usr/local/bin  

予防対策

  • 新しいパッケージをインストールした後は、ターミナルを再起動するかhash -rを実行してください。
  • SnapFlatpakなどのパッケージマネージャーを使用すると、依存関係をより良く処理できます。

シナリオ4:システムのディスク容量が不足している

システムが「デバイス上に空き領域がありません」というエラーを表示し、ソフトウェアの更新、ログ記録、通常の操作ができなくなります。

ディスク容量を回復してシステムをスムーズに動作させる方法は次の通りです。

ステップ1:ディスク使用状況の確認

解決策は、ますます各パーティションでどれだけのスペースが使用されているかをdfコマンドを使用して確認する必要があります。

df -h

ステップ2:大きなファイルの検索と削除

次に、duコマンドを実行して、システムをスキャンし、最も多くのスペースを消費している上位10の大きなファイルやディレクトリをリストアップします。不要なファイルはrmを使用して削除するか、外部ドライブに移動してください。

du -ah / | sort -rh | head -10

ステップ3:不要なログを削除する

ログはトラブルシューティングやシステムアクティビティの監視には必要不可欠ですが、急速に増大しディスク容量のかなりの部分を占有することがあります。

経時的に古くなったログはもはや必要ない場合があり、クリーンアップの対象となります。

sudo journalctl --vacuum-time=2d  # Deletes logs older than 2 days  
sudo apt autoclean                # Removes outdated package files  

ステップ4:古いカーネルを削除する(Ubuntu/Debian)

システムをアップデートする際、特にUbuntuDebianベースのディストリビューションでは、Linuxカーネルの新しいバージョンがインストールされることがよくあります。

しかし、古いカーネルは自動的に削除されず、経時的にこれらの古いカーネルが蓄積されてかなりのディスク容量を占有する可能性があります。

これらを削除することは、システムの機能に影響を与えることなくスペースを開放する安全かつ効果的な方法です。

sudo apt autoremove --purge  

予防のヒント:

  • ログローテーションの設定: logrotateを使用してログファイルのサイズと保存期間を自動管理します。
  • ディスク使用量のモニタリング: ncduなどのツールをインストールしてディスク使用量を追跡し、スペースを占有する要因を特定します。
  • 定期的なクリーンアップ: 一時ファイル、キャッシュ、未使用のパッケージを削除する定期的なクリーンアップをスケジュールします。

シナリオ5: サーバーが突然応答しない

Linuxサーバーを管理していて、突然応答しなくなり、SSH経由で接続を試みてもタイムアウトしたり接続が拒否されることがあります。サーバーは電源が入っている状態であることに気づくかもしれませんが、どのコマンドにも反応しないかもしれません。

この状況は、次のような問題が原因で発生する可能性があります:

制御を回復させるために、これらのトラブルシューティング手順に従ってください。

ステップ1: ローカルまたはTTY経由でサーバーにアクセス

SSHが機能しない場合は、サーバーに直接アクセスするかTTYセッションを介してアクセスしてみてください。

  • 物理マシンの場合は、ローカルコンソールを使用します。
  • 仮想マシンの場合は、ハイパーバイザのコンソールを使用します。
  • Linuxシステムの場合は、Ctrl + Alt + F2(またはF3F4など)を使用して別のTTYセッションに切り替えます。

ステップ2: システムの負荷をチェック

ログイン後、システムの負荷とリソース使用状況をチェックしてください。これにより、1分、5分、および15分間の平均負荷が表示されます。 CPUコア数より高い負荷値は、高い需要を示します。

uptime  

次に、topまたはhtopを使用してプロセスをリアルタイムで監視します。

top  
Or
htop

過剰なCPUまたはメモリを消費しているプロセスを探してください。

ステップ3: ハングアップしたプロセスを特定して終了させる

最もリソースを消費しているプロセスを特定するには、次のコマンドを実行します。

ps aux --sort=-%cpu | head  

これにより、CPUを最も消費しているプロセスが一覧表示され、問題のあるプロセスを次のようにして終了させることができます。

kill -9 PID  

問題のあるアプリケーションのプロセスIDでPIDを置き換えてください。

ステップ4: システムログをチェック

システムがまだ応答している場合は、エラーのためにログを確認してください。

sudo tail -f /var/log/syslog  
Or
sudo dmesg | tail  

これらのコマンドは、最近のシステムメッセージやカーネルログを表示し、ハードウェアやソフトウェアの問題を特定するのに役立ちます。

ステップ5:SysRqを使用した安全な再起動

システムが完全にフリーズした場合は、SysRqキーの組み合わせを使用して安全に再起動します。

echo b > /proc/sysrq-trigger  

これにより、ディスクの同期とファイルシステムのアンマウントが行われ、データの整合性が確保されます。

結論

トラブルシューティングは、すべてのLinuxユーザーにとって重要なスキルです。削除されたファイルの回復、パスワードのリセット、システムエラーの修正など、適切なコマンドを知っていることは、時間とストレスを節約できます。

あなた独自のトラブルシューティングのヒントはありますか?コメントで共有してください!一緒に有益なLinuxコミュニティを築きましょう。

Source:
https://www.tecmint.com/linux-troubleshooting-tips/