Was passiert, wenn Daten auf eine Solid State Disk geschrieben werden, verdient mehrere Artikel (gute Zusammenfassung hier ), da 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 schließlich abnutzt, machen SSDs sehr unterschiedlich als sich drehende magnetische Festplatten.
Abgesehen davon implementieren SATA-Laufwerke (und AFAIK SAS-Laufwerke) keinen nativen Befehl zum Kopieren von Daten von einem Sektor in einen anderen. (Zumindest nichts in der SATA- oder SAS-Spezifikation erfordert dies, 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 in den Hostspeicher gelesen und anschließend geschrieben es wieder auf die Fahrt in einem anderen Sektor.
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 besteht das Dateisystem (HFS +, NTFS, ext3 usw.) aus einer Reihe von Datenstrukturen, die einer Reihe 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 besteht darin, 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 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 ist das eine etwas andere Geschichte. 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.
mv
müssten Dateisysteme und Userland-Tools wie Linux zusammenarbeiten und Abstraktionsschichten stark mischen.