Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie funktioniert "DeleteFile" intern
Debiii
myCSharp.de - Member



Dabei seit:
Beiträge: 21
Herkunft: Deutschland

Themenstarter:

Wie funktioniert "DeleteFile" intern

beantworten | zitieren | melden

Hi,

wie schon die Überschrift sagt, würde ich ganz gerne aus Neugier verstehen, wie Windows intern eine Datei löscht.

Ich habe versucht mir es klar zu machen, z.b das es bit für bit der Datei auf 0 setzt, das bewirkt aber nur das die File am Ende 0 Bytes hat, die File aber als solches noch da ist.

Ich würde gerne verstehen, wie Windows es intern macht.

Wäre wie immer über Tipps und Ratschläge sehr dankbar :)

Mfg

Debiii
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16112

beantworten | zitieren | melden

Die Datei wird nur aus dem Inhaltsverzeichnis (MFT) der NTFS Tabelle geloescht; die Datei selbst aber nicht angefasst.
Fuer genauere Details musst Du Dir das Dateisystem anschauen, mit dem Du arbeitest bzw. arbeiten willst.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Debiii,
Zitat
Die Datei wird nur aus dem Inhaltsverzeichnis (MFT) der NTFS Tabelle geloescht;
und selbst das nicht vollständig. In vielen Fällen können Undelete-Programme den Inhalt und den Dateinahmen (fast) vollständig rekonstruieren. Zumindest, wenn in der Zwischenzeit die freigegebenen Blöcke nicht überschrieben wurden.

Bei mechanischen Festplatten werden die Blöcke, die freigegeben wurden, einfach in die "Liste" der freien Blöcke eingetragen und können ab da benutzt werden, wenn neue Dateien auf der Platte gespeichert werden. Bis zu diesem Zeitpunkt bleiben sie in der Regel unverändert.

Man kann aber auf solchen Platten die Datei vor dem Löschen überschreiben, siehe dazu Sicheres Löschen: Einmal überschreiben genügt.

Einer SSD wird dagegen von aktuellen Betriebssystemen die freigegebenen Blöcke explizit mitgeteilt, damit die SSD die Möglichkeit hat, diese Blöcke zu löschen/nullen. Das geschieht aber nicht aus Gründen der Datensicherheit, sondern weil eine SSD einen Block nur neu schreiben kann, wenn er vorher genullt wurde. Wenn die SSD schon beim Löschen der Datei weiß, welche Blöcke genullt werden müssen, kann sie diese Aktion durchführen, wenn Zeit dafür ist und nicht erst später, wenn die Blöcke tatsächlich überschrieben werden sollen. Das erhöht die mittlere Schreibgeschwindigkeit einer SSD.

Die Datei vor dem Löschen selber zu überschreiben nützt bei SSDs aber auch nichts, weil aus ähnlichen Gründen beim Neuschreiben einer Datei bevorzugt genullte (und frischere) Blöcke verwendet werden und nicht (unbedingt) die bisher von der Datei belegten Blöcke.

In einem anderen Thread schrieb Abt zum Thema sicheres Löschen von Dateien außerdem:
Zitat von Abt
Das klassische Shredding, das zB via SDELETE durchgefuehrt werden kann, funktioniert bei SSDs nicht.
Hier hat man durch das Random Access Behavior von MlC und SLC keine Chance eine Datei korrekt zu ueberschreiben. Es ist sogar fuer die Lebensdauer kontraproduktiv.
Ich kenne auch keine SSD Firmware, die Secure Delete unterstuetzen; bei HDDs ist das Feature jedoch ueblich.

Grundsätzlich wird das Thema (sicheres) Löschen von Dateien sowie Undelete von Dateien im Netz ausführlich behandelt. Alles was du sonst noch wissen willst, kannst und solltest du dir selber heraussuchen.

herbivore
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16112

beantworten | zitieren | melden

Zitat von herbivore
In vielen Fällen können Undelete-Programme den Inhalt und den Dateinahmen (fast) vollständig rekonstruieren.
Korrekt. Das liegt daran, dass die Datei nur aus der Tabelle entfernt wird; aber auf dem Speichermedium selbst nicht berührt wird.
Wie diese Entfernung aus der Tabelle aussieht; das kommt auf das Dateisystem an. Entweder der Eintrag wird entfernt, oder er wird als gelöscht markiert (wobei der Dateiname in der Tabelle selbst erhalten bleibt, bis überschrieben wird).
Daher kann eine Rekonstruktion stattfinden.

