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


18

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

だから私の質問は、ファイルが同じSSDのあるドライブから別のドライブに移動されたときに何が起こるか、バイトがコピーされて元のファイルが削除されるか、テーブルが更新されてSSDのスラッシングが少なくなるのですか?

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

各パーティションには、それ自体へのドライブの独自の物理領域があります

そして

ハードドライブをパーティション分割すると、実際には各パーティションの物理領域が指定されます。[およびコメント:] SSDはまだハードドライブであり、ディスクがありません。

私の知る限り、それは間違っています。こちらをご覧ください

それで、SSDについてもっとよく知っている人は、間違いにも関わらず評価が正しいかどうかを教えてください。


14
受け入れられている答えは正しいです。各パーティションには独自の独立したファイルシステムがあります。各ファイルシステムは、割り当てられたブロックをどのように利用するかを自ら決定します。SSDのファームウェア、ファイルシステム、およびLinuxのようなユーザーランドツールを提案することを行うにはmv、抽象化レイヤーを大幅に混在させて協力する必要があります。
カミルマシオロウスキ

2
@Kamil:OSがそれを実装していれば、mv実際に現在よりも必要なことは少ないと思います。(つまり、OSは、現在のように失敗するのではなく、ファイルシステム間のrename()が成功することを確認する必要があるだけです。)
grawity

16
「[SSD / HDD]の2つのドライブ」-1つのSSD / HDDで2つのファイルシステムまたは2つのパーティションを言うつもりだと思います。両方の頭字語の最後の「D」は「ドライブ」であることに注意してください。つまり、1ドライブに2ドライブと言っているので、意味がありません。
JoL

1
たとえば、[ディスクの管理]ダイアログをご覧ください。Change Drive Letter and Pathsパーティション/ボリュームを参照するときに表示されます。
ispiro

4
@ispiroこれはWindows上ですか?ユーザーを混乱させる恐ろしい方法のようです。ドライブパーティションが実装される前に「ドライブレター」という用語を思いついただけで、ドライブパーティションをスタンドアロンの「ドライブ」として表すことになりました。だから今、あなたは... 1つのハードウェア・ドライブのパーティションを表す複数のWindows「ドライブ」を持つことができます
JOL

回答:


38

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

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

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

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

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

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

(つまり、理論的には、OSはディスク自体にある領域から別の領域にデータを複製するように要求できる場合があります(例:「copy LBA#1234 to#567890」)。もちろん、これはパーティションの境界を完全にバイパスします。これにより、たとえばSSDの「フラッシュ変換レイヤー」を利用できます。


私はあなたが正しいと思います。しかし、そこにいることに気づく別のオプション。ドライブは、ドライブ#1のセクター#001がドライブ#2のセクター#123に切り替わることを決定できます(つまり、ドライブ#1のセクター#001は、以前はセクター#123と呼ばれていた物理データを参照します)ドライブ#2)これにより、バイトをコピーせずにファイルを移動します。したがって、TBのデータを移動することは、原則としてほぼ瞬時に実行できます。
ispiro

15
ドライブはファイルまたはファイルシステムを認識しないため、そのような決定を単独で行うことはできません。これを行うには、OSからリクエストを受信する必要があります。前の段落ですでに述べたように、確かに技術的には可能ですが、オペレーティングシステムは通常、ファイルシステム間コピーに対してこれを気にしません。また、同じファイルシステムコピーに対してもそれらを行うことを疑います(より一般的にはFSレベルで行われます)。
grawity

6
特定のSSDは、ブロックレベルの重複排除を実装しています。たとえば、Sandforce(en.wikipedia.org/wiki/SandForce#Technology)はこれを実装した最初の1つであり、そのコントローラーは複数のSSDメーカーの製品に採用されました。Sandforceコントローラーの「書き込み増幅」係数は1未満でした。つまり、OSがドライブに送信したデータよりも少ないデータをフラッシュストレージに書き込みました。比較として、SSDには一般に1より大きい書き込みアンプ係数があります。
hojusaram

2
@hojusaram:確かに、それはまだ事後重複排除です–フラッシュ書き込みは減りますが、データはまだ読み取られ、ディスクからOSメモリにコピーされ、その後ディスクコントローラーに戻されます。ispiroが意味することは、OSがディスクに独自に実行するように明示的に要求できる「reflink」または「copy on write」(cp --reflinkなど)に相当するSSDです。
grawity

1
パーティションの境界はもはや固定されておらず、ユーザーの介入なしに変更可能であるため、APFSがこれをどのように扱うかを発見することは興味深いでしょう。
鉄人

9

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

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

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

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

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

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

さらに、2つのファイルシステムがディスク上にファイルデータを同じ方法で保存しない場合があります。つまり、実用的であっても、セクターのスワップは機能しません。NTFSなど、まったく同じファイルシステムタイプであっても、一方は暗号化または圧縮を使用し、もう一方は使用しないか、または両方がデータを暗号化しますが、キーは異なります。ファイル内のデータがディスクに保存されているものとまったく同じである必要はありません。保存する必要があるのは、データの可逆変換だけです。これにより、ファイルシステムは、ディスク上のデータ。したがって、両方のファイルシステムがまったく同じ変換を使用していない限り、単にセクターを交換してもファイルデータを転送するという目標は達成されません。

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

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

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


1
最後の段落は、ファイルシステムが同じでなければならないことを意味していませんか?SSDは、どのファイルシステムが一番上で実行されているかを知らないと思います。たとえば、1つのパーティションが圧縮を使用し、もう1つのパーティションが圧縮を使用しない場合、SSDによるコピーによりファイルが破損する可能性があります。
blablabla

@blablabla最後の段落では、両方のファイルシステムが実際のファイルの内容を変更せずにディスクに保存することを想定しています。私はそれを今明示した。
オールドプロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.