この機能は20年前にさかのぼりますが、それでも知りたいです
ext2/3/4ファイルシステムの予約ブロックの目的は何ですか?
tune2fs
のmanページに説明があります:
特権プロセスで使用するためにいくつかのファイルシステムブロックを予約するのは、ファイルシステムの断片化を回避し、非特権プロセスによるファイルシステムへの書き込みが阻止された後、syslogd(8)などのシステムデーモンが正しく機能し続けることができるようにするためです。
また、フェイルセーフとして機能します。なんらかの理由で通常のユーザーとそのプログラムがディスクを100%までいっぱいにすると、ファイルを削除する前にログインしたり、ファイルを同期したりすることができなくなる可能性もあります。一部のブロックをroot
に予約することにより、システムは常に状況を修正できるようにします。
実際には、5%は古いデフォルトであり、ハードドライブが十分に大きい場合は多すぎる可能性があります。この値は、前述のtune2fs
ツールを使用して変更できますが、最初にそのmanページを必ずお読みください。
Rootが使用するためだけに少数のブロックを予約する目的は、rootにログインする機会を与え、ディスクが完全にいっぱいになった場合に備えてスペースを確保するための少しの余裕を与えることです。これがないと、ファイルの書き込み中に予期しないエラー(utmp
とwtmp
、/dev/pts
内のファイルなど)が発生するとログインプロセスが失敗するため、rootがログインできない可能性があります。 )。ログインプロセスが堅牢で、ディスクがいっぱいでも機能することを期待できますが、ログインプロセス中のディスクがいっぱいになったエラーは、通常、十分にテストされていないコードパスです。
もちろん、今日では、ブロックのわずかな割合でも、この目的に必要なスペースよりもはるかに多くのスペースを表しています。
予約%の目的の一部は、ファイル間に「空のポケット」が存在できるようにして、断片化を防ぐことです。後でファイルを変更しても、最初に書き込まれたときにファイルの末尾に何かが配置されていたため、必ずしもファイルがフラグメントに分割されるわけではありません。
何かがうまくいかず、ドライブがいっぱいになったために、rootがログインしてクリーンアップできる必要がある緊急リカバリの側面もあります(ユーザーまたは誤って構成されたプログラム)。
適切な予約率は、パーティションの使用例に大きく依存します。パーティションがOSディスクの場合、非常に大きなパーティションであっても、rootの5〜10%の予約は完全に妥当と思われます。ユーザーデータパーティションの場合、断片化の防止に役立つ場合を除いて、多くの場合、予約は必要ありません。