統計、ブロック、セクタサイズ - ext4

統計、ブロック、セクタサイズ - ext4

ファイルシステムにファイルが保存される方法を読みながら、217バイトサイズのテストファイルを作成しました。ファイルの出力を確認すると、statファイルが8つのブロックを占めることがわかります。最初は、ブロックサイズが4096バイトで値を置き換えるBlocks:必要がある場合、1サイズが217バイトのファイルで8ブロックを使用することは不可能だと思いました8。だから私は読んでこれこれそしてこれそして、そのBlocks:値はファイルが占める512バイトのスペースであることがわかります。そして最小ブロックサイズは4096バイトなので、2バイトサイズのファイルでも8ブロックを占めます(4096/512 = 8なので)。

[root@server ~]# stat smallfile.txt
  File: `smallfile.txt'
  Size: 217             Blocks: 8          IO Block: 4096   regular file

私が読んでここそれ:

「各セクタには、ユーザーがアクセスできる固定量のデータが格納されます。通常、ハードディスクドライブ(HDD)の場合は512バイト、CD-ROM、DVD-ROMの場合は2048バイトです。と呼ばれる4096バイト(4KiB)セクタを使用します。

私がアクセスできるすべてのシステムは、セクターサイズが512バイトのHDDを使用します。それでは、私はst_blocksそれがハードドライブのセクタサイズと一致すると信じていますか(私が提供した2番目と3番目のハイパーリンクで説明されています)?質問は次のとおりです。

  • 後でセクタサイズが4096バイトのHDDに同じ217バイトサイズのファイルがある場合、statファイルのコマンドは(4096/4096 = 1なので)Blocks: 1代わりに表示されますか?Blocks: 8
  • それとも、st_blocksセクタサイズに関係なく、常に512バイトを単一の最小単位として使用しますか?
  • それともVFSに関連していますか?

答え1

あなたが提供したリンクには、次のように明確に記載されています。

st_blocksフィールドは、ファイルに割り当てられたブロック数を512バイト単位で表します。

したがって、使用される基本デバイスに関係なく、常に512バイトのブロックで測定されます。このコマンドは、システムコールが返す内容statのみを表示します。stat512バイトブロックは、POSIXで定義された歴史的なものです。たとえば、次を比較します。

$ ls -s smallfile.txt
4 smallfile.txt
$ env POSIXLY_CORRECT=1 ls -s smallfile.txt
8 smallfile.txt

GNUはlsデフォルトでブロックを1kBブロックとしてマークしますが、POSIX準拠が強制されると512バイトのブロックを表示します。

関連情報