ディスクがいっぱいになったときに問題を解決する方法

ディスクがいっぱいになったときに問題を解決する方法

マイディスクドライブ/ dev / sdcがいっぱいです(下記参照)。とにかく、すべてのディスク容量を消費する理由を解決する方法はありますか?

実行してみましたが、du -d -h 1正しいコマンドではないようです。

$ df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc         14G   13G     0 100% /            <--- here
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  174M  1.7G  10% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1       488M  132M  321M  30% /boot
/dev/sdd         99G   25G   73G  26% /data
tmpfs           378M     0  378M   0% /run/user/0

その他のログ出力:

$ du -h -d 1

52K     ./tmp
131M    ./boot
24M     ./opt
4.0K    ./mnt
34M     ./etc
1.6G    ./root
0       ./sys
44K     ./sysadmin
du: cannot access './proc/58885/task/58885/fd/4': No such file or directory
du: cannot access './proc/58885/task/58885/fdinfo/4': No such file or directory
du: cannot access './proc/58885/fd/4': No such file or directory
du: cannot access './proc/58885/fdinfo/4': No such file or directory
0       ./proc
16K     ./lost+found
0       ./dev
25G     ./data
4.0K    ./media
32K     ./home
182M    ./run
2.6G    ./usr
921M    ./var
4.0K    ./srv
31G     .
$ du -ahx --threshold=1G

1.2G    ./root/ffmpeg_sources
1.6G    ./root
2.6G    ./usr
5.2G

答え1

予期しないディスク使用量を特定するには、いくつかのアプローチを取る必要があります。

  1. ディスク使用量を隠す

    何人かの人々がそれを提案したり、du -xhs /*その変形を提案した。これは良い出発点ですが、マウントポイントの下を見ることはありません。 (誤ってデータを書き込んだ後にファイルシステムをマウントする可能性があります。)ワイルドカードには組み込みが必要なため、このコマンドはルートではなくファイルシステムについても報告します。

    これらの問題は次のように解決できます。バインドマウント

    mkdir -p /mnt/root
    mount --bind / /mnt/root
    shopt -s dotglob
    du -hs /mnt/root/*
    

    これにより、ルートファイルシステムがマウントされ、/mnt/rootすべての最上位ディレクトリ(およびファイル)の要約が報告されます。プライマリマウントとは異なり、/考慮すべき(そして避けるべき)セカンダリマウントファイルシステムはありません。

  2. 削除されたファイル

    削除されたがまだ開いているファイルは、閉じるまでディスク割り当てを維持します。これは他の答えで扱われたので、完全性のためにここで言及します。

    lsof | grep deleted
    

答え2

私が最初にしたことは、ドライブに何が含まれているかを確認することでした。インストールに応じて、/home、/usr、/var(/var がログを保持し、プロセスがログにあまりにも多くのエラーメッセージを生成する可能性があります)ダウンしてサブディレクトリを探します。

事実を把握したら、問題が問題であるか(ビデオが多すぎてドライブ全体を埋める場合)、実行中のログ、データファイルなどを生成するプロセスであることを確認できます。 ...

問題があなたによって引き起こされたのではなく、プロセスによるものである場合は、前の手順で収集した情報を活用して問題を特定し、問題を解決できる可能性があります。

編集:私の答えを振り返ってみると、重要なことを見逃したことがわかります。マウントポイントであるディレクトリにファイルを作成し、そのディレクトリに何かをインストールすると、そのファイルは表示されません。そのディレクトリからデバイスをマウント解除します。その中にファイルがあることがわからないので、デバイスをアンマウントし、そのディレクトリにファイルがあることを確認する必要があるかもしれません。

答え3

ドライブがいっぱいで、目立つ証拠が見えない理由の1つは、du個人ファイルに関連しています。プロセスは書き込み用にファイルを開き、書き込みを開始し、ディレクトリからファイルを削除できます。これにより、プロセスが書き続けることができる開かれたファイルが残ります。このファイルはまだディスク容量を消費しますが、ファイルシステムを参照して発見できません。愚かで聞こえるが他のプロセスにさらされることを望まない機密情報のための一時記憶域を割り当てるのに役立ちます。

他のプログラムも書き込むために、ファイルを開いたプログラムがそのファイルについて知らずにそのファイルを削除できます。時々、ユーザーはsyslogd所有者プロセス(たとえば)によってまだ開いているログファイル(または他のファイル)を削除してスペースを解放しようとします。その結果、ファイルは空間を占有または拡大し続けます。もっと強く探す。

そのようなファイルを見つけるには、カーネルの開いているファイルのリストを調べる必要があります。lsofこの目的のために選択したツールです。開いているすべてのファイルと現在のカーネルで読み書きしているファイルのオフセットを表示します。

以下は役に立つコマンドです。

lsof -o /dev/sdc | grep deleted

これが何をしているのかを理解しましょう。

  • lsof開いたファイルのリスト
  • -o引用するいつもファイルオフセットの表示
  • /dev/sdc結果を/dev/sdcブロックデバイスのファイルに制限する

ファイルが削除されると、lsofそのファイルがあった場所の後ろの行末に表示されます。それを見つけてください。(deleted)grep deleted

これらのファイルのいくつかは正常である可能性があります。ただし、出力の列7にはオフセットが表示されます0t。オフセットも多く削除される場合、見えないほど多くのディスク領域を消費しています。

このスペースを空にするには、プロセスを終了する必要があります。 (プロセスによっては再起動が必要な場合があります。)すぐにディスク容量が増えることがわかります。

関連情報