多くの個別のファイルに分散している場合、同じ量のデータのコピーに時間がかかるのはなぜですか?


12

24Mb相当のデータを1つのフォルダーから別のフォルダーにコピーするのに約30秒かかることに気付きました(これが理由だと思います)は、1,000を超える個別のファイルでした。24Mbのコピーにはそれほど時間がかかりません。ファイルの数が異なるのはなぜですか?

MacBook(4GB RAM、Intel(R)Core(TM)2 Duo CPU P7450 @ 2.13GHz、32ビットオペレーティングシステム)でWindows 7を実行しています。

編集:NTFSはドライブで使用されるファイルシステムです。

回答:


5

HDDには正確な転送速度はありません。適切なメンテナンスに依存しています。つまり、断片化されていないか、不良セクターがないかなどです。

HDDがSATA 2であり、同じパーティションである場合、それはデータ転送の速度にすぎません。

同じHDDに2つのパーティションがある場合、バスとマザーボード間のこのデータ転送は必要ありません。つまり、バッファにロードされます。(その後、hddバッファーサイズによって異なります。)

ただし、コピーされるすべてのファイルについて、システムはそのインデックスをHDDのMFT(マスターファイルテーブル)に保持する必要があるため、多くのファイルをコピーする場合、コピープロセスが遅くなります。また、アンチウイルスがある場合は、コピーされた各ファイルをスキャンします。また、Microsoft検索ファイルのインデックス作成(またはその他のファイルインデックスサービス)を有効にしている場合、結果はさらに悪くなります。

多くのファイルのコピーが遅い理由は他にもたくさんあるに違いないと思いますが、これらが主な理由です。


ウイルス対策プログラムを無効にすると、抽出が10倍速くなりました。その後、ウイルスのファイルをスキャンしました。
fat_mike 2016年

30

ファイルの数が異なるのはなぜですか?

どうやらあなたは「ファイルをコピーする」という「データをコピーする」という側面だけに焦点を合わせているようです。ファイルは単なるデータではありません。これはファイルシステムのエンティティです。ファイルには、名前、属性、および権限があります。ファイルに関するこのすべての追加情報は、「ファイルがコピーされた」ときにデータとともに複製される必要があります。このファイルシステムのオーバーヘッドを実行するには、かなりの量のディスクI / Oがあります。

一般的なファイルシステムで1つのファイルをコピーする手順は、次のようになります。

  • ファイルシステムでソースファイルを見つけます。(a)
  • ソースファイルのディレクトリエントリをディスクから読み取ります。
  • 読み取り権限を確認します。
  • ファイルシステムで宛先ファイルを見つけます。(b)
  • 宛先ディレクトリーの書き込み許可を確認してください。
  • 新しいファイルに対応するために、必要に応じてディレクトリを展開します。(c)
  • ディスク上のディレクトリを更新します。(c1)
  • 空きブロックを見つけて割り当て、テーブルを再度更新します。(d)
  • ファイルデータを読み取り、宛先ファイルにコピーします(「ファイル」をコピーします)。
  • (サイズと時間)を使用して、新しいファイルのディレクトリエントリを更新します。(e)
  • ソースディレクトリエントリのアクセス時間を更新します。(f)

(a)少なくとも、これは現在のディレクトリを検索することを意味します。または、パスがファイルシステムのルートから始まる場合があり、ディレクトリのいくつかのレベルをたどる必要があります。

(b)少なくとも、これは現在のディレクトリを検索することを意味します。または、パスがファイルシステムのルートから始まる場合があり、ディレクトリのいくつかのレベルをたどる必要があります。宛先ファイルがすでに存在する場合は、コピーを続行するか中止するかを決定します。宛先ファイルが存在しない場合は、新しいディレクトリエントリを作成する必要があります。これには、ディレクトリの拡張(つまり、ファイルブロック(別名クラスタ)割り当てオーバーヘッド)が含まれる可能性があります。

(c)のディレクトリが展開されなければならない場合、空きブロックを見つけることによって新たなブロックを割り当てる変更し、新しい割り当てと割り当てテーブルを、及び書きディスクにブロック(複数可)を実施。ほとんどのファイルシステムはアロケーションテーブルの複数のコピーを保持しているため、ディスクへの複数の書き込みを意味します。
(c1)コピー先ディレクトリが見つかったら、ディスクからディレクトリブロックを読み取り、コピーしたファイルの新しいディレクトリエントリで変更してから、ブロックをディスクに書き込みます。

(d)にファイルをコピーするために、フリーブロックを見つけることによって、ブロックを割り当て、変更、新しい割り当てと割り当てテーブルを、及び書きディスクにブロック(複数可)を実施。ほとんどのファイルシステムはアロケーションテーブルの複数のコピーを保持するため、ディスクへの複数の書き込みを意味します。データの整合性を維持するために、ファイルシステムは、ディレクトリとアロケーションテーブルのディスク書き込み操作を合体(遅延およびマージ)しようとせず、新しいファイルが作成されてブロックが割り当てられるとすぐに書き込み操作を実行します。

