Linuxトラブルシューティング:5つの一般的な問題とその解決方法
Linuxは強力で信頼性の高いオペレーティングシステムですが、経験豊富なユーザーでも予期しない問題に直面することがあります。削除されたファイル、忘れたルートパスワード、または遅いシステムなど、効率的にトラブルシューティングする方法を知ることが、真のLinuxエキスパートになるための鍵です。
このガイドは、システム管理者、開発者、日常のLinuxユーザーの間で一般的な、実際のLinux問題解決シナリオと段階的な解決策を提示します。
シナリオ1:重要なファイルを誤って削除してしまった
あなたはrmコマンドを使用して重要なファイルを誤って削除してしまい、今それを復元する必要があります。WindowsやmacOSとは異なり、Linuxにはターミナルから削除されたファイルのための組み込みの「ごみ箱」はありません。
あなたの回復オプションは、使用しているファイルシステムによって異なります。
EXT3およびEXT4ファイルシステム用
extundeleteを使用してください。これは、Linuxのext3およびext4ファイルシステムから削除されたファイルを復元するために設計されたオープンソースのユーティリティです。
sudo apt install extundelete # Debian-based
sudo yum install extundelete # RHEL-based
回復を試みる前に、削除されたデータが上書きされるのを防ぐために、パーティションをアンマウントしてください。
sudo umount /dev/sdX
次に、削除されたファイルを復元するために以下のコマンドを実行し、/dev/sdX</code>をファイルが削除された実際のパーティションに置き換えてください。
sudo extundelete /dev/sdX --restore-all
XFS、Btrfs、またはNTFSファイルシステム用
システムがXFS</strong>、Btrfs</strong>、またはNTFS</strong>を使用している場合、testdiskツールはより良い選択です。
sudo apt install testdisk # Debian-based
sudo yum install testdisk # RHEL-based
testdiskを実行し、インタラクティブなプロンプトに従って失われたファイルを復元してください。
sudo testdisk
予防のヒント:
- trash-cliを使用する:
rm
の代わりに、trash-cli
を使用してファイルを回復可能なゴミ箱に送ります。
- trash-cliを使用する:
sudo apt install trash-cli
trash-put myfile.txt
- 定期的なバックアップを有効にする: 重要なファイルを自動的にバックアップするためにrsyncまたはTimeshiftを設定します。
シナリオ2:忘れたルートパスワードの回復
ルートパスワードを忘れてしまったため、管理タスクを実行できず、ソフトウェアのインストール、システム設定の変更、重要なファイルへのアクセスができません。
リカバリーモードで起動するか、GRUBブートローダーを変更することで、ルートパスワードをリセットできます。
リカバリーモードを使用する(Ubuntu/Debian)
まず、システムを再起動し、起動中にShift
キーを押し続けてGRUBメニューにアクセスし、Advanced optionsを選択してRecovery modeを選び、Drop to root shell promptを選択します。
ここで、ルートファイルシステムを読み書き可能として再マウントし、rootパスワードをリセットします。
mount -o remount,rw /
passwd root
システムを再起動してください。
reboot
rd.breakを使用する(RHEL/CentOS/Fedora)
まず、システムを再起動し、GRUBメニューでe
を押して、linux
で始まる行を見つけ、最後にrd.break
を追加します。
次に、ルートファイルシステムをマウントし、ルートパスワードをリセットします。
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
最後に、終了して再起動します。
exit
reboot
予防のヒント:
- ルートアクセスからロックアウトされないように、パスワードなしのsudoユーザーを作成します。
- 認証にはパスワードの代わりにSSHキーを使用してください。
シナリオ3:パッケージをインストールしましたが、動作していません
パッケージをインストールしましたが、実行しようとすると「コマンドが見つかりません」と表示されます。これは通常、バイナリがシステムの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
を実行してください。 - SnapやFlatpakのようなパッケージマネージャーを使用すると、依存関係をより適切に管理できます。
シナリオ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)
システムを更新するとき、特にUbuntuやDebianベースのディストリビューションでは、新しいバージョンのLinuxカーネルがしばしばインストールされます。
しかし、古いカーネルは自動的には削除されず、時間が経つにつれてこれらの古いカーネルが蓄積され、かなりのディスクスペースを占有する可能性があります。
それらを削除することは、システムの機能に影響を与えずにスペースを解放する安全で効果的な方法です。
sudo apt autoremove --purge
予防のヒント:
- ログローテーションの設定: logrotateを使用して、ログファイルのサイズと保持期間を自動的に管理します。
- ディスク使用量の監視: ncduのようなツールをインストールして、ディスク使用量を追跡し、スペースを占有しているものを特定します。
- 定期的なクリーンアップ: 一時ファイル、キャッシュ、未使用のパッケージを削除するために定期的なクリーンアップをスケジュールします。
シナリオ5:サーバーが突然応答しなくなった
Linuxサーバーを管理していると、突然応答しなくなり、SSHで接続を試みると、接続がタイムアウトするか、確立を拒否されます。サーバーはまだ電源が入っていることに気付くかもしれませんが、どのコマンドにも反応しません。
この状況は、以下を含むさまざまな問題によって引き起こされる可能性があります。
- 暴走プロセスによる高いCPUまたはメモリ使用率。
- ディスクI/Oボトルネック、これはシステムが読み書き操作で過負荷になっている状況です。
- カーネルパニックまたはシステムクラッシュ。
- ネットワーク障害により、リモートアクセスができません。
制御を復元するには、これらのトラブルシューティング手順に従ってください。
ステップ1:サーバーにローカルまたはTTY経由でアクセスする
SSHが機能していない場合は、サーバーに直接アクセスするか、TTYセッションを通じてアクセスしてみてください。
- 物理マシンでは、ローカルコンソールを使用してください。
- 仮想マシン上で、ハイパーバイザーのコンソールを使用します。
- Linuxシステムの場合、Ctrl + Alt + F2</code>(またはF3</code>、F4</code>など)を使用して別のTTYセッションに切り替えます。
ステップ2:システム負荷を確認する
ログインしたら、システムの負荷とリソース使用状況を確認してください。これにより、システムの負荷平均が1分、5分、15分の間で表示されます。CPUコアの数よりも高い負荷値は、高い需要を示します。
uptime
次に、topまたはhtopを使用してリアルタイムでプロセスを監視します:
top
Or
htop
過剰なCPUまたはメモリを消費しているプロセスを探してください。
ステップ3:暴走プロセスを特定して終了させる
最もリソースを消費するプロセスを特定するには、次のコマンドを実行します:
ps aux --sort=-%cpu | head
これは、問題のあるプロセスを見つけて終了できる、CPUを消費している上位のプロセスのリストです。
kill -9 PID
PID
を問題のあるアプリケーションのプロセスIDに置き換えてください。
ステップ4:システムログを確認する
システムがまだ応答している場合は、エラーログを確認してください。
sudo tail -f /var/log/syslog
Or
sudo dmesg | tail
これらのコマンドは最近のシステムメッセージとカーネルログを表示し、ハードウェアやソフトウェアの問題を特定するのに役立ちます。
ステップ5:SysRqを使用して安全に再起動する
システムが完全にフリーズした場合は、SysRqキーの組み合わせを使用して安全に再起動してください。
echo b > /proc/sysrq-trigger
これにより、安全な再起動がトリガーされ、ディスクの同期とファイルシステムのアンマウントによってデータの整合性が確保されます。
結論
トラブルシューティングは、すべてのLinuxユーザーにとって不可欠なスキルです。削除されたファイルの復元、パスワードのリセット、システムエラーの修正など、正しいコマンドを知っていることは、時間とストレスを節約できます。
あなた自身のトラブルシューティングのヒントはありますか?コメントで共有してください!一緒に役立つLinuxコミュニティを作りましょう。