質問

質問

私のディレクトリに次のものがある場合:

  • empty_dir:ディレクトリが空です。
  • empty_file:ファイルが空です。
  • one_char: 1 文字で構成されるファイルです。
  • several_blocks:複数のブロックで構成されたファイルです(ただし、「大きすぎるか」または希薄ではありません)。

これにより、ls次の†が表示されます。

$ ls -Gghs
total 152K
8,0K drwxr-xr-x 2 4,0K dec 21 23:34 empty_dir
4,0K -rw-r--r-- 1    0 dec 21 23:21 empty_file
8,0K -rw-r--r-- 1    1 dec 21 23:22 one_char
132K -rw-r--r-- 1 127K dec 22 00:14 several_blocks

第二に、stat以下を表示します。

$ stat empty_dir/
  File: empty_dir/
  Size: 4096            Blocks: 16         IO Block: 4096   directory
  ...

$ stat empty_file 
  File: empty_file
  Size: 0               Blocks: 8          IO Block: 4096   regular empty file
  ...

$ stat one_char 
  File: one_char
  Size: 1               Blocks: 16         IO Block: 4096   regular file
  ...

$ stat several_blocks 
  File: several_blocks
  Size: 129760          Blocks: 264        IO Block: 4096   regular file
  ...

第三に、du以下が表示されます。

$ du -h empty_dir/
8,0K    empty_dir/

$ du -h empty_file 
4,0K    empty_file

$ du -h one_char 
8,0K    one_char

$ du -h several_blocks 
132K    several_blocks

ついに:

$ tune2fs /dev/nvme0n1p2 -l
...
Block size:               4096
...
Inode size:               256
...

報告されたブロックサイズstatは512Bです。これは、出力が次の間statls一貫duしていることを意味します。

  • empty_dir:16 * 512 / 1024 = 4096 + 4096 = 8KiB。
  • empty_file:8 * 512 / 1024 = 0 + 4096 = 4KiB。
  • one_char:16 * 512 / 1024 = 4096 + 4096 = 8KiB。
  • several_blocks: 264*512/1024=129760+5408=129760+1312+4096=131072+4096=32*4096+4096=132KiB.

質問

  1. 割り当てられたサイズが1つではなく2つのempty_dirブロックone_char(サイズ4096B)であるのはなぜですか?
  2. ブロックの割り当てサイズがempty_fileゼロでないのはなぜですか?
  3. several_blocks割り当てられたサイズ(および一般的に大きいファイル)が実際のサイズより1ブロック以上大きいのはなぜですか?確かにサイズ((264 * 512) - 129760 = 5408 > 4096)?

私は追加のブロックがinode次のように含まれているブロックだと思います。質問者(ただし答えを受けませんでした)。同様に、この質問者も同じです。観察されたサイズは2倍になりましたが、問題の説明が間違っているため、問題の他の部分への回答を受け取ります。しかし、回答別の質問には、追加のブロックがあってはならないという提案がありました(これは私の直感です)。

  1. 私たちのシステムが誤って設定されていますか?
  2. 埋め込みブロックが計算さinodeれたとします。複数のファイルで使用されたときに複数回計算されたブロックをdu補償しますか?複数のブロックが同じブロックにある必要があります(ブロックには16(4096 / 256 = 16)を含めることができます)。inodeinodesinodes

付録

@WumpusQ.Wumbleyはそうかもしれないと思います。拡張属性事実が明らかになりました!

getfattr返品user.com.dropbox.attributes。テストディレクトリは、私のディレクトリにシンボリックリンクされたディレクトリの奥にあるサブディレクトリであることがわかりました。ドロップボックスフォルダ。下記の許可された回答をご覧ください。


GNU / LinuxではGNU Core Utilities 8.30を使用し、NVME SSDのext4ではカーネル4.19.1(Manjaro)を使用します。

ベストアンサー1

@WumpusQ.Wumbleyはコメントで理由を指摘しました。拡張属性

完全性のために、答えは以下の通りです。

拡張属性、この場合に適用されますドロップボックスgetfattrreturn user.com.dropbox.attributes)、保存に追加のブロックを使用します。これらのうち何も拡張属性 ls(およびその他のコマンド)は、次を返します。

$ ls -Gghs
total 136K
4,0K drwxr-xr-x 2 4,0K dec 22 20:11 empty_dir
   0 -rw-r--r-- 1    0 dec 22 20:11 empty_file
4,0K -rw-r--r-- 1    1 dec 22 20:12 one_char
128K -rw-r--r-- 1 127K dec 22 20:13 several_blocks

予想通り。

また、stat唯一の興味深いseveral_blocksリターンケースの場合:

$ stat several_blocks 
  File: several_blocks
  Size: 129760          Blocks: 256        IO Block: 4096   regular file
  ...

これは256 * 512 - 129760 = 1312 < 4096なので、期待どおりです。つまり、追加ブロックは使用されません。

  1. なぜなら拡張属性
  2. なぜなら拡張属性
  3. なぜなら拡張属性
  4. いいえ、でも注意してください拡張属性アプリケーションによって追加されました。
  5. 間違った仮定。

おすすめ記事