ext4はディレクトリサイズをどこに保存しますか?ディレクトリinodeに保存されていますか?
たとえば、実行するとdu -h
ディレクトリのサイズがすぐに返されるので、その時点で計算するとは信じられません。
私はLinuxでext4を使用しています。
答え1
使用法はstrace
、実際にファイルのディレクトリを照会してファイルサイズが計算されたことを示すようです。
はい
3つの1MBファイルでディレクトリを埋めるとしましょう。
$ mkdir adir
$ fallocate -l 1M adir/afile1.txt
$ fallocate -l 1M adir/afile2.txt
$ fallocate -l 1M adir/afile3.txt
du -h
コマンドを追跡すると、次のようになります。
$ strace -s 2000 -o du.log du -h adir/
3.1M adir/
strace
生成されたログファイルを見るdu.log
:
...
newfstatat(AT_FDCWD, "adir/", {st_mode=S_IFDIR|0775, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0
fcntl(3, F_DUPFD, 3) = 4
fcntl(4, F_GETFD) = 0
fcntl(4, F_SETFD, FD_CLOEXEC) = 0
getdents(3, /* 5 entries */, 32768) = 144
getdents(3, /* 0 entries */, 32768) = 0
close(3) = 0
newfstatat(4, "afile2.txt", {st_mode=S_IFREG|0644, st_size=1048576, ...}, AT_SYMLINK_NOFOLLOW) = 0
newfstatat(4, "afile3.txt", {st_mode=S_IFREG|0644, st_size=1048576, ...}, AT_SYMLINK_NOFOLLOW) = 0
newfstatat(4, "afile1.txt", {st_mode=S_IFREG|0644, st_size=1048576, ...}, AT_SYMLINK_NOFOLLOW) = 0
brk(0) = 0x231a000
...
newfstatat
システムコールを見つけましたか?これにより、各ファイルのサイズが決まります。
異なる背景
興味がある場合は、このトピックに関する追加情報をご覧ください。
- この動作はEXT4とは無関係です。これがUnixでファイルシステムが動作する方法です。
この
stat
コマンドは、ファイルシステムオブジェクト(ディレクトリまたはファイル)のサイズ以外の項目を照会する機能を提供しません。$ stat adir/ File: ‘adir/’ Size: 4096 Blocks: 8 IO Block: 4096 directory Device: fd02h/64770d Inode: 11539929 Links: 2 Access: (0775/drwxrwxr-x) Uid: ( 1000/ saml) Gid: ( 1000/ saml) Context: unconfined_u:object_r:user_home_t:s0 Access: 2014-04-15 22:29:25.289639888 -0400 Modify: 2014-04-15 22:29:44.977638542 -0400 Change: 2014-04-15 22:29:44.977638542 -0400 Birth: -
4096バイトということに注意してください。これはディレクトリに含まれるものではなく、ディレクトリ自体の実際のサイズです。