ファイルシステムにファイルが保存される方法を読みながら、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
のみを表示します。stat
512バイトブロックは、POSIXで定義された歴史的なものです。たとえば、次を比較します。
$ ls -s smallfile.txt
4 smallfile.txt
$ env POSIXLY_CORRECT=1 ls -s smallfile.txt
8 smallfile.txt
GNUはls
デフォルトでブロックを1kBブロックとしてマークしますが、POSIX準拠が強制されると512バイトのブロックを表示します。