Die Mischung von HDD und SSD in Deinem Beitrag kann aber zur Verwirrung führen.
Zudem ist der Satz
Zitat
Einer SSD wird dagegen von aktuellen Betriebssystemen die freigegebenen Blöcke explizit mitgeteilt, damit die SSD die Möglichkeit hat, diese Blöcke zu löschen/nullen.
falsch.
Für das Betriebssystem ist es relativ irrelevant, ob eine HDD oder SSD darunter liegt. Es wird auch keine Sonderbehandlung beim Löschen verwendet; sondern der Controller übernimmt diese Logik.
Eine SSD muss vorher nichts nullen. Das wäre auch sehr kontraproduktiv für das Leben einer Speicherzelle einer SSD.
Es gibt sogar SSD Firmwares die kontrollieren, ob der derzeitige Wert einer freien bzw. freigewordenen Speicherzelle (1 oder 0) bereits der Wert drin steht, der eigentlich geschrieben werden soll.
Das Lesen stellt nämlich keine Belastung für die Speicherzelle dar; das Schreiben jedoch schon.
Und die Überprüfung sind bei neuen SSDs so dermaßen schnell, dass es sich in der Bandbreite kaum auswirkt.

Und selbst unter SSDs gibt es Unterschiede, ob SLC- oder MLC-Chips verwendet werden.
Bei HDDs gibt es in der Regel nur einen Controller in der Fastplatte, der die Verwaltung der Dateiinhalte übernimmt. So ist es bei HDDs sehr performant, wenn die Dateien nicht fragmentiert sondern am Stück auf der Platte liegen.
Bei SSDs hingegen hast Du mehrere Controller. Hier ist eine Fragmentierung oft schneller (vor allem bei SLC-Chips), sodass mehrere Controller die Dateiinhalte lesen können => höhere Bandbreite.
Man nennt dieses Prinzip "Scattershot Fashion".
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Abt,
Zitat
Für das Betriebssystem ist es relativ irrelevant, ob eine HDD oder SSD darunter liegt.
moderne Betriebssysteme machen durchaus einen Unterschied und behandeln beide Plattenarten in verschiedener Hinsicht unterschiedlich. Schon bei der Installation wird die Festplattenart erkannt und die Voreinstellungen entsprechen gesetzt. So steht es auch in Wikipedia in Solid-State-Drive: Alle gängigen Betriebssysteme (z. B. Windows ab Version 7) erkennen, wenn eine SSD eingebaut ist, und deaktivieren alle spezifischen HDD-Merkmale automatisch.
Zitat
Eine SSD muss vorher nichts nullen.
Auch das stimmt nicht. Zwar wird nicht zwangsläufig jeder gemeldete Block genullt, das entscheidet in der Tat der Controller, aber wenn aus einer 1 aus eine 0 werden soll, muss eine explizite Löschoperation erfolgen. Wikipedia ebenda: Flashspeicher hingegen müssen die noch gefüllten Flashzellen erst leeren, um sie im zweiten Durchgang mit der neuen Datei zu beschreiben.
Zitat
Das wäre auch sehr kontraproduktiv für das Leben einer Speicherzelle einer SSD.
Korrekt ist, dass die Lebensdauer dadurch negativ beeinflusst wird. Aber im Gegenzug steigt die Schreib-Performance. Andersherum analog. Es hat also beides seine Vor- und Nachteile. Es ist die Entscheidung des Controllers, welchen Nutzen er zu welchen Kosten erkaufen will. Wiederum Wikipedia: Um dieser Situation abzuhelfen, können SSDs ab Mitte 2009 die freigestellten Bereiche schon vor einer neuerlichen Verwendung löschen.
Zitat
Und selbst unter SSDs gibt es Unterschiede, ob SLC- oder MLC-Chips verwendet werden.
Korrekt, ich wollte die Diskussion allerdings nicht unnötig verkomplizieren, weil beide Arten von Chips hinsichtlich des hier besprochenen Punkte sich ausreichend ähnlich verhalten, nur dass die Effekte unterschiedlich stark ausgeprägt sind. Zum Beispiel erlauben SLC-Chips ein häufigeres Löschen/Überschreiben, leiden dadurch also nicht so stark wie (die vermutlich wesentlich verbreiteteren) MLC Zellen. Aber sie leiden eben auch. Nochmal Wikipedia: SLC ist [im Vergleich] zu MLC 10mal so haltbar. Faktor 10 ist nicht schlecht, aber ändert die Situation nicht grundlegend.
Zitat
Hier ist eine Fragmentierung oft schneller
Die Fragmentierung stört bei einer SSD selbst bei einem Controller/Kanal schon deshalb nicht so sehr, weil die Zugriffszeiten (gemessen in ms oder reziprok als IOPS, im Gegensatz zu der Dauerübertragungsrate) bei SSD viel niedriger sind als bei mechanischen Platten, so dass eine SSD viel mehr kleine verstreute Blöcke pro Sekunde lesen kann als eine mechanische Platte. Wikipedia: Eine Defragmentierung ist aufgrund der geringen Lesezugriffszeiten [bei SSDs] nicht nötig.

