it-swarm.com.de

Verschieben einer Datei zwischen zwei Laufwerken auf einer SSD - wird sie kopiert?

Beim Verschieben einer Datei innerhalb eines Laufwerks wird die Datei nicht kopiert und gelöscht. Die Tabelle, die sich auf die Dateien bezieht, wird gerade aktualisiert. Und soweit ich weiß, ist das bei 2 Festplatten auf einer Festplatte nicht der Fall. SSDs unterscheiden sich jedoch, da für jedes Laufwerk kein physischer Speicherplatz reserviert ist. ( source )

Meine Frage ist also, was passiert, wenn eine Datei von einem Laufwerk auf ein anderes auf derselben SSD verschoben wird, die Bytes kopiert und das Original gelöscht werden oder eine Tabelle aktualisiert wird, wodurch die SSD weniger überlastet wird?

Es gibt bereits eine doppelte Frage hier . Beide Antworten behaupten jedoch:

jede Partition hat einen eigenen physischen Bereich des Laufwerks für sich

und

Durch das Partitionieren einer Festplatte werden tatsächlich physische Regionen für jede Partition festgelegt. [und in einem Kommentar:] SSD ist immer noch eine Festplatte, es hat nur keine Festplatte.

Soweit ich weiß, ist das falsch. Siehe hier .

Kann mir jemand, der mehr über SSDs weiß, mitteilen, ob seine Einschätzung trotz des Fehlers korrekt ist?

18
ispiro

Soweit ich weiß, ist das falsch

Die zitierte Beschreibung ist halb richtig, halb falsch. Aber es ist auch halb falsch für Festplatten.

Das Partitionieren eines Laufwerks kennzeichnet logisch Regionen für jede Partition. Das Betriebssystem kümmert sich überhaupt nicht um physische Speicherorte - es fordert das Laufwerk lediglich auf, "read logical block # 31415926" zu lesen, und das Laufwerk entscheidet selbst, wo sich die Daten befinden. Dies funktioniert genauso für Magnet- und Flash-Speicher.

Tatsächlich ist es dasselbe wie bei Festplatten der letzten 20 bis 25 Jahre: Obwohl in früheren Betriebssystemen physische Speicherorte für Zylinder/Kopf/Sektor verwendet wurden, ist dies längst vorbei. Sie wissen nicht genau, wo sich der Platter LBA # 1234 befindet. Festplatten ordnen sogar fehlerhafte physische Sektoren automatisch neu zu, sodass dieselbe LBA plötzlich aus einem völlig anderen physischen Bereich gelesen werden kann - genau wie bei SSDs.

