RSSフィードNo.125 「ファイル断片化を極力抑えたコピー」機能
   
日時:
2019/01/03 15:12
名前:
jack ID:yp6FgnVQ

フリーソフトのFireFileCopyやFastCopyでは、ファイルの断片化を極力抑えたコピーが行えます。この機能をDiskMirroringToolに取り入れることはできないでしょうか。動作原理ですが、例えばFastCopyでは、SetFilePointer() + SetEndOfFile() で連続領域をコピー前に確保することでファイルの断片化を防止しているようです。FireFileCopyでの動作原理は知りませんが似たようなことを行っているのだと推測します。もちろん動作速度はそれなりに遅くなりますが、断片化を抑制できる効果には換えられません。私は普段のファイルコピーにはFireFileCopyを使うことが多いですが、その理由はこのファイル断片化を抑えたコピーが可能だからです。この機能がDiskMirroringToolに備われば、最高です!

メンテ
Page: 1 | 全部表示 スレッド一覧 新規スレッド作成
1 Re: 「ファイル断片化を極力抑えたコピー」機能
   
日時:
2019/01/04 11:15
名前:
ばぐ★NAGA ID:1u9OPx/c

追加機能の案、ありがとうございます。

ファイル断片化を抑えたコピーという技があるんですね。
調べてみます。

DMTU に取り込めそうなら、設定に追加したいと思います。

メンテ
2 Re: 「ファイル断片化を極力抑えたコピー」機能
   
日時:
2019/10/22 18:50
名前:
ばぐ★NAGA ID:nZOQ8Ylo

FastCopy の断片化を抑えたコピーの機能について調べてみましたが、
DMTU に追加するのはかなりの改造になりそうだということがわかりました。

DMTU のファイルコピーは、フォルダ等も含め前処理がほとんどされない仕様になっています。
1 フォルダごとにファイルを探して、1 ファイルごとにバックアップ先にあるかどうかで判断しています。

「対象フォルダ配下に何個サブフォルダがあるか」や「このフォルダに何個ファイルがあるか」など
前処理をほとんどせずにその場その場で判断しながら突き進む仕様です。


良く言えば事前に対象ファイルのリストアップなどはしないので、それほどメモリを大量に使用しませんが、
反面、計画的なディスク容量の確保などはできない作りになっています。

そのため、断片化を抑えるために必要な前情報がほとんどないため、
現状の作りのままでは、教えていただいた SetFilePointer + SetEndOfFile での断片化抑制は
あまり効果がないものになってしまいそうです。
この実装をするためには、事前のフォルダ・ファイルの把握という処理を追加する必要があります。

せっかくご提案いただいたのですが、直近での機能の追加は難しい状況です。
良い実装方法がわかるまで保留とさせてください。

メンテ
3 Re: 「ファイル断片化を極力抑えたコピー」機能
   
日時:
2019/12/03 22:26
名前:
jack ID:T5VI1SWk

バグ★NAGAさん、こんにちは。返信遅くなってすみません。
私もスピードを大きく落としそうな、理想的な断片化抑制を望んでいる訳ではありません。
かなりの改造ではなく、少しの改造で、断片化抑制の「努力」をしてくれるソフトを考えていました。つまり「前処理」はせず、その場その場のコピー処理で SetFilePointer + SetEndOfFile での断片化抑制を試みる(努力する)仕様の提案だったのですが、やっぱり無意味なんでしょうか。
何れにしてもDMTUのコンパクトで軽い動作を妨げるようなら実装する意味はありません。

メンテ
4 Re: 「ファイル断片化を極力抑えたコピー」機能
   
日時:
2019/12/08 16:04
名前:
ばぐ★NAGA ID:snxGxaoA

jack さん、コメントありがとうございます。

私も処理構造を大きく変えるのは想定しておらず、
「ファイルコピー処理」に少し追加するだけのイメージで仕様を検討していました。
しかし、処理の追加自体は実現できそうなのですが、効果に疑問があったのでいったん保留にしています。

SetFilePointer + SetEndOfFile は、あらかじめコピー予定のファイルサイズ分の連続領域を確保しておいて
断片化を抑制する方法と理解しています。

例えば、100 個のファイルで 100MB の容量がある場合(1 個 1MB 程度のファイルと想定)、
100 回のファイルコピーを実行すると処理の隙間があるので断片化しやすい状態になる、と仮定します。

そこで、重いファイルコピー処理ではなく、先に 100 個・100MB の領域を SetFilePointer + SetEndOfFile という
軽い処理で確保しておくことで断片化を抑制できる、という処理方式という理解です。
まとまった領域をすばやく連続で確保するのが重要だと思っています。

ただ、この方式は DMTU では前処理をしないので実装が難しいため、個々のファイルコピー時に
SetFilePointer + SetEndOfFile を実行するようにしたらどうかと検討しましたが、
それだと結局「1 個 1MB の領域確保」→「1 ファイルコピー」を 100 回繰り返す方式になり、
「すばやく連続した領域を確保」ではなく「細切れに小さな領域を確保」という方式になってしまいます。

