私はLinuxに初めて触れました。私は数週間分のログだけをバックアップしました。今週のメッセージを調べたところ、最後のバックアップから最後の週に保存が中断されたことが確認されました。通常、新しいメッセージ文書は毎週ほぼ同じ時間に開始されます。いつものように、今週は新しい文書が自動的に作成され、ログの再保存が始まりました。しかし、先週保存を中断したログはまだありません。ここで何が起こっているのかというアイデアがある人はいますか?失われたログを回復する方法はありますか?
答え1
/var/log/syslog ファイルを開くと、名前が変更され削除され、同じ名前の新しいファイルが作成された可能性が高くなります。
これにより、削除されたファイルにメッセージが送信されます(Unixでは、ファイルが開いている間にこれを行うことができます。データはディスクに書き込まれ、空き容量の削減に反映されます)。
ファイルが閉じられると、ファイルは実際に削除され、すべてのデータが失われます。絶望的な最後の手段として、削除された空き領域のログファイル行に対して、rootコマンドとgrepコマンドでstringsコマンドを使用して論理ディスク全体をダンプできます。ファイルシステムが圧縮されておらず、削除されたファイルをクリーンアップできる保護装置がないとします。この場合、炉を煮ることなく悪名高い小川に沿って下がります。
# Assume log lines begin with YYYY-MM-DD and are from last week
# And assume that /var/log is on /dev/sda1.
# Save on a different disk or external USB device
dd if=/dev/sda1 | strings | grep "^2019-08-[23][0-9] ..:..:.. " > /mnt/usbkey/logs.txt
# After some hours, MAYBE you'll find something among all the rubbish in /mnt/usbkey/logs.txt
あるいは、syslogデーモンが停止している可能性があります。
どのファイルが開いているかを確認するには、syslogのpidをロケールして/proc/PID_OF_SYSLOG/fdを見てください。そこにファイルハンドルが表示されます。これは実際に開いているファイルへのシンボリックリンクです。
次のようなものを見ると
3 -> /var/log/syslog [削除済み]
そこはい/var/log/syslog は削除されません。つまり、2つの異なるファイルです。 syslogを停止して再起動すると、問題が解決します。
一部のログローテーションスクリプトは、古いログファイルを移動/名前変更/圧縮/削除するときに、このような愚かなタスクを実行することがあります。