dfとdumpe2fsでブロックサイズを取得する

dfとdumpe2fsでブロックサイズを取得する

両方のツールが異なるblock測定基準を報告しているようです。

root@ubuntu-xenial:~# df
Filesystem     1K-blocks     Used Available Use% Mounted on
udev              498588        0    498588   0% /dev
tmpfs             101584     3116     98468   4% /run
/dev/sda1       10098468  1438288   8643796  15% /
tmpfs             507916        0    507916   0% /dev/shm
tmpfs               5120        0      5120   0% /run/lock
tmpfs             507916        0    507916   0% /sys/fs/cgroup
vagrant        343946960 55977016 287969944  17% /vagrant
tmpfs             101584        0    101584   0% /run/user/1000

root@ubuntu-xenial:~# dumpe2fs /dev/sda1 | grep -i block | grep -i size
dumpe2fs 1.42.13 (17-May-2015)
Block size:               4096
Flex block group size:    16

さらに、fdiskコマンドは異なるsectorサイズを報告します(sectorおよび用語はblock互いに置き換えて使用できませんか?)

root@ubuntu-xenial:~# fdisk -l
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x38d40272

Device     Boot Start      End  Sectors Size Id Type
/dev/sda1  *     2048 20971486 20969439  10G 83 Linux


Disk /dev/sdb: 10 MiB, 10485760 bytes, 20480 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

私はvagrant機械で重要なことをする

答え1

「dfを介してブロックサイズを取得しない」これは出力にまったく表示されません。

df は、すべてのファイルシステム、その目的、およびマウントポイントを 1 つのリストにリストします。表示される値は、ファイルシステムタイプ、ブロックサイズ待機などの他の個々の属性ではなく、サイズ(合計/使用/使用可能)のみを表します。

デフォルトでは、サイズは1Kブロックで表され、これを1Mブロック、1Gブロック、または変数(人間が読める)に変更できます。

$ df
Filesystem               1K-blocks       Used Available Use% Mounted on
/dev/dm-34                25155584   19811668   5343916  79% /

$ df --block-size=M
Filesystem              1M-blocks     Used Available Use% Mounted on
/dev/dm-34                 24566M   19348M     5219M  79% /

$ df --block-size=G
Filesystem              1G-blocks  Used Available Use% Mounted on
/dev/dm-34                    24G   19G        6G  79% /

$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/dm-34                24G   19G  5.1G  79% /

(微妙な違いがあります-BG-h利用可能な列の表示6G5.1G人が読めるサイズはサイズに応じて調整されますが、チャンクサイズを使用する場合は分数ブロックはありません。)

ファイルシステムの場合、ストレージデバイスのように512バイト単位で動作する必要はありません。現在、多くのストレージには大きなセクタがありますが、互換性の理由からまだ512バイトのふりをしています。

この用語は互いに置き換えて使用sectorできませんかblock

残念ながら、これらの用語は状況に応じて異なる方法で使用されます。

答え2

...さまざまなセクタサイズを報告します(セクタとブロックという用語は互いに置き換えて使用できませんか?)

「ブロック」は様々な意味で使用されてきた。具体的な文脈を見なければなりません。

df拡張すると、「1Kブロック」とは、ファイルシステムが異なるブロックサイズを使用しても、1KB単位を意味します。

「セクタ」は、元のディスクで使用されたブロックサイズを示す。しかし、fdisk「物理的」と「論理的」という2種類のセクタサイズを報告しました。 :-).したがって、ここでも文脈に注意を払う必要があります。 [*]

ファイルシステムのブロックサイズはいくらですか?

あなたが言及した最初のツールは、dfだからdumpe2fsおそらくファイルシステムのブロックサイズを探しているようです。この場合、dumpe2fs「ブロックサイズ」で示される値が必要です。

dumpe2fsext2/3/4 特定のツールですが、これが最も強力な方法だと思います。つまり、異なるファイルシステムを使用する場合は、別のツールを使用し、そのシステムが使用する「ブロックサイズ」を正確に確認する必要があることを意味します。