Sowohl bei Festplatten als auch bei SSDs verfügt das Betriebssystem lediglich über eine Reihe von LBAs (z. B. 0–999999), von denen Daten gelesen und geschrieben werden können. Der Zweck der Partitionierung besteht darin, Unterbereiche darin zuzuweisen - z. Partition A erhält 10–499999, Partition B erhält 500000–999999. Jede Partition hat ein unabhängiges Dateisystem und Dateisysteme in jeder Partition können nicht auf Daten außerhalb verweisen - sie können die Partitionsgrenzen nicht überschreiten. (Beispielsweise hat Partition A kann nicht eine Datei, deren Daten im Sektor # 600000 gespeichert sind.)

Infolgedessen müssen alle Dateien, die von einer zur anderen verschoben werden, vollständig kopiert werden.

(Theoretisch ist das Betriebssystem jedoch möglicherweise in der Lage, die Festplatte selbst zu fragen, um Daten von einem Bereich in einen anderen zu kopieren (z. B. "LBA # 1234 auf # 567890 kopieren"), ohne sie auf das zu kopieren Hauptspeicher und dann zurück, und dies würde natürlich die Partitionsgrenzen vollständig umgehen. Dies könnte zum Beispiel die "Flash-Übersetzungsschicht" der SSD nutzen. Aber in der Praxis wird dies, soweit ich weiß, nicht getan.)

38
grawity

Was passiert, wenn Daten auf eine Solid State Disk geschrieben werden, verdient mehrere Artikel (gute Zusammenfassung hier ), weil es sehr kompliziert ist und von der zugrunde liegenden Technologie abhängt. Die kurze Geschichte ist, dass SSDs im Allgemeinen keine Null-Bits in den Speicher schreiben können. Stattdessen müssen sie einen ganzen Abschnitt des Speichers auf Null setzen (löschen), und anschließend können sie Daten speichern, indem sie nur die Einsen darauf schreiben. Typischerweise schreiben sie heutzutage Blöcke von 512 Bytes, löschen aber eine Seite von 8 Blöcken, was 4096 ist. Dies und die Tatsache, dass jeder Schreib-/Löschzyklus eine gewisse physische Abnutzung des Speichers verursacht und der Speicher nutzt sich mit der Zeit ab, wodurch sich SSDs stark von sich drehenden magnetischen Festplatten unterscheiden.

Abgesehen davon implementieren SATA-Laufwerke (und AFAIK SAS-Laufwerke) keinen nativen Befehl zum Kopieren von Daten von einem Sektor in einen anderen. (Zumindest in der SATA- oder SAS -Spezifikation ist dies nicht erforderlich, sodass das Betriebssystem nicht damit rechnen kann, dass ein solcher Befehl verfügbar ist.) Bei einer Dateikopie über eine Partition werden also die Daten von einem Laufwerkssektor gelesen in den Host-Speicher und dann wieder auf das Laufwerk in einem anderen Sektor schreiben.

Dies liegt daran, dass für das Betriebssystem ein Laufwerk aus einer Reihe von nummerierten logischen Sektoren besteht und nur aus Sektoren gelesen und in Sektoren geschrieben werden kann. Das Betriebssystem kann das Laufwerk nicht anweisen, Sektoren neu zuzuordnen.

Darüber hinaus ist das Dateisystem (HFS +, NTFS, ext3 usw.) eine Menge von Datenstrukturen, die einer Menge von logischen Blöcken eine Reihenfolge auferlegen. Diese Datenstrukturen implementieren "Dateien", "Dateinamen", "Verzeichnisse", "Berechtigungen" usw. Wenn Sie also eine Datei von einem Verzeichnis in ein anderes verschieben, wird sie nicht kopiert. Nur die Dateisystemdaten, die angeben, in welchem ​​Verzeichnis sich die Datei befindet, werden aktualisiert.

Das Konzept einer Partition ist, dass es sich um eine Gruppe logischer Sektoren auf dem Laufwerk handelt, die von einem einzelnen Dateisystem beansprucht werden. Dies hat zur Folge, dass ein Dateisystem möglicherweise nicht auf Sektoren außerhalb seiner Partition zugreift. Dies ist größtenteils eine Sicherheitsfunktion, beruht jedoch auch auf der Tatsache, dass die Datenstrukturen des Dateisystems so aufgebaut sind, dass jeder Sektor des Laufwerks im Besitz des Dateisystems ist, und dass das Hinzufügen oder Entfernen von Sektoren nicht trivial ist zu diesen Strukturen. Aus diesem Grund müssen Sie spezielle Routinen ausführen, um die Größe einer Partition anzupassen, und auch, warum Dateisysteme darauf bestehen, auf einer zusammenhängenden Gruppe von Sektoren ausgeführt zu werden.

Daher ist es unpraktisch und gefährlich, eine Dateikopie so zu implementieren, dass nur Sektoren von einem Dateisystem in ein anderes übertragen werden. Auf einem sich drehenden Magnetlaufwerk wäre dies auch ein Albtraum für die Leistung, da das Laufwerk zwar Ausnahmen für fehlerhafte Sektoren macht, die Sektoren jedoch im Allgemeinen physisch so angeordnet sind, dass die Lese- und Schreibgeschwindigkeit von fortlaufend nummerierten Sektoren optimiert wird Branchen.

Darüber hinaus können in 2 Dateisystemen Dateidaten möglicherweise nicht auf dieselbe Weise auf der Festplatte gespeichert werden, sodass das Austauschen von Sektoren auch dann nicht funktioniert, wenn dies praktisch wäre. Selbst wenn es sich genau um dieselben Dateisystemtypen handelt, beispielsweise NTFS, verwendet einer möglicherweise Verschlüsselung oder Komprimierung und der andere nicht, oder beide verschlüsseln möglicherweise die Daten, jedoch mit unterschiedlichen Schlüsseln. Es ist nicht erforderlich, dass die Daten in der Datei genau das sind, was auf der Festplatte gespeichert ist. Alles, was gespeichert werden muss, ist eine umkehrbare Transformation der Daten, sodass das Dateisystem die Daten der Datei abrufen kann, indem es etwas damit macht die Daten auf der Festplatte. Wenn also nicht beide Dateisysteme genau die gleiche Transformation verwenden, kann durch einfaches Austauschen von Sektoren das Ziel der Übertragung der Dateidaten nicht erreicht werden.

Aus all diesen Gründen ist es für die Betriebssystem- und Dateisystemschreiber zu viel Arbeit und zu wenig Gewinn, eine Funktion zu implementieren, die das Verschieben zwischen Partitionen für SSDs optimiert. Jede partitionsübergreifende Verschiebung ist also ein Lesen und ein Schreiben.

Bei der SSD sieht die Geschichte etwas anders aus. Obwohl das Betriebssystem dem Laufwerk nicht mitteilte, dass Daten von einem Ort zum anderen kopiert werden, sind Schreibvorgänge auf SSDs so teuer (und kompliziert), dass SSD-Controller viel Arbeit leisten, um Schreibvorgänge zu minimieren. Einige SSDs versuchen zu erkennen, wann ein Sektor, der in den Speicher geschrieben wird, mit einem bereits gespeicherten Sektor übereinstimmt, und markieren diesen physischen Teil des Speichers so, dass er nun zwei verschiedenen logischen Sektoren zugeordnet ist, anstatt ihn zu kopieren Betriebssystem konnte nicht.

Aber rechnen Sie nicht damit.

9
Old Pro