lsコマンドの表示について(ディレクトリのサイズ)


Rev.2を表示中。最新版はこちら

lsコマンドの表示について(ディレクトリのサイズ)というのがあった。新規に作成したディレクトリのサイズが4096の倍数で表示されるというものだ。実際新規にディレクトリを作成してls -lとしてみると、確かに4096で、その下にファイルを作成しても4096のままである。

Takeshi Kusune さんが実装にもとずいて説明されている。ディレクトリもファイルと同じ扱いをする。ファイル同じようにiノードをもつ。(ただし、file_operetion,inode_operatinのコールバック関数は異なる。)そしてファイルと同じようにデータブロックをもつ。ディレクトリはこのデータブロックに配下のファイルのiノードとファイル名を記述しており、ファイルと同じように実際のサイズを有している。しかし考えてみればディレクトリのサイズは意味がない。ユーザがそれを読み書きするような事はないからだ。

fs/ext3/namei.cのstatic int ext3_mkdir(struct inode * dir, struct dentry * dentry, int mode)で

inode->i_op = &ext3_dir_inode_operations;
inode->i_fop = &ext3_dir_operations;
inode->i_size = EXT3_I(inode)->i_disksize = inode->i_sb->s_blocksize;

確かにiノードのi_sizeに自スーパブロックのブロックサイズを設定している。i_sb->s_blocksizeはファイルシステム登録register_filesystem時に、ファイルシステム毎に設定するスーパブロック情報でコールバック関数で設定される。mkfs時の設定値で通常は4096だ。ディレクトリも実際のサイズを有しているわけだから、ファイルのように1バイト単位でサイズを表示させることは可能だと思う。しかし意味が無いゆえ実装上は簡単にそのデータブロック数を設定しているのだろう。サイズが4096としても、まんざら間違いだ。ともないわけだから。

配下にファイルをどんどん作成していって、4096を超えた場合別のデータブロックを使うことになる。その場合のサイズは4096*2となるか? ソースを追ってみたが追えきれず。


最終更新 2010/01/10 13:37:38 - north
(2010/01/10 13:36:03 作成)


検索

アクセス数
3690068
最近のコメント
コアダンプファイル - sakaia
list_head構造体 - yocto_no_yomikata
勧告ロックと強制ロック - wataash
LKMからのファイル出力 - 重松 宏昌
kprobe - ななし
ksetの実装 - スーパーコピー
カーネルスレッドとは - ノース
カーネルスレッドとは - nbyst
asmlinkageってなに? - ノース
asmlinkageってなに? - よろしく
Adsense
広告情報が設定されていません。