ファイルタイムスタンプの精度は、EXT3の場合は1秒、UFSの場合は1マイクロ秒、EXT4の場合は1ナノ秒に制限されます(少なくとも経験上)。ファイルシステム情報のみに基づいてこれを確認する方法はありますか?
私が考えることができる代替案は、すべてのユニットテストを数秒に制限するか(今私がやっていること)、複数のtouch
ファイルを制限しますstat -c %x
。
答え1
私が知る限り、この情報はどこにも保存されません。ファイルシステムにエンコードされます。ただし、ファイルシステムのリストとその精度を手動で作成できます。私はcase
ステートメントを使用してファイルシステムのリストに対してファイルシステムIDをテストします。精度が1秒未満の例がほとんどないので、デフォルト値を1に設定するだけです。
オンラインで読むと、以前のバージョンのFATと現在のバージョンのzipは2秒のタイムスタンプ精度を使用します。しかし、事実を確認することをお勧めします。
次のコマンドを使用して、ファイルのファイルシステムIDを取得できます。
stat -f --format="%t" $file
答え2
一般的に利用可能状態ファイルシステムまたはパスの設定しかし、その情報を見つける方法をサポートしていないようです。
明らかにそのような機能は議論中将来のPOSIX規格
また、ルート固有のタイムスタンプの粒度を返すために、ルート設定を改善するためにいくつかのaardvarkを保持します。
残念ながら、現在のところ、OS固有の方法であっても、これを行うためのきちんとした方法はありません。
ファイルシステムのリストを作成し、そのシステムが1秒未満の解像度をサポートしているかどうかを確認しようとするのは危険です。たとえば、ext4
inodeが256バイトの場合はナノ秒の解像度がサポートされているように見えますが、inodeが128バイトの場合はサポートされません。
包括的で正確なリストを作成するのは難しく、ルートアクセスが必要な場合があり、明日変更される可能性があります。私にとっては、それがstat
数回走るよりも難しく聞こえます。
答え3
ただ、ファイルデータベースのインスツルメンテーションを実装しました。まず、ファイルのタイムスタンプを1234ミリ秒に設定してから、もう一度読んで1234(最小ミリ秒精度)か1000(秒精度)かを確認しました。これまで私が学んだことは次のとおりです。
- XFSおよびEXT3:超精度
- EXT4:ミリ秒精度
- NTFS:100nsの精度(いいね、ドキュメントから得ました...)
答え4
BTRFS(デフォルトファイルシステム)を使用するLinux Fedora 35の場合、精度は次のとおりです。
stat test1.txt
Access: 2021-11-25 19:48:58.254916839 +0000
Modify: 2021-11-22 09:54:48.694107073 +0000
Change: 2021-11-22 09:54:48.698107163 +0000
Birth: 2021-11-22 09:54:48.694107073 +0000
しかし、この値がどれだけ正確かは不明です。