これだと、コピー前に余計な処理を追加するだけのことにならないか? という疑問が湧きました。
「断片化抑制」と謳えるほどの効果がなさそうに感じられたのです。

本格的に実装しようとすると、「既存ファイルがあった場合の処理」(削除してから SetFilePointer をするのか等)、
「ファイルコピーに失敗したときの処理」(SetFilePointer で作成したファイルの後始末が必要等)、
いろいろと仕様を考えなければいけないことが多いため、せっかくなら効果があることを実感できるレベルで
実装したいと思っています。

自分の理解不足で恐縮ですが、断片化抑制の仕組みが腹落ちできるまで保留とさせてください。
何か理解が進むようなヒントやサイトを教えていただけると助かります(^^;

メンテ
5 Re: 「ファイル断片化を極力抑えたコピー」機能
   
日時:
2019/12/17 22:08
名前:
jack ID:Ly8uvDco

じつは大きな断片化抑制効果は期待していないんです。私の要望は最初から「1ファイル毎に1ファイル分の領域確保」を処理するファイルの数だけ繰り返す「細切れに連続領域を確保する方式」なんです。それが実現できれば、全体が連続した領域にはなっていなくても個々のファイルは「断片化抑制」できるのではないか、と考えています。それ以上のことは望んでいないのですが、それだけでもエラー処理を考えると実装はかなり大変なんでしょうね。。。
想定しているシチュエーションは、長時間掛かる複数ファイルのダウンロード実行中に、並行処理として数MB~数百MBのファイルに対してDMTUを走らせた場合、現状の仕様では断片化されたファイルだらけになりそうに思えて、それを少しでも断片化抑制できないだろうかと期待しています。もちろん処理速度はそれなりに落ちるとは思いますが。

メンテ
6 Re: 「ファイル断片化を極力抑えたコピー」機能
   
日時:
2019/12/23 23:14
名前:
ばぐ★NAGA ID:UCsnQ/eU

ご説明ありがとうございます。
なるほど、1 ファイルが大きなサイズのコピーで断片化を抑制したいとのことですね。

実装を検討したいと思いますが、その場合、サイズ指定もあったほうが良いかなと思いますがいかがでしょうか。
「○○MB 以上のファイルは領域確保してからコピーする」のような形で。

メンテ
7 Re: 「ファイル断片化を極力抑えたコピー」機能
   
日時:
2019/12/28 11:00
名前:
jack ID:tExoj4BM

前向きな回答をして頂きありがとうございます!!!

>「○○MB 以上のファイルは領域確保してからコピーする」のような形で。
なるほど、それはいいですね。私が常用しているフリーソフト「FireFileCopy」にも断片化防止のオプションに「ファイルサイズが[xx]kB以下なら予約しない」(WRITE前のディスク領域予約)があります。単位はMBではなくkBですが。数キロバイトのファイルならディスク領域の事前予約しなくても断片化されることは無いでしょうから。

>1ファイルが大きなサイズのコピーで断片化を抑制したいとのことですね。
大きなファイルはもちろんですが小さなファイルでも断片化はできる限り抑制したいです。
私の使い方ではバックアップ用のディスクが別PCに用意されていて、時々そちらにまとめてミラーリングを行っています。ファイルサイズは数キロバイトのテキストファイルから数百メガバイトの動画ファイルまで色々ありますが、全体のファイル数に比べると更新されたコピーされるファイルは色々なフォルダに散らばってはいますが、数はそんなに多くはならないです。そんな状況なのでフォルダ全体の断片化抑制なんて望める訳がなく、個々のファイルの断片化抑制があれば十分と思う理由でもあります。
個々のファイルの断片化を嫌う理由は2つあります。1つ目はディスクの処理速度が低下すること。時々デフラグを掛ければ処理速度は戻りますが、デフラグはディスクへの負担が大きく、ディスクの寿命が縮まるため、ファイルコピー時に最初から断片化しないで書き込めればそれがベストです。2つ目は万が一ディスクがクラッシュして読めなくなった時、ファイルが断片化していなければデータサルベージの成功率が高まります。
そんな理由ではありますが、処理速度が多少遅くなっても我慢できる人には個々のファイル断片化抑制オプションは有益なものになってくれると思っています。

メンテ
8 Re: 「ファイル断片化を極力抑えたコピー」機能
   
日時:
2019/12/31 00:25
名前:
ばぐ★NAGA ID:Z2mopHgo

ご説明ありがとうございます。
意図について理解できました。

領域確保の機能については、もう少し研究が必要なので
すぐに対応は難しいかも知れませんが、気長にお待ちいただければと思います。

メンテ
9 Re: 「ファイル断片化を極力抑えたコピー」機能
   
日時:
2019/12/31 21:07
名前:
jack ID:aQ1pbulI

ばぐ★NAGAさん、有難うございます。
纏まったお時間が取れた時にでも対応して頂けたら幸いです。
気長にお待ちしております。(^^

メンテ
Page: 1 | 全部表示 スレッド一覧 新規スレッド作成
題名 スレッドをトップへソート
名前
E-mail (非表示)
パスワード (記事メンテ時に使用)
投稿キー (投稿キーを入力してください)
コメント

   クッキー保存