(e)のデータがcompleleでコピーしたら、更新し、適切なファイルの長さとタイムスタンプを持つコピーされたファイルの新しいディレクトリエントリを、その後、書き込みディスクへのディレクトリブロックを。

(f)に 更新し、新たな「アクセス」のタイムスタンプでソースディレクトリエントリをして、書き込みディスクへのディレクトリブロックを。

したがって、1つのファイルだけでなく、1,000のファイルに対してこのすべてを行うと、ファイルのデータ部分をコピーするだけの時間が長くなるのではないかと質問されていますか?24MBのファイルを1つだけコピーする場合、1,000ファイルのコピー時間と比較する必要があります。

ファイルシステムをバックアップするとき、ディスクまたはパーティション上の別のファイルシステムに個々のファイルをコピーすることはめったに採用されません。より高速な方法は、ソースディレクトリのエントリとファイルの内容を特別なファイル形式で保持する単一のアーカイブファイルを作成して書き込むことです。バックアッププログラムと* nixコマンド「tar」は、そのようなアーカイブファイルを出力できます。( 'tar'はアーカイブファイルを処理するだけであり、アーカイブ+圧縮ユーティリティのような圧縮を使用しないことに注意してください。)バックアップの最速の方法は、(デバイス上のファイルシステムではなく)ブロックデバイスに書き込むことです。無視(より多くのデータとして扱われる)し、ソースデバイスのブロックごとのイメージコピーを実行できます。


-1

ここに概念的な類推があります:

(親愛なるインターネットを思い出してください、アナロジーには欠陥があります。コメントでどのように指摘してもかまいません。)

仮定:

  • 情報を転送 するエージェントが== 子供をサムと呼んで、卵をバスケットから別のバスケットに移動しています。
  • 情報伝達の媒体は == 空気だと思います。ここではあまり重要ではありません。
  • 卵は、...恐竜...、神話的な水中の海の獣、ドラゴンなど、さまざまな種に由来します。 (卵は本当に大きい場合があります)
  • ファイルサイズの== 卵のボリューム。ロビンの卵とドラグゴンの卵を比較してください。

類推:

だから、サムは農場で働いているので、あるバスケットから別のバスケットに卵を移動する必要があります。この農場には、ドラゴンや神話の海獣など、さまざまな産卵動物があります。サムはいくつかの理由でこれが素晴らしいと思っています。(それほど重要ではありませんが、これは私の例えです)
サムは2つのバスケットを持って川のそばでまったりしています。バスケットの1つは卵が入っているバスケットです。かごの中の卵のサイズの範囲

  • 100 bytesかごの中のスペースのように 取り上げるロビンの卵

  • およそサイズのクラーケンの卵2.7Gb

サムは卵を動かし始めなければならないので、彼は卵をつかんで動かし始めました。彼が最初にドラゴンの卵を動かすことに決めたとしましょう。現在、卵は非常に重く、密度が高いため、他のバスケットに物を入れるのに少し時間がかかります。
サムはドラゴンの卵を別のバスケットに入れ、腹を立てます。物事が非常に多くのスペースを占めるため、それは困難でした。その移動は、たった一個の卵のために長くかかりました。

サムはばかです。

サムは最初のバスケットに戻って別の卵をつかみます。彼は自分が本当に大きなものを1つしか持っていないことに気づきました。しかし、10 億個のロビンの卵が残っています。

ご覧のとおり、サムの午後は台無しにされています。彼の自然な傾向は、恐竜の卵は彼が移動しなければならないためにはるかに悪いはずであるということでしょう。私たちが卵とバスケットについて話すとき、それは理にかなっていますが、コンピュータは10億のような数を扱います。

要するに:

いくつかの小さなファイルを移動するのに、いくつかの大きなファイルを移動するよりもはるかに時間がかかる理由についての答えは、それらを移動するアクションに関連するコストに関係しています。小さいファイルが多いほど、そのアクションを実行する必要がある回数が多くなります。これを見る別の方法は、情報密度について話すことです。


-2

FATの読み取り、ヘッドの再配置、ファイルの変更時にファイルを開く-すべて時間がかかる


これはNTFSドライブです
Trindaz

NTFSでは、すべてのファイルデータ(ファイル名、作成日、アクセス許可、および内容)がマスターファイルテーブルにメタデータとして格納されます。マスターファイルテーブル(MFT)には、NTFSボリューム上のすべてのファイル、ディレクトリ、メタファイルに関するメタデータが含まれています。ファイル名、場所、サイズ、および権限が含まれます。ディレクトリエントリは、ファイル名と、マスターファイルテーブル内のファイルを表すレコード番号である「ファイルID」で構成されます。ファイルIDには、古くなった参照を検出するための再利用カウントも含まれています。
レイジーバジャー

それでは、ファイル名、場所、サイズ、権限などのレコードを作成するために多くの追加作業を行わなければならないという事実に基づいて、質問に対するあなたの答えはありますか?そこからすべての余分な作業が行われます。
Trindaz

新規作成および既存の読み取り
Lazy Badger
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.