web-dev-qa-db-ja.com

1つのSSD上の2つのドライブ間でファイルを移動する - それはコピーされますか?

1つのドライブ内でファイルを移動しても、ファイルはコピーおよび削除されません。ファイルを参照するテーブルは更新されたばかりです。そして私の知る限りでは、HDDの2つのドライブには当てはまりません。しかし、SSDは異なり、各ドライブ専用の物理スペースはありません。 ( ソース

だから私の質問は、ファイルが同じSSD上のあるドライブから別のドライブに移動された場合、バイトがコピーされ元のものが削除されたか、それとも一部のテーブルが更新され、

ここですでに重複した質問 があります 。しかし、両方の答えが主張しています:

各パーティションはそれ自身のドライブのそれ自身の物理的な領域を持ちます

そして

ハードドライブをパーティション分割すると、実際には各パーティションの物理領域が指定されます。 [そしてコメントで] SSDはまだハードドライブです、それはただディスクを持っていません。

私の知る限り、それは間違っています。ここで を参照してください

それで、SSDについてもっとよく知っている人が彼らの間違いにもかかわらず彼らが彼らの評価で正しいかどうか私に言ってくれますか?

18
ispiro

私の知る限り、それは間違っている

引用された説明は、半分正しく、半分間違っています。しかし、それはHDDにとっても間違っています。

ドライブのパーティション分割は、各パーティションのlogicalリージョンを指定します。 OSは物理的な場所をまったく気にしません。ドライブに「読み取り 論理ブロック #31415926」を要求するだけで、ドライブ自体がデータの場所を決定します。これは、磁気メモリとフラッシュメモリで同じように機能します。

実際には、過去20〜25年のHDDと同じと同じです。初期のオペレーティングシステムは物理的なシリンダー/ヘッド/セクターの場所を使用していましたが、現在ではなくなっています。 Platter LBA#1234がどこに保管されているか正確にはわかりません。 HDDは不良な物理セクターも自動的に再マッピングするため、SSDと同様に、まったく異なる物理領域から同じLBAを突然読み取ることができます。

そのため、HDDとSSDの両方で、OSにはデータを読み書きするためのLBAの範囲(0〜999999など)があります。パーティション分割の目的は、サブ範囲を割り当てることです。パーティションAは10〜499999、パーティションBは500000〜999999を取得します。各パーティションには独立したファイルシステムがあり、各パーティション内のファイルシステムは外部のデータを参照できません–パーティションの境界を越えることはできません。 (たとえば、パーティションAには、データがセクター#600000に保持されるファイルがありません)。

その結果、一方から他方に移動するすべてのファイルを完全にコピーする必要があります。

(つまり、理論的には、OSはaskディスク自体をある領域から別の領域に複製することができます(たとえば、「copy LBA#1234 to#567890」)、それをメインメモリにコピーしてから元に戻す必要があり、もちろんこれはパーティションの境界を完全にバイパスします。できません。)

38
grawity

データがソリッドステートディスクに書き込まれるとどうなるかは、 いくつかの記事 に相当する(良い要約 はこちら )、これは非常に複雑で、基盤となるテクノロジに依存しているためです。簡単に言うと、SSDは一般にゼロビットをメモリに書き込むことができません。代わりに、メモリの全セクションを消去(消去)する必要があります。その後、データを書き込むだけでデータを保存できます。通常、最近では512バイトのブロックを書き込みますが、4096である8ブロックのページを消去します。サイクルはメモリの物理的な消耗を引き起こし、メモリは最終的に消耗します。SSDは磁気HDDの回転とは大きく異なります。

それを除けば、SATAドライブ(およびAFAIK SASドライブ)は、あるセクタから別のセクタにデータをコピーするためのネイティブコマンドを実装していません。 (あるいは、少なくともSATAやSASスペックに何も必要としないので、OSはそのようなコマンドが利用可能であることを頼りにすることはできません。)パーティション全体のファイルコピーは1つのドライブセクタからデータを読み込むことを含みます。ホストメモリに書き込んでから、別のセクタのドライブに書き戻します。

これは、OSに関する限り、ドライブは番号付きの論理セクタのセットであり、実行できるのはセクタからの読み取りとセクタへの書き込みだけであるためです。 OSはドライブにセクタの再マッピングを指示できません。

さらに、ファイルシステム(HFS +、NTFS、ext3など)は、一連の論理ブロックに順序を課す一連のデータ構造です。これらのデータ構造は、 "ファイル"、 "ファイル名"、 "ディレクトリ"、 "許可"などを実装しています。そのため、ファイルをあるディレクトリから別のディレクトリに移動しても、コピーされません。ファイルがどのディレクトリにあるかを示すファイルシステムデータのみが更新されます。

パーティションの概念は、それが単一ファイルシステムによって要求されるドライブ上の論理セクタのセットであるということです。その当然の結果は、ファイルシステムがそのパーティションの外側のセクタにアクセスできないことです。これは大部分が安全機能ですが、ファイルシステムのデータ構造がファイルシステムの所有権の下でドライブのすべてのセクターを考慮して構築されていることからも生じます。セクターの追加や削除は重要ではありません。それらの構造に。これが、パーティションのサイズを調整するために特別なルーチンを実行しなければならない理由と、ファイルシステムが連続した一連のセクタでの実行を要求する理由です。

したがって、あるファイルシステムから別のファイルシステムにセクタを転送するだけでファイルコピーを実装することは非現実的で危険です。回転する磁気ドライブでは、パフォーマンスが悪くなる可能性もあります。ドライブは不良セクタを除外しますが、一般に、連続した番号の読み取りおよび書き込み速度が最適化されるようにセクタを物理的に配置するように調整するためです。セクター.

さらに、2つのファイルシステムが同じ方法でファイルデータをディスクに格納できない可能性があります。つまり、たとえ実際的であっても、セクタの交換は機能しません。 NTFSなど、まったく同じファイルシステムの種類であっても、一方では暗号化または圧縮を使用し、もう一方では使用しない、または両方でデータを暗号化することができますが、異なるキーを使用できます。ファイル内のデータが正確にディスクに格納されているものである必要はありません。格納する必要があるのはデータの可逆変換だけであり、ファイルシステムは次のようにしてファイルのデータを取得できます。ディスク上のデータそのため、両方のファイルシステムがまったく同じ変換を使用していない限り、単にセクタを交換してもファイルデータを転送するという目的は達成されません。

これらすべての理由から、OSライターとファイルシステムライターがSSDのパーティション間の移動を最適化する機能を実装するのは、あまりにも多くの手間がかかるためです。したがって、パーティション間の移動はすべて読み取りと書き込みになります。

SSDの内部では、少し異なる話です。 OSはデータをある場所から別の場所にコピーしていることをドライブに伝えませんでしたが、SSDへの書き込みは非常に高価で(そして複雑で)、SSDコントローラは書き込みを最小限に抑えるために多くの作業を行います。 SSDの中には、ストレージに書き込まれるセクターが既に保存されているセクターと一致することを検出し、その物理メモリーを現在のドライブレベルでコピーするのではなく2つの異なる論理セクターにマッピングしているとマークするものもあります。 OSはできませんでした。

しかし、それを頼りにしないでください。

9
Old Pro