ファイルのバックアップ用にバッチファイルを作成してxcopyコマンドに
「/D」のスイッチを入れて日付が新しかったらコピーするという事を
やってる方もいると思います。

さて、日付が新しい場合だけコピーするはずなのに、何故か更新してないファイルが
毎回コピーされてしまう・・・という事象が発生する場合があります。
実は、これはファイルフォーマットの違いによるファイル更新日付の
精度が違う事によって起こります。

NTFSフォーマットで使用しているPCに外付けHDDを付けたとします。
ことのとき、外付けHDDもNTFSならば問題はありません。
もしNTFSではなくFAT32などの異なるフォーマットだった場合に問題が生じます。
FAT32でのファイルの更新時刻の精度は2秒です。
つまり、2秒単位に切り捨てられてファイルの更新時刻が刻まれます。
しかしNTFSの場合の更新時刻の制度はググってみたところ、100ナノ秒のようです。

1秒は10億ナノ秒なので例えば2013年12月29日 2時53分5秒253...という時刻のファイルを
FAT32でフォーマットされているドライブにコピーすると2秒単位で切り捨てられるため
2013年12月29日 2時53分4秒になるかと思います(試してないのでこうなるか不明)

そうした場合、秒の単位だけで見たとしても5秒と4秒を比較すると5秒の方が新しいですね?
そのため「ファイルの日付が新しい」と判断されてしまいコピーが実行されてしまいます。
全く変更がないのに関わらずです。

じゃあNTFSフォーマットなんかをFAT32のドライブへ差分コピーするにはどうすればいいんでしょうか?
その場合、xcopyの/Dスイッチの代わりに/Mスイッチを使うと良いです。
/Dは同一のファイルがあった場合にコピー元のファイルの日付の方が新しいと上書きされます。
では/Mはどういった場合にコピーされるかというとアーカイブ属性がオンのファイルだけをコピーし、
そのファイルのアーカイブ属性をオフにします。

アーカイブ属性とは何かというと、ファイルをバックアップ取るかどうかの目印のようなもので
ファイルを新規で作成したり更新したりするとオンになります。
つまり、新規のファイルや更新されたファイルをコピーしてアーカイブ属性をオフにするので
まさにバックアップに持って来いですね。

NASなんかへコピーする場合もこういうファイル時刻の制度の違いで無駄なコピーが多発する場合は
アーカイブ属性がオンだけをコピーする/Mスイッチで行うと、うまくいく場合が多いでしょう。
アーカイブ属性はNTFSやFAT32なんかのWindows用のフォーマットにはありますが、
NASで使用されているXFSやLinuxのext*にはあるかどうかわかりません。(ないんじゃないの?)
なのでWindowsのローカルディスクからNASへのコピーはこれで対応できますが、
逆はできないでしょう。(WindowsでNTFS使ってるファイルサーバーなら逆も可だろうけど)


以下、画像は参考です。
bk001bk002
コメント(0件)

 

■コメントを書く
タイトル
本文 *必須
お名前 *必須
メールアドレス
ホームページアドレス
削除パスワード*必須
コメントを削除する際に必要になります。
認証キー *必須 下の画像に表示されている数字をご記入下さい。
(画像は毎回変わります)