ext4パーティションサイズ/空き容量の不一致


14

データ用に250GiBのバックアップパーティションを作成しているときに、報告されたパーティションサイズとNautilus、gParted、df、tune2fsなどの空き領域との間に多くの矛盾があることに気付きました。

最初は、GiB / GBの混乱だと思いました。そうではなかった

それから、ext4の予約ブロックになると思いました。そうではなかった

私は完全に困惑しています。以下に画像を示します。手順は次のとおりです。

  • まず、NTFS。524288000セクターx 512バイト/セクター= 268435456000バイト= 268.4 GB = 250 GiB。

ここに画像の説明を入力してください ここに画像の説明を入力してください

Nautilusは「合計容量:250.0 GB」と言います(実際にはGBではなくGiBです)。そのマイナーな誤表示は別として、これまでのところ、とても良い

  • ここで、gpartedでext4としてフォーマットされた同じパーティション:

ここに画像の説明を入力してください

最初、最後、合計のセクターは同じです。同じ250GiBパーティションです。使用済みサイズは4.11GiBです(予約済みのブロックかどうか?)

ここに画像の説明を入力してください

いや。予約済みブロックは12.7 GiB(〜5%。痛い!)のようです。しかし... 合計容量が246.1 GiBになった理由??? 。その違い(並べ替え)は、gpartedによって報告された4.11 GiBと一致します。しかし...予約ブロックからではない場合、それは何ですか?そして、なぜgpartedは12.7GiBの使用済みスペースを報告しなかったのですか?

$ df -h /dev/sda5
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             247G  188M  234G   1% /media/BACKUP

df報告された空き領域のNautilusと一致します。しかし.. 188Mしか使用していませんか?〜12GBにすべきではありませんか?そして、総容量はまだ間違っています。だから私はtune2fsいくつかの手がかりを見つけるために走った。(無関係な出力は省略されます)

$ sudo tune2fs -l /dev/sda5
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   BACKUP
Filesystem UUID:          613d592e-47f5-4206-96a7-210090d340ef
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Filesystem state:         clean
Filesystem OS type:       Linux
Block count:              65536000
Reserved block count:     3276800
Free blocks:              64459851
First block:              0
Block size:               4096

合計65536000ブロック* 4096バイト/ブロック= 268435456000バイト= 268.4 GB = 250 GiB。gpartedと一致します。

3276800予約済みブロック= 13421772800バイト= 13.4 GB = 12.5 GiB。(これもまた)ノーチラスに一致します。

64459851の空きブロック= 264027549696バイト= 264.0 GB = 245.9 GiB。どうして?250-12.5 = 237.5(または250-(12.5 + 4.11)=〜233)のいずれかではありませんか?

予約済みブロックの削除:

$ sudo tune2fs -m 0 /dev/sda5
tune2fs 1.41.12 (17-May-2010)
Setting reserved blocks percentage to 0% (0 blocks)

$ sudo tune2fs -l /dev/sda5
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   BACKUP
Filesystem UUID:          613d592e-47f5-4206-96a7-210090d340ef
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Filesystem state:         clean
Filesystem OS type:       Linux
Block count:              65536000
Reserved block count:     0
Free blocks:              64459851
Block size:               4096

予想どおり、同じブロック数、0予約ブロックがありますが、... 同じフリーブロックですか?私はちょうど12.5 GiBを解放しませんでしたか?

$ df -h /dev/sda5
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             247G  188M  246G   1% /media/BACKUP

ここに画像の説明を入力してください

私がしたように見えます。利用可能なスペースは233から245.9 GiBに増加しました。gpartedはまったく気にせず、まったく同じ情報を表示しました!(同一のスクリーンショットを投稿しても意味がありません)

なんて大きな混乱だ!

できる限り文書化しようとしました...では、ここで何が起きているのか、手がかりを教えていただけますか?

  • NTFS-> ext4フォーマットで失われた不思議な4.11 GiBとは何ですか?
  • gparted、Nautilus、tune2fs、dfの間に多くの不一致があるのはなぜですか?
  • 私の数学の何が問題になっていますか?(太字の質問はこの投稿に散在しています)

どんな助けも大歓迎です。何が起こっているのかわかりませんが、/パーティション以外のすべてについてNTFSを支持してext4をあきらめることを真剣に考えています。

ありがとう!




@Uri Herrera:私の質問を実際に読んだのですか、それとも少なくとも最初の数行ですか?これはGiB / GBの問題ではありません。パーティションは268.4ギガバイト= 250.0GiBある、ない 246.1
MestreLion

1
あなたが見てとることができ、別の答え:askubuntu.com/questions/5335/...を
enzotib

回答:


13

