私のディレクトリに次のものがある場合:
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です。これは、出力が次の間stat
でls
一貫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つではなく2つの
empty_dir
ブロックone_char
(サイズ4096B)であるのはなぜですか? - ブロックの割り当てサイズが
empty_file
ゼロでないのはなぜですか? several_blocks
割り当てられたサイズ(および一般的に大きいファイル)が実際のサイズより1ブロック以上大きいのはなぜですか?確かにサイズ((264 * 512) - 129760 = 5408 > 4096)?
私は追加のブロックがinode
次のように含まれているブロックだと思います。質問者(ただし答えを受けませんでした)。同様に、この質問者も同じです。観察されたサイズは2倍になりましたが、問題の説明が間違っているため、問題の他の部分への回答を受け取ります。しかし、回答別の質問には、追加のブロックがあってはならないという提案がありました(これは私の直感です)。
- 私たちのシステムが誤って設定されていますか?
- 埋め込みブロックが計算さ
inode
れたとします。複数のファイルで使用されたときに複数回計算されたブロックをdu
補償しますか?複数のブロックが同じブロックにある必要があります(ブロックには16(4096 / 256 = 16)を含めることができます)。inode
inodes
inodes
付録
@WumpusQ.Wumbleyはそうかもしれないと思います。拡張属性事実が明らかになりました!
getfattr
返品user.com.dropbox.attributes
。テストディレクトリは、私のディレクトリにシンボリックリンクされたディレクトリの奥にあるサブディレクトリであることがわかりました。ドロップボックスフォルダ。下記の許可された回答をご覧ください。
†GNU / LinuxではGNU Core Utilities 8.30を使用し、NVME SSDのext4ではカーネル4.19.1(Manjaro)を使用します。
ベストアンサー1
@WumpusQ.Wumbleyはコメントで理由を指摘しました。拡張属性。
完全性のために、答えは以下の通りです。
拡張属性、この場合に適用されますドロップボックス(getfattr
return 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なので、期待どおりです。つまり、追加ブロックは使用されません。
- なぜなら拡張属性。
- なぜなら拡張属性。
- なぜなら拡張属性。
- いいえ、でも注意してください拡張属性アプリケーションによって追加されました。
- 間違った仮定。