web-dev-qa-db-ja.com

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

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

最初はGiB/GBの混乱だと思いました。 そうではありませんでした

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

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

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

enter image description hereenter image description here

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

  • 現在、sameパーティションは、gpartedでext4としてフォーマットされています:

enter image description here

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

enter image description here

いや。予約済みブロックは12.7 GiB(〜5%。ouch!)のようです。しかし... 合計容量が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

enter image description here

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

なんて大きな混乱!

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

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

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

ありがとう!

14
MestreLion

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

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

13
psusi

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

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

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

また、Gpartedrootとして実行されるため、予約済みブロックは空きとして認識されます。 Nautilus、ユーザーとして実行され、非フリーとして表示されます。

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

7
enzotib

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

1
jim birch