duとlsのディスク使用量の差
お久しぶりです。
ネットアシスト技術部のyasakumaです。宜しくお願いいたします。
早速ではありますが・・
概要
duと実際のファイル容量では差分が生じる可能性があります。
duはブロックサイズをカウントしているために起こります。
Windowsでいうところの、『ファイルサイズ』と『ディスク上のファイルサイズ』の差、
といったところでしょうか。
これが正体です
[root@yasakuma-01 ~]# tune2fs -l /dev/vda3 | grep “Block size”
Block size: 4096
1ブロックはストレージ上で記録される最小単位のため、
上記場合、4096byteより小さいサイズのファイルであっても、実際は4096byte使用しています。
そして、duはそちらのサイズを表示してくれているようです。
検証
テスト用ディレクトリを作成
[root@yasakuma-01 ~]# mkdir /test
[root@yasakuma-01 ~]#
[root@yasakuma-01 ~]# ls -l /test/
合計 0
何もないのにduでみると4.0KBと表示されていますが、
これはディレクトリ自体のサイズなので気にせず進めます。
[root@yasakuma-01 ~]# du -sh /test
4.0K /test
1byteのファイルを作成
[root@yasakuma-01 ~]# dd if=/dev/zero of=/test/test.txt bs=1 count=1
1+0 レコード入力
1+0 レコード出力
1 バイト (1 B) コピーされました、 0.000265094 秒、 3.8 kB/秒
ファイルサイズは1byteですが・・
[root@yasakuma-01 ~]# ls -l /test
合計 4
-rw-r–r– 1 root root 1 4月 17 01:17 test.txt
[root@yasakuma-01 ~]# du -sh /test
8.0K /test
duでみると4KBとなっています・・!
[root@yasakuma-01 ~]# du -sh /test/*
4.0K /test/test.txt
[root@yasakuma-01 ~]# du -b /test
4097 /test
コピーで100,000ファイルを用意し、差分を確認する(数分かかりました)
[root@yasakuma-01 ~]# for I in {1..99999};do cp /test/test.txt /test/test_${I}.txt;done
[root@yasakuma-01 ~]#
[root@yasakuma-01 ~]# ls /test | wc -l
100000
[root@yasakuma-01 ~]# ls -l /test | head -3
合計 400000
-rw-r–r– 1 root root 1 4月 17 01:56 test.txt
-rw-r–r– 1 root root 1 4月 17 01:57 test_1.txt
[root@yasakuma-01 ~]# du -sh /test
394M /test
ファイルサイズ合計は、1(byte)×100000なので
[root@yasakuma-01 ~]# expr 100000 / 1024
“KB”
97 KB
・約400MBの差!結構な差分かと思います。
実際の調査時にも、この差分が「?」となった時もありました。
今後も困惑することがあるかもしれませんので、留意していきたいと思います。
おわりに
全然関係ありませんが、もうすっかり春ですね。
歳をとったせいか、春自体が好きになってきた感があります。(花粉を除く)
出会いと別れ。ちょっと切ない素敵な季節ですね。