Dies ist einer der Bereiche, in denen SATA nicht optimal ist. Das Problem liegt auf der Ebene des Verbindungsprotokolls für Speichergeräte vor und hängt daher nicht mit der von Ihnen ausgeführten Software zusammen. Die Verwendung eines anderen Dateikopierers oder eines anderen Betriebssystems wird die Dinge nicht auf magische Weise verbessern, außer dass möglicherweise versucht wird , andere Zeitlimitwerte festzulegen, um die Auswirkungen des Problems zu verringern (was je nach Hardware und Firmware möglich oder nicht möglich ist; siehe unten) ).
Hier gibt es einige wichtige Punkte:
- Wenn das Laufwerk bei SATA nicht mehr reagiert, kann dies das gesamte Speichersystem binden, nicht nur das eine Laufwerk, bei dem Probleme auftreten. Es hat sicherlich das Potenzial, den gesamten Controller zu binden, und da die meisten Consumer-Systeme nur einen einzigen Festplatten-Controller (den auf der Hauptplatine integrierten) haben, bedeutet dies den gesamten Speicher. Es ist sogar noch schlimmer, wenn das Laufwerk auf eine nicht standardmäßige und / oder unerwartete Weise ausfällt, was sicherlich passieren kann, wenn das Laufwerk geringfügig ist. Sie könnten interessiert sein an Wie kann eine einzelne Festplatte in einem Hardware-SATA-RAID-10-Array das gesamte Array zum Stillstand bringen? bei Serverfehler.
- Die meisten Consumer-SATA-Laufwerke haben lange Standard-Timeout-Perioden (in der Größenordnung von Minuten) und viele Consumer-SATA-Laufwerke haben keine konfigurierbare Fehlerbehebungssteuerung . Sogenannte "NAS" -Laufwerke verfügen häufig über konfigurierbare ERC, und High-End-Laufwerke tun dies praktisch immer. Solche Laufwerke haben möglicherweise auch kürzere Standard-Timeouts (7 Sekunden sind ein üblicher Wert). Lange Timeout-Zeiten sind vorteilhaft, wenn das Laufwerk die einzige Kopie der Daten enthält, was auf Consumer-Systemen leider häufig vorkommt. Sie sind ein Nachteil in einer redundanten Konfiguration oder wenn Sie einfach so viel wie möglich vom Laufwerk entfernen möchten, bevor es sich weiter verschlechtert.
- Ein Laufwerk versucht so lange, einen fehlerhaften Sektor zu lesen, bis die Zeitüberschreitungsschwelle erreicht ist oder der Host einen Abbruch signalisiert. Da der SATA-Bus durch das Warten auf den Abschluss des Lesevorgangs überlastet werden kann, kann das Betriebssystem möglicherweise keinen Befehlsabbruch auf Speicherebene signalisieren, und in extremen Fällen reagieren die Laufwerke möglicherweise nicht einmal gut auf ein Zurücksetzen des SATA-Busses in solch einer Situation.
Punkt 1 ist eines der Hauptverkaufsargumente für SAS auf Servern. SAS hat eine wesentlich bessere Fehlerbehandlung als SATA. Punkt 2 ist eine Einschränkung der Laufwerksfirmware, und Punkt 3 wird wirklich nur aufgrund von Punkt 2 zum Problem.
Was also passiert, ist, dass das Betriebssystem einen "Sektoren lesen" -Befehl an die Festplatte ausgibt und die bestimmten Sektoren irgendwie beschädigt sind. Auf diese Weise wechselt die Festplatte in den Wiederholungsmodus, um zu versuchen, die Daten von den Platten zu entfernen, und versucht immer wieder, sie zu lesen, bis die Daten so gut sind, dass die eigene Fehlerkorrektur ( FEC ) der Festplatte die verbleibenden Fehler beheben kann. Wenn Sie Pech haben, ist dies möglicherweise nie der Fall, aber das Laufwerk versucht es noch einige Zeit, bevor es entscheidet, dass dieser Lesevorgang nicht erfolgreich sein wird.
Da das Betriebssystem auf den Lesevorgang wartet, verlangsamt dies zumindest den Kopiervorgang bis zum Durchforsten, und abhängig von der genauen Betriebssystemarchitektur kann das Betriebssystem für die Dauer ruckeln oder sogar einfrieren. Die Festplatte ist zu diesem Zeitpunkt mit dem ursprünglichen Lesen beschäftigt und antwortet erst auf weitere Lesebefehle, wenn die derzeit ausgeführte beendet ist (erfolgreich oder erfolglos), und andere Software kann im Allgemeinen keine bessere Leistung erbringen als das Betriebssystem läuft weiter.
Daher muss alles, was an anderer Stelle einen Lesevorgang auslöst (im Idealfall nur auf dem beschädigten Laufwerk), in der Warteschlange warten, bis das beschädigte Laufwerk den betreffenden Sektor erfolgreich liest oder feststellt, dass er nicht gelesen werden kann. Da SATA nicht optimal mit nicht reagierenden Laufwerken umgeht, kann dies dazu führen, dass nicht nur das Laufwerk, von dem Sie kopieren, seine E / A verzögert. Dies kann sehr leicht dazu führen, dass andere Software langsam wird oder auch nicht mehr reagiert, da diese Software auf die Beendigung einer anderen E / A-Anforderung wartet, selbst wenn das Betriebssystem dies bewältigen kann.
Beachten Sie hierbei auch, dass Festplatten-E / A-Vorgänge auftreten können, obwohl Sie nicht explizit auf Dateien auf der Festplatte zugreifen. Die beiden Hauptursachen hierfür sind ausführbarer Code zum Laden auf Abruf und Swap. Da Swap manchmal auch dann verwendet wird, wenn das System nicht unter Speicherdruck steht und ausführbarer Code auf Abruf auf modernen Systemen und bei modernen ausführbaren Dateiformaten üblich ist, ist eine unbeabsichtigte Aktivität beim Lesen von Datenträgern während der normalen Verwendung eine sehr reale Möglichkeit.
Wie in einem Kommentar zu der Frage von Matteo Italia ausgeführt , besteht eine mildernde Strategie darin, eine andere Speicherverbindung zu verwenden. Dies ist eine komplizierte Art zu sagen, die Festplatte in ein USB-Gehäuse zu stecken. Durch die Zusammenfassung über das USB-Massenspeicherprotokoll wird der problematische SATA-Teil vom Rest Ihres Systems isoliert. Dies bedeutet, dass theoretisch nur die E / A auf dieser bestimmten Festplatte von E / A-Problemen auf dieser Festplatte betroffen sein sollten.
Abgesehen davon wird SATA (insbesondere SATA ohne ERC auf Laufwerksebene) häufig von RAID abgeraten (insbesondere RAID-Ebenen mit Redundanz, die unter den Standardstufen alle außer RAID 0 sind ). Die langen Timeout-Zeiten und die schlechte Fehlerbehandlung können leicht dazu führen, dass ein ganzes Gerät für einen einzelnen fehlerhaften Sektor aus dem Array geworfen wird, was der RAID-Controller problemlos verarbeiten kann, wenn Redundanz vorhanden ist und der Speichercontroller einfach weiß, dass dies das Problem ist. SAS wurde für große Speicher-Arrays entwickelt, und daher mit der Erwartung, dass es gelegentlich Probleme auf verschiedenen Laufwerken geben wird, was dazu führte, dass der Fall eines einzelnen problematischen Laufwerks oder einer E / A-Anforderung ordnungsgemäß behandelt wurdeauch wenn das Laufwerk nicht. Problematische Festplatten sind in Konsumentensystemen nicht sehr verbreitet, nur weil auf diesen in der Regel nicht viele Festplatten installiert sind und auf den praktisch nie installierten Festplatten Redundanzen auftreten. Da SATA PATA / IDE und nicht SCSI ersetzen sollte (letzteres ist die angestrebte Nische von SAS), wurden wahrscheinlich die Fehlerbehandlungsfunktionen und -anforderungen (oder -garantien) für den beabsichtigten Anwendungsfall als angemessen erachtet.