extファイルシステムがデバイス全体を満たさないのはなぜですか?


8

500G HDDで作成しようとしているext {2,3,4}ファイルシステムのいずれかが、使用可能なすべてのスペース(466G)を使用しないことに気づきました。reiser3、xfs、jfs、btrfs、さらにはvfatも試しました。それらのすべては、サイズ466Gのfsを作成します(df -hで示されています)。ただし、ext *は459Gのfsを作成します。予約ブロックを無効にすると、ユーザーが使用できるスペースが増えますが、fsのサイズは459Gのままです。

1Tb HDDの場合も同じです:932G reiserfs、917G ext4。

では、この1.5%の違いは何でしょうか。なぜそれが起こり、extがボリューム全体を埋める方法はありますか?

UPD:すべてのテストは同じマシン、同じHDDなどで行われます。500Gのマーケティングと466Gの違いは問題ではありません。問題は、FSによって異なることです。

dfについて-FSの合計サイズ、使用済みサイズ、空き容量が表示されます。この場合、私は:

reiserfsの場合:

/ dev / sda1 466G 33M 466G 1%/ mnt

ext4の場合:

/ dev / sda1 459G 198M 435G 1%/ mnt

ルートブロックの予約をオフにすると、435Gは459Gに変わります-fsのフルサイズ(マイナス198M)。しかしfs自体は、ext4の場合は459G、リイザーの場合は466Gです。

UPD2:ddを介して実際のデータでボリュームを埋める:

reiserfs:

fs:〜#dd if = / dev / zero of = / mnt / 1
dd:записьв«/ mnt / 1»:Наустройствекончилосьместо
975702649 + 0записейсчитано
975702648 + 0записейнаписано
 скопировано499559755776байт(500 GB)、8705,61 c、57,4 MB / c

ブロック予約をオフにしたext2(mke2fs -m 0):

fs:〜#dd if = / dev / zero of = / mnt / 1
dd:записьв«/ mnt / 1»:Наустройствекончилосьместо
960356153 + 0записейсчитано
960356152 + 0записейнаписано
 скопировано491702349824байта(492 GB)、8870,01 c、55,4 MB / c

ロシア語で申し訳ありませんが、デフォルトのロケールで実行したため、繰り返しが長すぎます。それは問題ではありません、dd出力は明白です。

したがって、mke2fsは他のmkfsのファイルシステムよりも実際に小さいファイルシステムを作成することがわかります。


2
すべてのFSに一定量のオーバーヘッドがあります...ディスク上のすべての使用可能な物理スペースにアクセスできるようになるのはわかりません。
prodigitalson 2010

広告の露骨な表現を少なくするために、表示名を変更し、ブログのように見えるものをプロフィールのウェブサイトフィールドに配置することをお勧めします。
Hello71、

1
Hello71、アドバイスありがとうございます。ウェブサイトは本当に重要ではありません、それはopenidのためだけです。
Ineu

今後の注意として、プログラムを英語ですぐに出力したい場合は、LANG=C fooまたはLC_ALL=C foo
Alan Pearce

