両方のツールが異なる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
利用可能な列の表示6G
と5.1G
人が読めるサイズはサイズに応じて調整されますが、チャンクサイズを使用する場合は分数ブロックはありません。)
ファイルシステムの場合、ストレージデバイスのように512バイト単位で動作する必要はありません。現在、多くのストレージには大きなセクタがありますが、互換性の理由からまだ512バイトのふりをしています。
この用語は互いに置き換えて使用
sector
できませんかblock
?
残念ながら、これらの用語は状況に応じて異なる方法で使用されます。
答え2
...さまざまなセクタサイズを報告します(セクタとブロックという用語は互いに置き換えて使用できませんか?)
「ブロック」は様々な意味で使用されてきた。具体的な文脈を見なければなりません。
df
拡張すると、「1Kブロック」とは、ファイルシステムが異なるブロックサイズを使用しても、1KB単位を意味します。
「セクタ」は、元のディスクで使用されたブロックサイズを示す。しかし、fdisk
「物理的」と「論理的」という2種類のセクタサイズを報告しました。 :-).したがって、ここでも文脈に注意を払う必要があります。 [*]
ファイルシステムのブロックサイズはいくらですか?
あなたが言及した最初のツールは、df
だからdumpe2fs
おそらくファイルシステムのブロックサイズを探しているようです。この場合、dumpe2fs
「ブロックサイズ」で示される値が必要です。
dumpe2fs
ext2/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 -f
GNU 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