ablog

不器用で落着きのない技術者のメモ

ext3 ファイルシステムの最終更新日時を知りたい

ext3 ファイルシステムの最終更新日時を知りたくて調査したときのメモ。
dumpe2fs コマンドで表示される Last write time がそれに該当するぽいので調べてみた。

dumpe2fs は、 device によって指定されるデバイス上にあるファイルシステムの スーパーブロックに関する情報と ブロックグループに関する情報を表示する。

http://www.linux.or.jp/JM/html/e2fsprogs/man8/dumpe2fs.8.html

dumpe2fs is part of the e2fsprogs package and is available from http://e2fsprogs.sourceforge.net.

dumpe2fs(8) - Linux man page

The latest development sources for e2fsprogs is maintained in a Git repository at git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git.

E2fsprogs: Ext2 Filesystem Utilities

dumpe2fs のソースをとってきて、

$ cd ~/Documents/src
$ git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
Initialized empty Git repository in /Users/yohei/Documents/src/e2fsprogs/.git/
remote: Counting objects: 27938, done.
remote: Compressing objects: 100% (5459/5459), done.
remote: Total 27938 (delta 22433), reused 27691 (delta 22251)
Receiving objects: 100% (27938/27938), 12.90 MiB | 7 KiB/s, done.
Resolving deltas: 100% (22433/22433), done.

grep してみて、

$ cd e2fsprogs
$ grep -R 'Last write time' *
contrib/dconf:/^Last write time:/ {
contrib/dconf:	lwtime=$0; gsub("Last write time:[ ]+", "", lwtime)
e2fsck/problem.c:	/* Last write time is in the future */
e2fsck/problem.c:	/* Last write time is in the future (fudged) */
e2fsck/problem.h:/* Last write time is in the future */
e2fsck/problem.h:/* Last write time is in the future (fudged) */
lib/e2p/ls.c:	fprintf(f, "Last write time:          %s", ctime(&tm));
tests/filter_dumpe2fs:/^Last write time:/d

のぞいてみると、

  • lib/e2p/ls.c
196 void list_super2(struct ext2_super_block * sb, FILE *f)
197 {
...
275         tm = sb->s_wtime;
276         fprintf(f, "Last write time:          %s", ctime(&tm));

スーパーブロックの情報を表示してるぽい。

「スーパーブロック」は、1つのファイルシステムについて1つだけ存在し、マウントされたローカルファイルシステムに対する情報を保存している。通常、iノードは書き込みなどの状態が変化すると、その都度現在の状態を示すフラグ(ビット)を更新する。この更新は、効率化のためにディスクにアクセスせずにメモリ上に保持されているスーパーブロックに対して行われる。

VFSとファイルシステムの基礎技術 (2/2):Linuxファイルシステム技術解説(1) - @IT


つづく