一般的なファイルシステムブロックサイズにはいくつかの例外があります。最近、ext4はinodeでのインラインデータ保存をサポートできます。つまり、特定のサイズより小さいファイルは、データブロックをまったく割り当てなくてもファイルのinodeに保存できます。バラより新しいExt4インラインデータ機能を使用するには? (inodeに直接データを保存)

代替クエリ方法:statvfs()

あるいは、以下を実行してルートファイルシステムに関する情報をstat -f /表示することもできます。statvfs()ここで議論されました:統計ファイルシステムサイズ

stat -f出力には、「Basic Block Size」と「Block Size」の2つのフィールドが含まれます。 :-).

「デフォルト」ブロックサイズは、空間使用量の粒度です。レポートin - これが適用されますdf。ファイルスペースの割り当てに使用されるのと同じ粒度が必要な場合があります。少なくとも、これはext2/3/4および他の多くの場合に当てはまります。

stat「高速転送」のために異なるブロックサイズが使用されると主張する。 ext2/3/4では、これら2つのブロックサイズは常に同じです。

ext2がBSD UNIXのUFSのような断片化を実装している場合、2つのサイズが異なる場合があります。これはdumpe2fs常に「ブロックサイズ」と同じ「ピースサイズ」値を表示するために反映されます。バラよりf_bsizeはどこで使用できますか? (st_blksizeに似ていますか?)

より一般的なツールとして、stat -f状況によっては誤解を招く可能性があります。

また、広く使用されていません。これによりリスクが高まる可能性があります。 2つの異なる値を報告することは役に立ちません。元の意味は、基本的なLinuxファイルシステムとは関係ありません。 FWIW、このサイトのユーザーは自分の行動を確認する質問を嫌います(上記のリンク)。私は通常、この質問に誰も答える方法がわからないので、怒っていることを意味すると思います。

stat -fGNU coreutilsの機能です。 (FreeBSD 7.2以降はサポートされていませんstat)。

「高速転送のためのブロックサイズ」は意味がありますか?

この説明は、フラグメントを実装するファイルシステムに関連付けることができます。 「遅延割り当て」を実装しない場合は、ファイル長が長くなるにつれて、ブロックサイズの書き込みバッファを使用する方が効率的です。いつものように、パフォーマンスを向上させるために変更を検討している場合は、測定によって改善を確認することを目指してください。

Linuxファイルシステムでは、両方のブロックサイズが同じ値です。この場合、特定の値に最適化する理由がわかりません。

ほとんどの場合、ユーザースペースは「高速転送のために」I / O呼び出しのサイズを変更することを大幅に心配する必要はありません。 IOスケジューラは隣接するI / Oを組み合わせて効率を向上させることができます。ページ・キャッシュを介した非同期IOは、後書きキャッシュと自動先読みにより大きなパフォーマンス上の利点を実現します。ページキャッシュサイズを使用するか、4KBをハードコーディングするだけで大​​きな効果が得られます:-)。

ほとんどのトランスポートでは、ページキャッシュは物理IOの最小サイズを指定します。ほとんどのシステムでは、ページサイズは4KBであり、通常、ファイルIOはページキャッシュを通過します。 (やはり小さなファイルは特殊なケースです。または、むしろファイルサイズが4KBの倍数でない場合、ファイルの最後のページは特殊な場合です。)


[*] たとえば、最新の抽象化レイヤでは、4KB 物理セクタを使用する最新の「高度なフォーマット」ディスクで、「セクタサイズ」フィールドが 512 として報告されることがあります。

答え3

少しの調査の終わりにブロックサイズを得るための適切な方法は次のとおりです。

root@ubuntu-xenial:/proc# blockdev --getbsz /dev/sda
4096

もちろん、これはブロック装置によって異なる場合がある。

とにかく、上記の値は出力と一致するようです。dumpe2fs

関連情報