- PR -

コマンド「ls -l」でのディレクトリサイズ

1
投稿者投稿内容
try
常連さん
会議室デビュー日: 2004/10/22
投稿数: 38
お住まい・勤務地: 神奈川/東京
投稿日時: 2006-10-25 17:15
コマンド「ls -l」でのディレクトリサイズについて教えてください。
# OSはRed Hat Linux Advanced Server release 2.1ASになります


ほぼ同じ環境のサーバがあり、「hoge」と言うディレクトリのサイズが違いました。
「hoge」ディレクトリ配下には「lost+found」というディレクトリがありますが、「hoge」や「lost+found」には「ls -la」で見ても配下にファイルはありませんでした。


# ls -l /tmp/
drwxrwxrwx 3 root root 4096 Oct 25 15:45 hoge

# ls -l /tmp/
drwxrwxrwx 3 root root 286720 Oct 25 15:37 hoge


HP-UXのものだと思うのですが、
http://forums1.itrc.hp.com/service/forums/questionanswer.do?threadId=59677&admit=-682735245+1161763632138+28353475
というものを見つけました。
しかし、Linuxで同様のことを試してもディレクトリサイズに変化は見られませんでした。
# 0バイトのファイルを100個作成や適当なファイル(1.7GB)をコピー

Linuxでは(lsでの)ディレクトリサイズにどのような意味があるのかご存知の方いませんでしょうか?


[ メッセージ編集済み 編集者: try 編集日時 2006-10-25 17:26 ]
F/A
ぬし
会議室デビュー日: 2006/03/18
投稿数: 312
お住まい・勤務地: Tokyo
投稿日時: 2006-10-25 22:27
回答は推測で申し訳ないですが、
おそらくはHP-UX同様にディレクトリが確保しているi-nodeサイズだと思います。

ただし、
・i-nodeの確保方法はファイルシステムによって異なる為、最初からある程度のサイズを持つ場合や、徐々に増える場合がある

・一度大きくなったディレクトリサイズは、中のファイルを削除しても小さくならない

・ファイル名が長い方が、消費サイズは多い

そういうわけで、一度ディレクトリを作成し直した後、
長めのファイル名で大量のファイルを置いてみてはいかがでしょうか?
Console
ベテラン
会議室デビュー日: 2005/09/10
投稿数: 65
お住まい・勤務地: 石川県金沢市
投稿日時: 2006-10-25 22:32
ファイルシステムとブロックサイズの影響がありそうで100個が妥当なのでしょうか?
手元にファイルシステムで試して見ました。
(ファイルは、touchでごりごり作成です)

reiserfs:

ディレクトリ作成
drwxr-xr-x 2 xxxxx users 48 2006-10-25 22:21 bar

touchでファイル100個を作成
drwxr-xr-x 2 xxxxx users 2448 2006-10-25 22:22 bar


ext3:

ディレクトリ作成
drwxr-xr-x 2 xxxxx users 4096 2006-10-25 22:23 foo

touchでファイル1,000個を作成
drwxr-xr-x 2 xxxxx users 12288 2006-10-25 22:24 foo


ここに似たような質問と回答があったので参考になるかも知れません。
http://search.luky.org/linux-users.9/msg09154.html
try
常連さん
会議室デビュー日: 2004/10/22
投稿数: 38
お住まい・勤務地: 神奈川/東京
投稿日時: 2006-10-26 01:24
F/Aさん、Consoleさんお返事ありがとうございます。

自分でも簡単なスクリプト(touch)にて10万ほどファイルを作成して比較してみました。
共有までに結果をお知らせします。
しかし、まだまだ調べて(勉強して)行く必要がありそうです。



○結果考察
 ・ディレクトリ内に大量のファイルを作成するとディレクトリサイズが増える
  ディレクトリを言う一種のファイルに「i-nodeとファイル名の対応表」が作成されるため
 ・ディレクトリサイズはブロックサイズ単位の倍数で増える
 ・ディレクトリ内のファイルを削除しても確保されたディレクトリサイズは変わらない。
  「i-nodeとファイル名の対応表」が削除されない??



○スクリプト
---
#!/bin/sh
#
i=1
while (( i < 100000 ))
do
touch ${i}
i=`expr ${i} + 1`
done
---


○ディレクトリ(hoge)作成直後
# ls -l
drwxr-xr-x 2 root root 4096 10月 26 00:02 hoge
#
# df -i
Filesystem Iノード I使用 I残り I使用% マウント位置
/dev/md2 262144 4590 257554 2% /
#
# df -h
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/md2 2.0G 139M 1.8G 8% /


○ダミーファイル作成直後
# ls -l
drwxr-xr-x 2 root root 2166784 10月 26 00:35 hoge
#
# df -h
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/md2 2.0G 141M 1.8G 8% /
#
# df -i
Filesystem Iノード I使用 I残り I使用% マウント位置
/dev/md2 262144 104589 157555 40% /
#


○ダミーファイル削除
# ls -l
drwxr-xr-x 2 root root 2166784 10月 26 00:37 hoge
#
# df -h
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/md2 2.0G 141M 1.8G 8% /
#
# df -i
Filesystem Iノード I使用 I残り I使用% マウント位置
/dev/md2 262144 4590 257554 2% /
#


○ディレクトリ(hoge)削除
# df -h
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/md2 2.0G 139M 1.8G 8% /
#
# df -i
Filesystem Iノード I使用 I残り I使用% マウント位置
/dev/md2 262144 4589 257555 2% /
#
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2006-10-29 14:23
引用:

tryさんの書き込み (2006-10-26 01:24) より:
 ・ディレクトリ内のファイルを削除しても確保されたディレクトリサイズは変わらない。
  「i-nodeとファイル名の対応表」が削除されない??


ファイルを削除すれば、ディレクトリエントリは削除されます。
ディレクトリファイルのサイズが小さくならないのは、
DBからエントリを削除してもDBのファイルサイズは小さくならない
(DBの設計次第ですが)のと同様です。

これはOS次第、ファイルシステム次第ですので、ディレクトリファイルが
小さくなるものもあります。

[ メッセージ編集済み 編集者: ぽんす 編集日時 2006-10-29 14:29 ]
1

スキルアップ/キャリアアップ(JOB@IT)