- ベストアンサー
ファイルコピーの際に化けてもOSは気付きませんか?
Windowsでファイルをコピーする際、コピー先とコピー元の内容の同一性は保証されているのでしょうか(化けた場合に通知されますか)? それが無いのなら実行ファイルでは暴走しかねないと思いますし、逆に保証されているのならコマンドプロンプトのCOPYコマンドにおける /Vオプションの存在理由が分かりません。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
HDDからメモリへの読み込みを考えます。HDDからメモリへの読み込みは次のように行われます。SATA接続のHDDからマザボ上のHDDコントローラ(普通はサウスブリッジに一体化されてますが)のあいだはなんらかのチェックデータが付加されデータ化けは検出されます。しかしHDDコントローラからDMAでメモリに書き込む際はデータチェックはありません。この間で発生するデータ化けは全く検出されません。読み込まれたデータがプログラムとして実行される場合は、あちこちでよく見かけるまれにフリーズするPCになります。ちょっ寒いと起こりやすいみたいです。メモリかマザボの不良が原因の事が多いです。 ファイルコピーの場合はメモリ書き込みとメモリ読み出しの2か所でチェックが行われない事になります。
その他の回答 (7)
- wormhole
- ベストアンサー率28% (1626/5665)
>標準でなくても何らかのオプションで行ってくれると安心なんですが。 ハードウェア側で行ってるチェックだけでは信用できないという事ですか? 稼働部分のあるHDDがコピー内容の同一性において信用できないみたいな感じですが、#3の方のおっしゃっていることはHDDなどのストレージに稼働部分あるなし関係ありませんし、DMAでのデータ化けを疑わないといけない状態ならPCそのものがまともに動作できる状態ではありません(簡単にいえば壊れてます)。 # バス側でデータチェックは行われてるはずだからDMA転送でデータチェックが行われていないという事はないと思うんだけど。
お礼
ご回答ありがとうございます。 >ハードウェア側で行ってるチェックだけでは信用できないという事ですか? そういうわけではないのですが、これまで頂いた回答からハードウェアでのチェックは一部区間のみであることを知り、またこれに関連して重要なファイルの移動にはハッシュ値で同一性をチェックした方がいいなどとする記事を読んだりしたため、今までよりやや不安度が増したということです。
- dragon-man
- ベストアンサー率19% (2711/13692)
>可動部分のあるHDDでは相対的に信頼度が低くなりそうですから、 WindowsOSはその「可動部分のある」HDDをスワッピングメモリに使っています。メモリが足りないとき、ページングデバイスに使っているのです。つまりメモリの拡張部分として使っているのです。スワッピングはデータ書き込みやコピーとは比べものにならないほどの書き込み頻度です。それでもPCは問題なく動いています。もし可動部分故に信頼性が低いデバイスなら、そう言う使い方は出来ないでしょう。
お礼
ご回答ありがとうございます。 信頼性というより耐久性と言うべきでした。
- okgoripon
- ベストアンサー率44% (1141/2548)
ただ書き込んだだけであれば同一性は保証されませんし、化けた際に通知されるかどうかは状況によります。 ただし、ハードディスクに関して言えば、信頼性が高く化ける確率が極端に低いので、普通は問題になりません。発生するとしたら、ハードウェアの故障の結果としてでしょうね。 同一性を保証しようと思ったら、書き込んだ後に書き込んだデータを読み出して、元々のデータと比較する「ベリファイ」の動作が必要になります。 この動作は書き込みの速度を極端に低下させるので、普通のPC向けハードディスクにおいては、標準では行われません。 光学メディア(CD/DVD)では、書き込みのムラなどにより元のデータと食い違うことがわりと頻繁に発生するので、大抵のライティングソフトでは、書き込み後にベリファイの動作を行うかどうかが選択できるようになっています。
お礼
ご回答ありがとうございます。 >同一性を保証しようと思ったら、書き込んだ後に書き込んだデータを読み出して、元々のデータと比較する「ベリファイ」の動作が必要になります。 これがcopyコマンドなどでの /Vだと思っていたのですが違うようで。 標準でなくても何らかのオプションで行ってくれると安心なんですが。
- dragon-man
- ベストアンサー率19% (2711/13692)
コンピュータの内部(CPU、メモリ、HDDなど)でのデーター転送(メモリーメモリ、メモリーHDDなど)はチェックアルゴリズムが働いていて、内容が書き換わる(化ける)と言うことはあり得ません。少なくとも極めて(天文学的に)低い確率でしか起きません。ですからコンピュータはデータの内部転送ではデータが化けることはないという前提で作られ、動作しています。内部的にデータ転送は常に極めて高い頻度で行われています。メモリーHDDについてでもです。この同一性が保証されなければそもそもコンピュータは一瞬たりとも動きません。 それでも書き間違いは起きます。ほとんどの場合ハード的エラーです。たまにはソフト的エラーもあります。書き込みの際エラーを検知すると、再書き込みをしたり、書き込みトラックを変えたり、ある程度の修正を施します。その際HDDに傷(ソフト的な)が付きます。それをチェック、修正するのがディスクチェックです。どうやっても修正不能で、HDDへのアクセスすら出来なくなる場合もあります。HDDの劣化、故障で交換が必要になります。 言いたいことは、通常の状態で行われるデータコピーは同一性が保証されていると考えて間違いありません。そうでなければ世界中のコンピュータが日々おかしなことをやっていることになり、世の中が動きません。
お礼
ご回答ありがとうございます。 >ですからコンピュータはデータの内部転送ではデータが化けることはないという前提で作られ、動作しています。 たしかにメモリ周辺でデータ化けが頻発するようではファイルコピーという動作をさせる事自体が難しくなりそうですね。 しかし可動部分のあるHDDでは相対的に信頼度が低くなりそうですから、そういう意味で3の回答者様のおっしゃる仕組みがあるんでしょうね。
- vaidurya
- ベストアンサー率45% (2714/5983)
現在では、あまり必要の無い機能ですが 旧世紀に存在していたと確認されたフロッピーディスクでは 信頼性が低かったため、ベリファイオプションが必要であったと伝えられています。 近代的なHDDやSSDは、その装置の中に、信頼性を高めるための仕組みがあります。 FDDやCD-R,DVD-R,BD-Rなどにはそういった仕組みがありません。 (USBメモリーがどうなっているかは知りません) まぁ、FDやCDでは、書き込んだデータが壊れたのか それとも、書き込む時点で正常に書き込めていなかったのか 区別がつかないようです。 MS-DOSよりも古く、ただしFDDを一般的に使用しないUNIX系OSでは COPYに対応するコマンドに、/Vにあたるオプションは無かったりします。 (MS-DOSはFDを主媒体として運用された時代があり、必須のものだったのでしょう) そのかわり、UNIX系OSでも、md5deepなどでハッシュ値を保存することで ファイルの比較を効率的に行なう手法はあります。 全体をまとめてチェックするので、大量コピーの途中で中断した場合に 再開時に、中途半端にコピーされたファイルが残るような事故を検出できます。 (ファイル単位で行なうCOPY /Vではそういう事故までは対応できません) http://ubulog.blogspot.jp/2010/01/ubuntu.html CD-R類へのデータ保存にも、書き込み後にチェックする機能がある場合がありますし dvdisasterというツールでは、書き込み前に復元のための情報を追加することで 光学媒体の劣化によるデータ喪失を、できるだけ防ぐように準備することができます。 XPには採用されていませんが、より新しいWindowsにあるCD-Rなどを HDDに近い使用方法で使えるようにするパケットライトでは dvdisasterのような手法が使えないので COPY /Vを使うのも、整合性を維持するために良いでしょう。 (普通ドラッグアンドドロップでやっちゃいますけどね) でも、やってみるとわかりますが、ベリファイしながらだと非常に遅くなります。 そのため、/Vオプションがあり、標準動作としてはベリファイしないのです。 md5deepなどのツールは、Windows版もありますから 理屈としては、そういったものでCD-Rなどを検証することもできるでしょう。 どちらが速いかはわかりません。 ハッシュ値で、ファイルの整合性を遠隔地で確認することは Linux系OSでは、基本的な手法として使われています。 Windows系ダウンロードサイトでは使われていないことが多いようですが Linux系OS向けのダウンロードでは、ハッシュ値を保持したファイルも置いてあることが多いのです。 壊れたことがわかりにくいものは、場合によってはそのままのコピーではなく 圧縮アーカイブとして受け渡すのもいい方法です。 (相手側がMD5SUMのようなツールを使うスキルが無い場合は特に) そうすれば、アーカイブの展開の段階で、アーカイブが壊れていれば エラーが出るので、壊れたファイルで作業を続けることが防げます。 実は、Microsoftという有名な会社のサイトがあるんですが 300MBを超える巨大なファイルのダウンロードにおいて ハッシュ値が掲示されていないようです。 でも、第三者の記事で正常にダウンロードされた場合のハッシュ値を掲示し ハッシュ値の必要性についても説明しているサイトがあります。 http://wakouji.sakura.ne.jp/ugoke_windows/ugoke3/pcsub49.htm 余談ですが、Linux系では、たとえば200MBにも満たないPuppy Linuxでもハッシュ値が表示されていて 同じファイル名の、新しいファイルを判別する方法としても提示されています。 http://sakurapup.browserloadofcoolness.com/viewtopic.php?t=2181 まぁ、確実性について、特に注意が必要でもないものと 注意が必要なものがあって、使い分けましょうってことですね。
お礼
ご回答ありがとうございます。 ハッシュ値という言葉は聞いたことがあるのですが、ダウンロード時にそれを確認した方がいいとは正直考えもしませんでした。 しかしそういうことならWindows Updateはどうしたらいいのかと思います。
補足
できましたら >近代的なHDDやSSDは、その装置の中に、信頼性を高めるための仕組みがあります。 これがどういう仕組みなのか教えて下さい。
COPYコマンドの/Vスイッチは、フロッピーディスクなどの信頼性の低いメディアへコピーする場合に、コピー後、読み取れるか確認するものであって、同一性を確認するものではありません。 http://support.microsoft.com/kb/126457/ja
お礼
ご回答ありがとうございます。 これは結構ショックでした。 MS-DOS時代にHDD間でも時間のかかることを承知でmcopy /vなんてやってましたから。
- maiko0318
- ベストアンサー率21% (1483/6969)
正確に言えば保証されていません。 ただ、普通のHDD内でのコピーに不正は出ません。(そうなったらOSが維持できなくなります) メディア(CD,DVD,ブルーレイ)にコピーする際には、化けるのではなく、書き込みミスが 発生するのです。よって/Vで再読み込みしてチェックすることになります。
お礼
ご回答ありがとうございます。 >普通のHDD内でのコピーに不正は出ません。 つまり信頼性が高いということですね。
お礼
ご回答ありがとうございます。 >あちこちでよく見かけるまれにフリーズするPCになります。 この原因はそういうところにあったのですか。 損傷ファイルの特定は不可能なうえ、「システムの復元」でも修復できないため大変な問題だと思います。