アラン、そう、ありがとう。LANG =またはLANG = POSIXの場合もあります。しかし、私が言ったように再実行されているので、このプロセスは、それだけの行のカップルのための異なるロケールで多くの時間を要しいずれの場合も不合理:)で、それは:( ext2のためにFSの大きさに問題があることを証明
Ineu

回答:


19

これに該当する理由は2つあります。

まず、なんらかの理由で、または別のOSライターは依然としてベース2システムに関して空き容量を報告し、ハードドライブメーカーはベース10システムに関して空き容量を報告します。たとえば、OSライターは1024バイト(2 ^ 10バイト)をキロバイトと呼び、ハードドライブの製造元は1000バイトをキロバイトと呼びます。この違いはキロバイトではかなり小さいですが、テラバイトに達すると、それはかなり重要になります。OSライターは1099511627776バイト(2 ^ 40バイト)をテラバイトと呼び、ハードドライブの製造元は1000000000000バイトをテラバイトと呼びます。

サイズについてこれらの2つの異なる方法で話すことは、多くの混乱を招くことがよくあります。

バイナリサイズ用にサポートされているISOプレフィックスがあります。新しいプレフィックスを考慮して設計されたユーザーインターフェイスは、ベース2プレフィックスシステムでサイズを表示するときに、TiB、GiB(またはより一般的にはXiB)を表示します。

次に、df -hは、使用可能なスペースの量を報告します。すべてのファイルシステムは、あなたのために物事を追跡するためにハウスキーピング情報を書かなければなりません。この情報は、ドライブのスペースの一部を占有します。一般的にはそれほどではありませんが、一部はそうです。それはまた、あなたが見ていると思われる損失の一部を説明しています。

あなたの投稿を編集して、私の回答のどれも実際にあなたの質問に答えていないことを明確にした後、私はあなたの質問に答えるのを試みます...

ファイルシステムが異なれば、ハウスキーピング情報に使用するスペースの量も異なり、そのスペースの使用状況をさまざまな方法で報告します。

たとえば、ext2はディスクをシリンダーグループに分割します。次に、各シリンダグループにiノードと空きスペースマップ用のスペースを事前に割り当てます。ext3は基本的にext2 +ジャーナリングであるため、同じことを行います。そして、ext4もext3のかなり単純な(そしてほぼ後方互換性のある)変更なので、まったく同じことを行います。また、このメタデータのオーバーヘッドはファイルシステムの作成時またはサイズ変更時に修正されるため、「使用済み」スペースとして報告されません。これは、シリンダグループのメタデータがディスク上の固定された場所にあり、使用されていると暗黙に示されているため、マークが付けられていないか、空きスペースマップで考慮されていないためと考えられます。

ただし、reiserfsはいかなる種類のメタデータも事前に割り当てません。データブロックの場合と同様に、すべてのiノードがオンザフライで割り当てられるため、ファイルシステムの作成時に修正されるiノードの制限はありません。せいぜい、ルートディレクトリとある種の空き領域マップを記述するいくつかの構造が必要です。したがって、何もない場合は、使用するスペースがはるかに少なくなります。

しかし、これは、reiserfsがメタデータ(inodeなど)とファイルの実際のデータスペースを割り当てるため、ファイルを追加するときにreiserfsがより多くのスペースを使用することを意味します。

jfsとbtrfsがメタデータ領域の使用状況をどのように追跡するのか正確にはわかりません。しかし、彼らはreiserfsのように追跡しているのではないかと思います。特にvfatには、inodeの概念がまったくありません。その空き領域マップ(ファイルシステムの作成時に固定されるサイズ(悪名高いFATテーブル))は、iノードが保持するデータの多くを格納し、ディレクトリエントリ(動的に割り当てられる)は残りを格納します。


2
そのためのISO標準があります:en.wikipedia.org/wiki/Binary_prefix
Bobby

@Bobby-ええ、それがディスプレイに表示されるようになりました。それを私の答えに追加します。ありがとう!
10

8

Omnifariousが言及している問題と同様に、ext2 / 3/4では、特定の量のスペースがルート用に予約されています。この予約されたスペースはdfの出力には表示されません。

たとえば、デフォルトのオプションで小さなファイルシステム(〜100mb)を作成し、3または4ではなくext2を使用して、ジャーナルで使用されるスペースを無視します。

swann:/tmp# dd if=/dev/zero of=./loop.fs bs=10240 count=10240
swann:/tmp# mkfs.ext2 loop.fs
swann:/tmp# mkdir loop
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     92480   2% /tmp/loop

予約ブロックオプションを調整する(tune2fs-mオプションは予約ブロックをパーセンテージとして-r設定し、オプションは予約ブロックをブロックのストレート数として設定します):

swann:/tmp# umount loop
swann:/tmp# tune2fs -m 25 loop.fs
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     72000   3% /tmp/loop

swann:/tmp# umount loop
swann:/tmp# tune2fs -m 0 loop.fs
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     97600   2% /tmp/loop

上記の例でわかるように、rootとしてログインした場合でもdf、「利用可能」数に予約スペースが表示されません。rootとしてログインしているか、それより権限の少ないユーザーであるかにかかわらず、予約済みスペースは「使用済み」カウントにも表示されません。これらの2つの事実を期待していない場合、ファイルシステムがいっぱいに近いときに混乱が生じることがあります。

またtune2fs、その名前にもかかわらず、ext3およびext4ファイルシステムだけでなく、ext2ファイルシステムにも関連があることに注意してください。


答えてくれてありがとう。いいえ、それは予約済みブロックに関するものではありません。質問を更新しました。
Ineu

0

ファイルシステムの違いについては、ファイルシステムが異なればブロックも異なって編成され、ブロックを識別して追跡するために多かれ少なかれデータが必要になります。同じサイズのブロックが多かれ少なかれ、「失われた」スペースが多かれ少なかれあるかのように、ブロックサイズにも違いがあります。また、ファイルシステムはブロックをグループ化してファイルの断片化を回避し、各ブロッククラスターはある程度のサイズの識別子を持っているため、多かれ少なかれブロッククラスターはディスク上の異なる物理スペースを使用します。したがって、違いは、ファイルシステムが物理スペースを編成する方法にあります。

ここにext2の説明があります。おそらくreiserfsに似たものを見つけることができますが、私はそれを使用したことがないので、ありません。


2
Reiserfsとbtrfsは、ほとんどすべての簿記情報が動的に割り当てられるという点で珍しいものです。スーパーブロックのコピーと空きスペースのビットマップのみがファイルシステムのセットアップ時に割り当てられます。もちろん、これは、データに使用できる実際の容量が、これらのファイルシステムでは確定的ではないことを意味します。
10

@Omnifarious +1-したがって、reiserfsとbtrfsをよく理解している場合、報告される使用可能なスペースは最初は大きくなりますが、データだけでなくデータと簿記情報の両方で使用されますよね?
laurent

@ laurent-rpnet-はい、そうです。btrfsの場合はさらに興味深いです。btrfsは個々のファイルベースでRAIDを実装できるため、データに使用されるブロックごとに使用される追加のスペースがあると想定できないため、利用可能な空きスペースの報告を特定するのはさらに困難です。さらに、非常に安価なCOWベースのコピーが可能であるため、既存のファイルの途中にブロックを書き込むと、スペースが割り当てられる可能性があります。
全面的2010

XFS、JFS、VFATについてはどうですか?FAT32などのプリミティブfsがext4よりも動的であるとは信じがたいことです。
Ineu

FAT32には、組織用に予約されたブロックもあります。ここで動的の意味は何ですか?dynamyc割り当ての場合、FAT32にはextのような動的割り当てがなく、データに使用可能なディスク上のすべてのブロックも表示されません。また、ext4ファイルシステムには権限システムがないなどの制限があり、ext4にはPOSIX権限とACLがあり、最大ファイルサイズはFAT32では4 GB、ext3では2 TBです(ext4については不明ですが、少なくとも同じである必要があります)。
ローレント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.