M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2004年5月 6日 00:31

Linuxでデカい外付HDDになんとなくだがファイルバックアップをとってみる(2):FATファイルシステムのタイムスタンプは偶数秒単位

このエントリーをはてなブックマークに追加 mixiチェック

前回、FAT フォーマットのデカい HDD に Linux の samba やら netatalk やらで共有かけている領域のバックアップを rsync でとるぜ HA! HA! HA! なんていい気になっていたのですが、なにかおかしい。ていうところまでやりました。

~~~

タイムスタンプ比較で新しいものを新たにコピーする設定にしたのに、毎回特定のファイルを上書きしやがります。なにかおかしい。

timestamp-1.gif
▲コピー元(サーバ)

timestamp-2.gif
▲コピー先(外付けHDD)

時刻は同じなんですけど。

そこで、Linux側 でファイルを見てみました。

timestamp-3.gif
▲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

時刻のフォーマット :
bit15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
時(0-23)
分(0-59)
秒(0-29) 実際は2倍する
※引用のさい、当blogのテンプレートに入るように、幅を縮めました。

なんか昔こんな図を見たことがある! 推論とはちょっと違ったが、やっぱり秒は1/2されてディレクトリエントリに格納されていた。

~~~

疑問が氷解したので今日は終了。Linuxサーバのバックアップについてはまた後日考えることにする。雷が落ちない限りサーバ自体は安定そのものだし。

投稿 大野 義貴 [Linux] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/80

コメントする