Natürlich kann man in jedes Thema beliebig tief eintauchen, aber ich habe mich absichtlich in meiner ersten (und auch in dieser) Antwort beschränkt, weil es zum einen um die (zugegeben vereinfacht dargestellten) Grundprinzipien ging und man wie gesagt alle Details im Netz findet.

herbivore

PS: Nachdem ich die Antwort fertig geschrieben hatte, habe ich zur Sicherheit noch Wikipedia bemüht, um meine Aussagen zu belegen. Ich denke und hoffe, damit könnten wir das Offtopic als geklärt ansehen.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16112

beantworten | zitieren | melden

Eigentlich hätte ich erwartet, dass man Dir das nicht sagen muss: aber nicht alles was in Wikipedia steht ist korrekt, im Umfang ausreichend oder auf aktuellem Stand.

Das Nullen machen nur noch alte SSDs oder SSDs für den High Performance-Bereich wie in IO-lastigen NAS-Elementen.
Im Consumer-Bereich machen dies moderne SSDs nicht mehr; eben um die Lebenszeit zu verlängern.

Wie der Rest funktioniert habe ich bereits erwähnt. Ob Du das nun glaubst oder nicht is mir wurst - egal wie viele (veraltete und vor allem deutsche) Wikipedia-Artikel Du zitierst.

Allein der Satz
Zitat
Eine Defragmentierung ist aufgrund der geringen Lesezugriffszeiten [bei SSDs] nicht nötig
zeigt doch, auf was diese Artikel gerichtet sind: laien oder Schüler der 6. Klasse.
Defragmentieren einer SSD kann diese im dümmsten Fall sogar zerstören, weshalb moderne Betriebssysteme hier auch eine Warnung ausgeben (das ist übrigens tatsächlich eine Anpassung am Betriebssystem!).

Aus meiner Ansicht nach war Dein Beitrag dahingehend nicht wirklich hilfreich, da ich ohnehin gesagt hatte, dass er sich mit dem jeweiligen Dateisystem auseinander setzen soll ;-)
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Abt,

Wikipedia ist sicher nicht ohne Fehler, das habe ich nie behauptet oder suggeriert, aber die gleichen Aussagen finden sich auch an anderen verlässlichen Quellen. Daher besteht an ihrer grundsätzlichen Richtigkeit kein Zweifel. Gestützt auf diese Quellen hatte ich meine Antwort verfasst. Die Belege in Wikipedia habe ich wie gesagt nachträglich hinzugefügt.

Es ist ungefähr zwei Jahre her, dass ich mich intensiv mit SSDs beschäftigt hatte. Zu diesem Zeitpunkt waren die genannten Information auf jeden Fall für viele aktuelle SSDs gültig. Die zu diesem Zeitpunkt verkauften SSDs dürften überwiegend noch im Einsatz sein. Insofern muss man auf jeden Fall damit rechnen, auf SSDs zu stoßen, die sich so verhalten, selbst wenn neuere SSDs sich grundlegend anders verhalten sollten.

Wenn das was du behauptest, so offensichtlich zutreffend ist, sollte es dir leicht fallen, entsprechende Belege oder Quellen anzuführen.

Wie du selbst sagtest, ist vieles eine Entscheidung des Controllers. Daher sind meine Aussagen auch grundsätzlich richtig, selbst wenn es Controller gibt, die davon keinen Gebrauch machen. So pauschal wie du es in deiner ersten Antwort geschrieben hast, stimmt es insofern genauso wenig. Insofern ist das Ganze ohnehin ein bisschen ein Streit um des Kaisers Bart, den du ohne Not angezettelt hast.
Zitat
Eine Defragmentierung ist aufgrund der geringen Lesezugriffszeiten [bei SSDs] nicht nötig
Die Aussage bezog und bezieht sich auf die Gründe aus denen eine Defragmentierung nicht nötig ist. Und sie ist korrekt. Dass die Defragmentierung schädlich ist, wird in Wikipedia direkt dahinter angesprochen: Da durch ihre Technik SSDs nach der überwiegenden Mehrheit nicht defragmentiert werden sollen, da ständiges Schreiben sogar die Lebensdauer der Disks verringern kann, empfiehlt Microsoft neben dem Abstellen der Defragmentierung auch das Ausschalten aller Software-Cache-Systeme wie Prefetch und Superfetch. .... Bevor man eine Quelle als in einem bestimmten Punkt unvollständig kritisiert, sollte man sie wenigstens lesen.

Über den Nutzen meiner und deiner Antworten kann jeder Leser für sich entscheiden.

herbivore
private Nachricht | Beiträge des Benutzers