使用ログファイルのサイズを減らす方法を見つけようとしています。
だから、ファイルに対して次のことを試しました。
$ yes > yeslog
したがって、データは継続的に記録されますyeslog
。
ls -alh yeslog
寸法を使用して確認した後、du -h yeslog
同じ寸法が報告されました。
truncate -s 0K yeslog
次にこれを行い、寸法を再利用して確認します。しかし、今はサイズが小さくなり、以前と同じサイズを見せています。ls
du
du
ls
なぜこれが起こるのですか?トリミングは実際に機能しますか?
答え1
これはバリエーションですLinuxはファイルオフセットをどのように管理しますか?。ls
どちらも正確ですが、du
異なるものを測定します。
これを実行すると、truncate
ファイルはゼロバイトに縮小されます。ただし、yes
前の書き込みのオフセットから直ちに書き戻されます。失われたすべてのデータはゼロに置き換えられ、完全に欠落しているブロックはまれに置き換えられます。したがって、ファイルの見かけ上のサイズは増加し続けますが、ディスクが消費する物理ディスク容量は実行されるたびにゼロに戻り、truncate
書き込み時に再び増加しても希少ブロックは計算されません。yes
ls
du
デフォルトでは、消費されたディスク容量の代わりにファイルの見かけのサイズが表示されるため、ls
最初のブロック全体が失われた後よりも大きい値が表示されます。フラグを使用して割り当てられたサイズを表示できます。du
truncate
ls
-s
シェルをリクエストすると追加yeslog
()に変更すると、以前と同じオフセットから続くのではなく、切り捨てられた後にファイルの先頭からyes >> yeslog
ファイルが開いて書き込まれますO_APPEND
。yes