ここでいくつかのことが行われています。gpartedは、実際の使用済み/空き領域を報告します。カーネルは、予約済みスペースによって使用可能なカウントを減らします。予約済みスペースを削除した後、予約済みブロックはすでに空いているため、空きカウントは変更されませんでした。root以外のユーザーがディスクをいっぱいにしてトラブルを引き起こすのを防ぐために、そのスペースに侵入することは許可されていません。バグのため、gnome番号は少し不安定です。カーネルが報告する(およびdfが示す)使用済みスペースを報告する代わりに、合計から空きスペースを減算することによってそれを計算します。これにより、予約済みスペースが使用済みとして表示されます。

不足している4GBが実際に使用されるのは、ext4のfsオーバーヘッドです。NTFSは最初にMFTに少量のスペースを割り当て、必要に応じてそれを増やします。ただし、extシリーズのファイルシステムは、フォーマット時にinodeテーブル(MFTとほぼ同等)にスペースを割り当てますが、成長することはできません。報告された合計スペースから欠落しているスペースは、iノードテーブルです。使用済みスペースの残りのビットは、ジャーナル(通常は128 mb)からのもので、inodeのサイズを変更します。


いくつかの謎を解いてくれてありがとう、+ 1!しかし、〜4GBがファイルシステムのオーバーヘッドである場合、なぜ一部(3.9GB)が合計スペースから差し引かれ、188MBは実際に使用されていると表示されますか?オーバーヘッドはどちら(または両方)ですか?そして、なぜ異なる扱いをしたのですか?また、dfsudoを使用しても、Nautilusのような合計容量(247GB)と使用済みスペース(188MB)が表示されます。バグなら、ノームだけではありません。
メストレリオン

188MBがオーバーヘッドだと思いました(NTFSの72MBと比較して)。しかし、NTFSのオーバーヘッドが時間の経過とともに大きくなる場合、Nautilusは後で総容量の縮小を報告するということですか?
メストレリオン

修正:dfは、だれが実行しても、常に使用可能なスペースを表示します。空きスペース(==使用可能スペース+予約済みスペース)を表示するには、を使用しますstat -f /media/BACKUP
マリウスゲドミナス

明確にするために回答を編集しました。そして、NTFSは、MFTの成長に合わせて合計を縮小するのではなく、使用済みの領域を報告するだけだと考えています。@Marius、これも正しくありません。statfs()、したがってdfとstat -fの両方は、予約済みブロックをカウントしない使用可能なスペースを示します。割り当ても調整し、呼び出し元のユーザーに基づいて応答を変更したことを誓うこともできましたが、それについては正しいです。割り当てをカウントせず、ユーザーが何を呼び出したかを気にしません。
-psusi

@psusi:私は〜3.9GiBのinodeテーブルと〜188MBのジャーナルと何かを持っていますか?そして、ノーチラスは合計サイズからinodeテーブルを減算しますが、ジャーナルを使用済みスペースとしてレポートしますか?そして、gpartedはそれらを単一の4.11GiBの使用済みスペースとして報告しますか?あれは正しいですか?もしそうなら、Nautilusが両方のオーバーヘッドを同じ方法で処理することを望みました。両方が合計から差し引かれるか、両方が「使用済みスペース」としてカウントされます(できれば)。
メストレリオン

7

まず、予約ブロックファイルシステムの内部管理に使用されるブロックではありません

予約されたブロックはroot、そのパーティション上のファイルを使用するサービスが、すべてのスペースを埋めている管理者以外のユーザーによってスペースから除外されないようにするために、単に予約されています。

予約済みのブロック(-m 0)がなくても、ファイルシステムの内部管理に使用されるスペースの一部が常に存在しますが、その程度の知識はありません。

また、Gpartedはとして実行されるrootため、予約済みブロックは空きとして認識されます。ユーザーとして実行されたNautilusは、それらを非フリーと見なします。

わかりました、@ psusiの答えは非常に明確で、追加するものはありません。


ハミング、非常に有益な、+ 1。少なくともこれで、私が発見したいくつかの問題が解決されます。「使用済みブロック」ではなく、非ルートの「制限キャップ」として予約済みブロックを見ると、gparted、df、tune2fsの読み取り値が一致します(そして意味があります)。しかし、いくつかの疑問が残っています。特に、4GBの使用済みスペース/総容量です。
メストレリオン

1
また、ルート用に5%のスペースを確保すると、extN割り当てアルゴリズムにある程度のスペースが与えられるため、どこかで読んだことがあります(古い「Linuxパーティションを毎月デフラグする必要がないのはなぜですか?」)フラグメンテーション。
マリウスゲドミナス

1

gpartedを使用してパーティションサイズを数メガバイト縮小し、元のサイズに再度拡大してみてください。これにより、他のアプリケーションがサイズを正しく読み取る可能性があります。私は最近、このようにして50Gbエラーを修正しました!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.