Hi,
die Frage steht schon im Betreff!
Wenn ich einen USB-Stick formatiere (vollständig, nicht Quick-format),
dann wird jede Speicherzelle als leer beschrieben.
Wieso ist es dann möglich die Daten wieder zu holen?
Bei einer formatierten Festeplatte kann ich das ja noch verstehen, aber
bei Flash-Technik mit MOS-Transistoren?
Wenn ich die Daten nur lösche werden sie eben als nicht mehr
erforderlich markiert, ergo kann ich sie auch wiederherstellen,
verständlich!
Jetzt lese ich aber bei div. recoverytools dass diese eben auch
formatierte Sticks auslesen können, wie soll das gehen!?
Also ich würde erstmal die Werbungs verifizieren mit einer Demoversion.
Ansich sollte es physikalische "Rückstände" geben, die ein forensisches
Labor wiederherstellen kann, aber softwaretechnisch einen Datenträger,
der nur 0 zurück liefert, wieder auszulesen grenzt für mich auch an
Hokuspokus.
Ich glaube die Werbung war einfach mal wieder fachlich unter aller Sau.
Die gehen von einer Quick-formatierung aus, d.h. Partitionstabelle neu
schreiben und den Speicherbereich, wo gesichert ist, wo welche Datei
liegt leeren.
Dann sind die Daten noch alle da, nur halt namenlos, und mit
Headerinformationen etc, kann man doch schon einiges wiederherstellen
dann.
meines Wissen macht die Format funktion im Windows nicht was jeder
erwartet - überlall 0 reinschreiben - sonder sie liest jeden Sektor und
prüft nur ob er fehlerfrei gelesen werden kann, zuzätzlich wird noch das
Filesystem neu geschrieben. die Daten sind danach immer noch drauf.
zweifler schrieb:> Wenn ich einen USB-Stick formatiere (vollständig, nicht Quick-format),> dann wird jede Speicherzelle als leer beschrieben.
Negativ. Beim normalen Formatieren unter Windows werden nur die
Systembereiche neu geschrieben. Die restlichen Sektoren, also wo die
eigentlichen Daten liegen, werden nur auf Lesbarkeit geprüft. Die
Ausnahme sind Disketten, dort wird beim vollständigen Formatieren auch
geschrieben.
Wenn du sicher löschen willst, dann benutze solche Tools wie z.B.
Diskwipe, die den Datenträger komplett nullen oder mit Zufallsdaten
überchreiben können.
Danke für die Erklärung!
ich bin in der Tat davon ausgegangen dass bei einer Formatierung
wirklich jede Speicherzelle eines Flash-drive mit "0" beschrieben wird!
...wieder was gelernt
Windows 7 löscht Flash-Speicher mittlerweile aber auch vollständig, wenn
man den Haken "Schnellformatierung" rausnimmt. Dauert dann halt
entsprechend lange. Habs eben mal probiert, nach der FAT ist das Ding
komplett mit 0x00 gefüllt. (Mit Tiny Hexer das Laufwerk geöffnet) Da
kann man auch beim besten Willen und mit CSI Equipment nix mehr lesen.
Auch wenn urbane Legenden gerne was anderes behaupten.
... schrieb:> ist das nicht eigentlich dumm?> mit 0xff zu füllen wäre wesentlich performanter.
eventuell inverter der stick ja alle bits? Aber selbst wenn 0xFF drint
steht muss er dann ja erstmal lesen um das rauszufinden also tauscht man
ein lesen gegen das löschen.
Vielleicht wäre es langsam an der Zeit, diesen missverständlichen
Begriff "Formatieren" aus der Welt zu schaffen. Ursprünglich verstand
man darunter das sektorweise Schreiben von Synchronisations- und
Adressinformationen auf rotierende Datenträger wie Festplatten und
Disketten.
Heute werden Disketten praktisch nicht mehr verwendet, Festplatten
werden bereits vom Hersteller formatiert, und Flash-Disks rotieren
nicht. Somit ist eine Formatierung durch den Endbenutzer nicht mehr
erforderlich und meist auch gar nicht möglich.
Da aber der gemeine PC-User sich nur dann als Herr über seinen Rechner
fühlt, wenn er das Recht hat zu formatieren, werden ihm heute — vor
allem im Windows-Bereich — viele unterschiedliche andere Tätigkeiten als
"Formatieren" verkauft, die aber mit der ursprünglichen Bedeutung nichts
zu tun haben:
- Partitionierung des Datenträgers
- Überprüfung des Datenträgers
- vollständiges Beschreiben des Datenträgers mit Nullen
- (Neu-)Anlegen eines Dateisystems auf dem Datenträger
Eine Zeit lang existierte das "echte" Formatieren unter der Bezeichnung
"Low-Level-Formatierung" weiter. Aber auch Low-Level-Formatierung ist
heute meist nur nuch ein Beschreiben des Datenträgers mit Nullen. Die
User, die ihre Festplatte regelmäßig "low-level-formatieren", fühlen
sich dann als die wahren Cracks :)
Würde man die Dinge mit richtigen (und vor allem aussagekräftigen) Namen
nennen, würden viele Missverständnisse gar nicht erst auftreten.
Genauso ein dummes Beispiel ist die Unterscheidung zwischen "LCD-Fern-
sehern" und "LED-Fernsehern", wobei mit letzterem üblicherweise ein
LCD-Fernseher mit LED-Hintergrundbeleuchtung gemeint ist :-/
... schrieb:> mit 0xff zu füllen wäre wesentlich performanter.
Aus welchem Grund?
Peter II schrieb:> eventuell inverter der stick ja alle bits?
Was verstehst Du in diesem Zusammenhang unter invertieren?
In den üblichen USB-Sticks dürfte MLC-Flash zum Einsatz kommen.
MLC-Flash kann pro Zelle nicht nur zwei (0 oder 1) sondern mehrere
Zustände einnehmen, d.h. mehr als 1 Bit je Zelle speichern. Der
Controller im USB-Stick wird die zu speichernden Daten mit etwas
Redundanz anreichern (zwecks Fehlerekennung/-korrektur), kodieren und
dann die Flashzellen entsprechend beschreiben.
Ob der Stick komplett mit Einsen oder Nullen beschrieben wird, dürfte
vom Aufwand egal sein. In keinem der beiden Fälle werden nach dem
beschreiben alle Speicherzellen des Sticks im gleichen Zustand sein.
Michael Köhler schrieb:> Vielleicht was er schrieb? 0xff bitweise invertiert ergibt 0x00 ;)
Ja, die logische Operation "invertieren" ist mir durchaus bekannt:)
Aber was bedeutet das physikalisch im Falle von MLC-Flash? Angenommen
eine Flash-Zelle kann die vier Widerstandswerte 1kOhm, 10kOhm, 100kOhm,
und 1MOhm annehmen, d.h. zwei Bits pro Zelle speichern. Wie könnte jetzt
ein logisches Byte, z.B. 0xa9 invertiert bzw. nicht invertiert
gespeichert werden. Und was würde das vom Aufwand/Geschwindigkeit her
für einen Unterschied machen?
J.-u. G. schrieb:> Ja, die logische Operation "invertieren" ist mir durchaus bekannt:)> Aber was bedeutet das physikalisch im Falle von MLC-Flash? Angenommen> eine Flash-Zelle kann die vier Widerstandswerte 1kOhm, 10kOhm, 100kOhm,> und 1MOhm annehmen, d.h. zwei Bits pro Zelle speichern. Wie könnte jetzt> ein logisches Byte, z.B. 0xa9 invertiert bzw. nicht invertiert> gespeichert werden. Und was würde das vom Aufwand/Geschwindigkeit her> für einen Unterschied machen?
es ist doch egal wie es gespeichert ist, der controller könnte einfacher
jedes byte was er liest oder schreibt invertieren. Das kostet auch keine
Zeit.
Wenn man also 0 schreibt dann wird in in den Flash 0xFF geschrieben,
beim lesen das ganze wieder rückwärts. Damit bekommt man die gleichen
Daten aber intern sie sie invertiert gespeichert. (ob das sinn macht
kann icht sagen aber es würde gehen)
Mal ne blöde Frage: Kommt bei Flash kein RLL mehr zum Einsatz? Ich frage
mich bei Festplatten immer, wie man eigentlich nur 0en oder 1en erhalten
möchte, wenn der Controller in jedem Falle durch die RLL-Codierung IMMER
Flusswechsel schreibt...
Yalu X. schrieb:> Aber auch Low-Level-Formatierung ist> heute meist nur nuch ein Beschreiben des Datenträgers mit Nullen.
Einige SCSI-Platten könnten sich tatsächlich noch Formatieren lassen.
Bei denen kann man (in Grenzen) dann auch die Sektorgröße ändern.
Ich glaube, IBMs AIX war mal glücklich über Platten mit 528 Byte pro
Sektor, weil sie dann ihr eigenes ECC drüber gelegt haben.
Peter II schrieb:> es ist doch egal wie es gespeichert ist, der controller könnte einfacher> jedes byte was er liest oder schreibt invertieren.
Angenommen der Controller soll ein Byte speichern. Zu den angelieferten
8 Bit wird er denn noch das ein oder andere Bit an Redundanz hinzufügen,
das Ganze kodieren (z.B. BCH-Code) und anhand des sich ergebenden
Musters bestimmte Ladungen auf bestimmte Flashzellen verteilen. Eine
eventuelle Invertierung wäre damit Bestandteil des Codes.
Peter II schrieb:> Wenn man also 0 schreibt dann wird in in den Flash 0xFF geschrieben,
0xFF ist doch nur ein abstraktes logisches Konstrukt. Eine Flashzelle
kann damit nicht beschrieben werden, die möchte definierte Ladungsmengen
sehen um einen definierten Zustand (Widerstandswert) einzunehmen. Der
Controller kodiert logische Zustände in Ladungsmengen pro Flashzelle.
Verschiedene Kodierungen des gleichen logischen Bytes (eine Invertierung
wäre ja im Vergleich zur Nichtinvertierung nichts weiter als eine andere
Kodierung) würden demnach nur zu einer anderen Verteilung der
Widerstandswerten der beteiligten Flashzellen führen.
Peter II schrieb:> Damit bekommt man die gleichen> Daten aber intern sie sie invertiert gespeichert.
Wie gesagt, Invertierung ist in diesem Zusammenhang ein rein logisches
Konzept. Was die physische Speicherung in den Zellen betrifft ist das
völlig unerheblich.
Peter II schrieb:> (ob das sinn macht> kann icht sagen aber es würde gehen)
Meiner Meinung nach ist das Eine so gut wie das Andere.
J.-u. G. schrieb:> Meiner Meinung nach ist das Eine so gut wie das Andere.
es ging ja nur um das ziel wenn das BS alles 0 in den Flash schreibe,
das er intern aber nur löscht also 0xFF, damit können dann die Zellen
ohne zu löschen beschrieben werden.
Peter II schrieb:> es ging ja nur um das ziel wenn das BS alles 0 in den Flash schreibe,> das er intern aber nur löscht also 0xFF, damit können dann die Zellen> ohne zu löschen beschrieben werden.
Dann erkläre mir bitte anhand eines Flashspeichers, der 100 Byte
speichern kann, den Unterschied zwischen Löschen, 100 mal 0x00 schreiben
und 100 mal 0xFF schreiben.
J.-u. G. schrieb:> Dann erkläre mir bitte anhand eines Flashspeichers, der 100 Byte> speichern kann, den Unterschied zwischen Löschen, 100 mal 0x00 schreiben> und 100 mal 0xFF schreiben.
ist es nicht so das nach dem Löschen alles auf 0xFF steht, dann kann
man nur noch bits (bei SLC) auf 0 setzen.
wenn also überhall 0 drin steht, dann kan man ohne löschen keine
weiteren Daten reinbekommen, wenn jetzt aber schon 0xFF drin stehen,
könnte man einfach ohne löschen die Daten reinschreiben.
Peter II schrieb:> ist es nicht so das nach dem Löschen alles auf 0xFF steht, dann kann> man nur noch bits (bei SLC) auf 0 setzen.
Ich glaube wir reden aneinander vorbei. 0xFF ist ein rein logisches
Konstrukt. Physiche Speicherzellen (weder SLC noch MLC) können damit
nichts anfangen.
Angenommen (rein hypothetisch) der Flashcontroller soll 1 Byte (8 Bit)
speichern. Zum Zwecke der Fehlererkennung/-korrektur werden 4 Bit als
Redundanz hinzugefügt, also insgesamt 12 Bit. Nehmen wir weiterhin an,
eine MLC-Speicherzelle kann anhand ihres Widerstandes 4 Zustände
einnehmen z.B. 1kOhm, 10kOhm, 100kOhm, 1MOhm. Zum Speichern der 8+4 Bits
benötigen wir also 3 Zellen. Soll jetzt 0x00 gespeichert werden, würden
die 3 Zellen die Zustände [10k 1M 100k] (willkürliches Beispiel)
einnehmen. Während sie im Falle 0xFF [1k 1k 10k] einnehmen würden.
Peter II schrieb:> wenn also überhall 0 drin steht, dann kan man ohne löschen keine> weiteren Daten reinbekommen,
Was verstehst Du unter "löschen"?
Peter II schrieb:> wenn jetzt aber schon 0xFF drin stehen,> könnte man einfach ohne löschen die Daten reinschreiben.
Völlig egal was vorher drinnen stand, der Controller muß anhand seiner
Kodierung die elektrischen Ladungen so auf die Zellen verteilen, dass er
später beim Lesen wieder eindeutig das ursprüngliche Bitmuster
rekonstruieren kann.
J.-u. G. schrieb:> Völlig egal was vorher drinnen stand, der Controller muß anhand seiner> Kodierung die elektrischen Ladungen so auf die Zellen verteilen, dass er> später beim Lesen wieder eindeutig das ursprüngliche Bitmuster> rekonstruieren kann.
warum gibt es dann bei Festplatten die Trim Funktionaltität, diese teilt
dem Kontroller mit welche Bereicht leer sind, damit er die Daten
"löschen" kann. Das ganze wird ja gemacht damit das schreiben schneller
geht.
Du schreibst jetzt aber das es egal ist was geschrieben wird, das passt
aber irgendwie nicht zusammen.
Meines Wissen gibt es eine Unterschied zwischen Löschen und Schreiben.
Es muss vor den Schreiben immer gelöscht werden.
Peter II schrieb:> warum gibt es dann bei Festplatten die Trim Funktionaltität, diese teilt> dem Kontroller mit welche Bereicht leer sind,
Genau, der Controller weiß dann, welche Bereiche ungültige Daten
enthalten.
Der Schreibzugriff auf den Flash erolgt bei SSDs in recht großen
Einheiten (lt. Wikipedia 4096Byte).
Angenommen, der Controller möcht etwas in einer solchen Einheit
speichern, die aber bereits halb voll mit gültigen Daten ist. Dann muß
zunächst der Inhalt der Speichereinheit in den internen Pufferspeicher
des Controllers eingelesen werden. Dann werden die neuen Daten
hinzugefügt und abschließend alte und neue Daten wieder ins Flash
geschrieben.
Wenn der Controller jedoch weiß, das die Speichereinheit keine gültigen
Daten enthält (und das wird ihm mittels TRIM mitgeteilt), kann er sich
das lesen und sichern des alten Inhalts sparen.
Die TRIM Funktion hilft dem Controller also auf logischer Ebene, seine
Arbeit schneller und speicherzellenschonender zu erledigen, weil "alte"
Daten nicht mehr ständig mitgeschleppt werden müssen.
> Meines Wissen gibt es eine Unterschied zwischen Löschen und Schreiben.> Es muss vor den Schreiben immer gelöscht werden.
Nein, eigentlich nicht. Es ist lediglich eine sprachliche Konvention das
mit "Löschen" gemeint ist, dass die Speicherzelle in einen
physikalischen Zustand gebracht wird, der eine logische "0"
repräsentiert und "Schreiben" oder "Programmiern" bedeutet dann
entsprechend, die Zelle wird in einen physikalischen Zustand gebracht,
der die logische "1" repräsentiert. Wie diese physikalischen Zustände
tatsächlich aussahen ist von der Art der Flashzelle und der
Implementierung abhängig.
http://de.wikipedia.org/wiki/Flash-Speicher#Speichern_und_Lesen
Martin Schwaikert schrieb:> Mal ne blöde Frage: Kommt bei Flash kein RLL mehr zum Einsatz? Ich frage> mich bei Festplatten immer, wie man eigentlich nur 0en oder 1en erhalten> möchte, wenn der Controller in jedem Falle durch die RLL-Codierung IMMER> Flusswechsel schreibt...
Flusswechsel bei Flash?
J.-u. G. schrieb:> Nein, eigentlich nicht.
Jein würde ich sagen... beim EEProm ist es z.B. so, dass 0xFF der
"gelöschte" Zustand ist, und man dann jede 1 zu einer 0 machen kann auch
ohne löschen. Von 0 auf 1 geht aber nicht, man muss die Zelle einmal
komplett "löschen", irgendwo gab es dazu mal eine diskussion wie man auf
diese weise einen Löschzyklen schonenden Zähler realisieren kann ;)
J.-u. G. schrieb:>> Meines Wissen gibt es eine Unterschied zwischen Löschen und Schreiben.>> Es muss vor den Schreiben immer gelöscht werden.>> Nein, eigentlich nicht. Es ist lediglich eine sprachliche Konvention das> mit "Löschen" gemeint ist
Der Unterschied zwischen Löschen und Schreiben ist bei NAND-Flash wie in
Sticks und SSDs sehr signifikant. Gelöscht wird in recht grossen
Blöcken, beispielsweise 512KB. Da hinein kann dann inkrementell in
kleinen Blöcken wie beispielsweise 4KB geschrieben werden. Löschen und
Schreiben sind also völlig getrennte Vorgänge.
NOR-Flashs sind eine etwas andere Baustelle, sind aber nicht in
Flash-Massenspeichern wie Sticks zu finden, sondern beispielsweise als
Programmspeicher von Mikrocontrollern, oder als externes serielles
DataFlash (wie Atmel AT45).
J.-u. G. schrieb:> Nein, eigentlich nicht. Es ist lediglich eine sprachliche Konvention das> mit "Löschen" gemeint ist,
es steht doch sogar in dem wiki artikel drin:
[...]
Das bedeutet, dass zum Wiederbeschreiben immer erst eine Löschoperation
(auf einem Byte bei manchen EEPROM-Architekturen, auf einem Sektor bei
Flash) nötig ist und dann das gewünschte Bit-Pattern, also der
gewünschte Speicherinhalt durch Programmieroperationen hergestellt wird.
[...]
Also ist es bei NAND-Flash und EEProm so, dass eine Zelle leicht von
Zustand A in Zustand B gebracht werden kann, aber nur mit hohem Aufwand
wieder zurück von B nach A? OK, dass war mir bisher so nicht bewusst.
Wie sieht das denn bei MLC aus? Die können ja 4 (neuerdings wohl auch
schon 8) Zustände einnehmen. Welche Übergänge sind denn hier aufwändig
und welche nicht?
J.-u. G. schrieb:> Wie sieht das denn bei MLC aus? Die können ja 4 (neuerdings wohl auch> schon 8) Zustände einnehmen. Welche Übergänge sind denn hier aufwändig> und welche nicht?
ich vermute mal dort ist es genaus so, es ist ja auch nur eine
spannung/Widerstand der sich ändert. Damit wird es auch eine
schreibrichtug (z.b. hoher Widerstand -> kleiner widerstand ) geben. das
Löschen setzt dann den Wert auf den hohen widerstand zurück ). Welcher
Wert jetzt welche Bit-Kombination enstpricht ist dabei ziemlich egal.
J.-u. G. schrieb:> Also ist es bei NAND-Flash und EEProm so,
Obacht: Ich hatte nur darauf hingewiesen, dass man zwischen NAND- und
NOR-Flash unterscheiden sollte, nicht aber behauptet dass sie sich in
der Frage Erase/Write völlig anders verhalten würden.
PS: Nach der technischen Erklärung, weshalb Erase-Blöcke so gross sind,
suche ich auch noch.
A. K. schrieb:> Obacht: Ich hatte nur darauf hingewiesen, dass man zwischen NAND- und> NOR-Flash unterscheiden sollte, nicht aber behauptet dass sie sich in> der Frage Erase/Write völlig anders verhalten würden.
Keine Bange, hatte ich so auch nicht verstanden.
> Nach der technischen Erklärung, weshalb Erase-Blöcke so gross sind,> suche ich auch noch.
Moderne Flash Technologien nutzen unterschiedlich physicalische
Prinzipien für das Schreiben und Löschen von Speicherzellen. So wird zum
Beispiel mit Hot-Electrons geschrieben und mit Fowler-Nordheim Tunneling
gelöscht.
Wieviel man gleichzeitig Schreiben bzw. Löschen kann, hängt vom
Schaltungsaufwand ab, den man zusätzlich zum Speicher-Array spendieren
will. So erfordert i.A. das Löschen eine negative Spannung. In
monolithisch integrierten Bauteilen kann man negative Spannungen nur
sinnvoll an große Blöcke verteilen. Der Aufwand zur Separation ist
enorm. Man teilt daher große Flash-Speicher in Sektoren um wenigsten
nicht immer das ganze Array Löschen zu müssen. Der Platz für die
Trennung der Hochspannung zwischen den Sektoren ist verlorenene
Chip-Fläche. Speicherhersteller möchten daher immer große Sektoren
bauen, Kunden wünschen sich das Gegenteil.
Man kann auch nichtflüchtige Speicher bauen, die nicht zwischen
Schreiben und Löschen unterscheiden, d.h., 0 und 1 kann frei
programmiert werden. Dafür braucht man dann wenigstens 3 Transistoren
pro Speicherzelle. Die Kosten rechnen sich dann wohl nur für
Spezialanwendungen.
Speicher müssen heute vor allem groß sein. Dann muß man eben mit ein
paar Nachteilen leben.
@ zweifler
was Du suchst ist ein Low-Level-Format ...
alte MOTs hatten das noch im Bios, gibt es aber auch als Tool unter DOS
(Maxtor's Low Level Format (MAXLLF.EXE) Utility) , ist aber nur für
HDDs.
Für USB Sticks gibt es da ein nettes Tool "USB Flash Disk Formatter
v2.09.01.01" macht alles platt, gerade bei diesen teilen mit eingebauter
Security Software.
Gruss Ralf