ファイルのタイムスタンプの精度 - ext3 ではナノ秒、ext4 ではミリ秒

ファイルのタイムスタンプの精度 - ext3 ではナノ秒、ext4 ではミリ秒

ext3 は最大数秒のファイル タイムスタンプ精度をサポートし、ext4 は最大ナノ秒のファイル タイムスタンプ精度をサポートすると言われています。

実際に起こったことは、ext3 ファイルシステムで Ubuntu 12.04 を実行している私の古い VPS が、常に (私が覚えている限り) 次のようにナノ秒を非常にうまくサポートしていたということです。

  File: `auth.log'
  Size: 147744      Blocks: 304        IO Block: 4096   regular file
Device: 800h/2048d  Inode: 32019       Links: 1
Access: (0640/-rw-r-----)  Uid: (  101/  syslog)   Gid: (    4/     adm)
Access: 2020-03-20 00:18:33.634687690 -0300
Modify: 2020-03-24 05:12:48.777610222 -0300
Change: 2020-03-24 05:12:48.777610222 -0300
 Birth: -

mount抜粋:

/dev/sda on / type ext3 (rw,noatime,errors=remount-ro)

stat -f:

  File: "auth.log"
    ID: 5483af2794a91010 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 3870084    Free: 272230     Available: 75643
Inodes: Total: 923520     Free: 829980
root@mail:~# df -mT
Filesystem     Type     1M-blocks  Used Available Use% Mounted on
/dev/sda       ext3         15118 14055       296  98% /
devtmpfs       devtmpfs      1973     1      1973   1% /dev
none           tmpfs          395     1       395   1% /run
none           tmpfs            5     0         5   0% /run/lock
none           tmpfs         1973     0      1973   0% /run/shm

今、私は新しい VPS を購入し、Ubuntu 20.04 (プレベータ版) にアップデートしました。ファイルシステムは ext4 としてマウントされています。

  File: auth.log
  Size: 723967      Blocks: 1424       IO Block: 4096   regular file
Device: ca03h/51715d    Inode: 398412      Links: 1
Access: (0640/-rw-r-----)  Uid: (  104/  syslog)   Gid: (    4/     adm)
Access: 2020-03-24 00:00:05.676000000 -0300
Modify: 2020-03-24 05:14:56.644000000 -0300
Change: 2020-03-24 05:14:56.644000000 -0300
 Birth: -

mount抜粋:

/dev/xvda3 on / type ext4 (rw,noatime,nobarrier,errors=remount-ro,stripe=32564)

しかし奇妙なことに、stat -fext3 であると表示されます。

  File: "auth.log"
    ID: 7e8a03105e52b018 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 9857995    Free: 7434726    Available: 7007355
Inodes: Total: 2505120    Free: 2403794
root@mailnew:~# df -mT
Filesystem     Type     1M-blocks  Used Available Use% Mounted on
udev           devtmpfs       430     0       430   0% /dev
tmpfs          tmpfs           95     2        94   2% /run
/dev/xvda3     ext4         38508  9466     27373  26% /
tmpfs          tmpfs          473     0       473   0% /dev/shm
tmpfs          tmpfs            5     0         5   0% /run/lock
tmpfs          tmpfs          473     0       473   0% /sys/fs/cgroup
/dev/loop0     squashfs        54    54         0 100% /snap/lxd/11348
/dev/loop1     squashfs        92    92         0 100% /snap/core/8689
/dev/xvda1     ext4           727   183       502  27% /boot
tmpfs          tmpfs           95     0        95   0% /run/user/0

私の質問は次のとおりです:

  1. 古い ext3 システムがナノ秒の精度をサポートするのはなぜですか?

  2. 新しい ext4 がミリ秒に制限されているのはなぜですか? 実際には ext3 としてフォーマットされているのですか?

  3. 何が問題なのかを突き止めて、新しいものでナノ秒を有効にするにはどうすればいいでしょうか?

答え1

ナノ秒と秒の解像度の実際のサポートは、フォーマット時に選択された inode のサイズによって異なります。128 バイトの inode は秒の解像度のみをサポートし、256 バイトの inode はナノ秒の解像度をサポートします。カーネル内の ext3 ファイルシステム ドライバーは実際には長年 ext4 モジュールを実行しているため、ナノ秒のタイムスタンプをサポートしています。

ミリ秒解像度のタイムスタンプに関しては、仮想化によってファイルシステムにミリ秒解像度のクロックのみが提供されることが原因であると考えられます。

関連情報