df コマンドが正しい値を表示しません。

df コマンドが正しい値を表示しません。

これはRHELサーバーであり、そのサーバー上でMySQLサーバーを実行しており、データベースとログファイル(ロギングは無効になっています)は十分なスペースがある/srvディレクトリにあります。

私は最近テーブルがクラッシュして修正しようとしましたが、翌日ディスクスペースがないというエラーでMySQLが多くのクエリに応答できないことを発見しました。

ERROR 1030 (HY000): Got error 28 from storage engine

それで、何がスペースを占めているのかを確認するために、次のコマンドを実行しました。

[root@tms /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/server-slash
                      9.9G  9.5G     0 100% /
tmpfs                 7.8G     0  7.8G   0% /dev/shm
/dev/sda1             485M   58M  402M  13% /boot
/dev/mapper/server-var
                      739G  252G  450G  36% /srv

驚くべきことはカタログです/。しかし、さらに驚くべきことに、以下のディレクトリには、/使用されたスペースが次よりも多いことを示していません。2GBdf全スペースを表示しながら9.9GBのための/

[root@tms /]# du -sh /*
7.5M    /bin
48M     /boot
200K    /dev
24M     /etc
4.0K    /home
223M    /lib
21M     /lib64
16K     /lost+found
4.0K    /media
4.0K    /mnt
183M    /opt
...deleted some file-not-found errors for files under /proc
0       /proc
144K    /root
14M     /sbin
4.0K    /selinux
252G    /srv
0       /sys
44K     /tmp
917M    /usr
259M    /var

では、df間違った値が表示されるのはなぜですか?実際にスペースを占めるものとはどうすればわかりますか?

答え1

一般的なプログラミング技術は、一時ファイルを作成してすぐにリンクを解除することです。これにより、プログラムの実行中にファイル(およびそのスペース)を使用できますが、ファイルを使用するプログラムが終了するとファイルは自動的に削除されます。 1つの利点は、エピローグ(クリーンアップ)コードを書く必要がないことです。

プロセスがリンクされていないファイルを開いたままにしていることを確認するには、次の手順を実行します。

lsof -a +L1 /dev/server_slash

(または)

lsof +D /dev/server_slash +L1

NLINK値が0のすべてのファイルを見つけます。これらのファイルのリンク数はゼロで、最後のプロセスが終了すると消えます。 SIZE / OFFSET列は関連ファイルの文字サイズを提供します。

答え2

1)dfUNIXスタイルのファイルシステムは、ルート用に予約されたスペースを報告しません(デフォルトは5%)。したがって、df報告されたコンテンツは常に必要以上に少なくなります。

2)さて、ここではsrvパーティションをマウントせずにデータベースを実行しているようです。 srvパーティションがマウントされていない場合、内容はマウントポイントに書き込まれます。 / - パーティションのsrvディレクトリに移動します。 (ルートパーティション)なので、/パーティション内の多くのスペースを占めています。

しかし、あなたがするsrv-directoryにsrv-partitionをマウントすると、/ -partitionのsrv-directoryの下にあるすべてのファイルが「マウントされた」パーティションによって「非表示」になります。しかし、スペースはまだ使用されていますが、見ることはできません。削除またはアクセスして削除できます。

srv-partitionをアンマウントしてみてください(singleuser-moder / runlevel 1 / maintenanceモードに移動してすべてが停止します)。実際にアンマウントされていることを確認し、通常はマウントポイントとして使用されているmountディレクトリに隠しファイルがあることを確認してください。 (usr、srv、home、var、tmp、...)は/パーティションにあります。私はあなたがそれらのいくつかで重要なものを見つけると確信しています。完了して再起動したら、srvパーティションが実際に正しい方法でマウントされていることを確認してください。

これは通常、マウントされたパーティションによって隠されたディレクトリにエントリを保存することができ、実際には時々便利です。

関連情報