CentOSシステムには700MBのスペースを占めるログファイルがありますが(使用して見たようにls
)、コマンドを実行するとdf -h
ファイルシステム(ext4)で200MBのスペースしか使用されていません。
この違いの原因は何ですか?
ファイルがdfレポートよりも多くのスペースを占める可能性はありますか?それでは、スペースを使用しないファイルをどのように知ることができますか?
編集:すばやくクリックしましたが、他の投稿は私の質問に答えませんでした。これは問題の単純化された形式です。
# ls -lh /mnt
total 29M
-rw-r--r-- 1 apache apache 678M Jan 6 10:01 Somelog.log
-rw-r--r-- 1 apache apache 1.1M Jan 1 03:20 Somelog.log-20230101.gz
-rw-r--r-- 1 apache apache 1.1M Jan 2 03:23 Somelog.log-20230102.gz
....etc....
# du -sh /mnt
29M /mnt
完全に含まれていないファイルに関する一部の情報は必要ありません。 (ファイルがまだメモリにあるときに使用される用語は何ですか?その場合)
答え1
ls -l
ファイルの見かけのサイズを表示します。つまりファイルから読み取ることができるデータの量。du
ファイルがディスクから占める物理スペースを表示します。
あなたの場合、ログファイルは希薄です。これには、27MiBに近い実際のデータと約650MiBのブロック(すべて0)が含まれています。ファイルの書き込み方法により、以降のブロックはディスク領域を占有しないため、計算されませんdu
。これが起こる方法は次のとおりです。
- 1つのプロセスは、650MiBの実際のデータを含むログファイルに書き込みます。
- ログファイルは循環して消去されます。
- 初期プロセスは、ログファイルが回転する前に書き込みが完了した同じオフセットで同じログファイルに書き込みを続けます。
最後のステップでは、新しいデータを追加する前にファイルを適切なサイズに拡張しますが、データは含まれません。
この問題に対する解決策は、デーモンを再起動するか、このメカニズムをサポートしている場合はログファイルを再度開くように信号を送信し、書き込みプロセスが回転後にログファイルを閉じて再度開くようにすることです。