Linuxでデカい外付HDDになんとなくだがファイルバックアップをとってみる(2):FATファイルシステムのタイムスタンプは偶数秒単位
スポンサードリンク
前回、FAT フォーマットのデカい HDD に Linux の samba やら netatalk やらで共有かけている領域のバックアップを rsync でとるぜ HA! HA! HA! なんていい気になっていたのですが、なにかおかしい。ていうところまでやりました。
~~~
タイムスタンプ比較で新しいものを新たにコピーする設定にしたのに、毎回特定のファイルを上書きしやがります。なにかおかしい。
▲コピー元(サーバ)
▲コピー先(外付けHDD)
時刻は同じなんですけど。
そこで、Linux側 でファイルを見てみました。
▲VaraTerm 使っていないのはまだお金払っていないからです。
やっぱりタイムスタンプが違っている。
コピー元のファイルは、Linux上のファイルシステム(この場合はext3)では「19時22分53秒」となっているが、コピー先のファイルシステム(FAT)では、「19時22分52秒」になっています。rsync は、この1秒の違いで、「コピー対象」と見なし、毎回コピーし、コピー先ではウソのタイムスタンプが付いていたわけです。
sambaで見たときはなんで同じに見えるの? うちの samba は 日本 samba ユーザ会 からひっぱってきた RPM をそのまま入れただけなんですが、samba のほうで、Windows とやりとりするときに2秒単位に丸めてしまうっていうことかしら。samba タイムスタンプ捏造疑惑!(そんな大げさなもんでもない) この疑問は放置しときます。
~~~
MS-DOSとファイルシステム互換、CP/Mとシステムコール互換の OS、MSX-DOS で、機械語でプログラミングしていた幼少の日の記憶と経験と、出てきた資料によると(つまり僕は Z80 でしかプログラムできません)、FATファイルシステムのディレクトリエントリでは、時刻に2バイト分の領域しか用意していないから、0~65535までしかカウントできないのだけれども、1日は86400秒だから、2バイトじゃあ表現できないので、しょうがないから2秒刻みで我慢するか。ということではないのかしら。(推論)
Windows 用の ファイルバックアップソフトには、FAT と NTFSとの間でバックアップを実行するときは、±2秒は同一時刻とみなす、と書いているのを見たことがある。(経験)
などの要素が集まったので、さっさとネットde検索かけましょう。
~~~
402160 - [NT] NTFSからFATへのファイルのコピー時に日時が変わる
NTFS ファイルは、ファイルの作成日時を、 100 ナノ秒単位で記録していますが、 FAT ファイルは 偶数秒単位でしか記録することができません。そのため、奇数秒に作成されたファイルを NTFS パーティションから FAT パーティションにコピーすると、作成日時の繰り上げが発生します。
FATファイルシステムの総本山マイクロソフトの解説。とりあえず FAT ファイルシステムは偶数秒単位(=2秒単位)でしか記録できないことが分かった。
FAT32 memo -- Twenty-five on Web
時刻のフォーマット :※引用のさい、当blogのテンプレートに入るように、幅を縮めました。
bit15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 時(0-23) 分(0-59) 秒(0-29) 実際は2倍する
なんか昔こんな図を見たことがある! 推論とはちょっと違ったが、やっぱり秒は1/2されてディレクトリエントリに格納されていた。
~~~
疑問が氷解したので今日は終了。Linuxサーバのバックアップについてはまた後日考えることにする。雷が落ちない限りサーバ自体は安定そのものだし。
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/80
コメントする