Ist es "besser", wenn Flash-Speicher mit 1 statt mit 0 gefüllt wird?

504
AaronD

Bei der Sicherung eines Laufwerks komprimiere ich das Image gerne, also fülle ich es zuerst mit allen Werten, so dass der freie Speicherplatz auf fast nichts reduziert wird:

cat /dev/zero > ~/zeros sync rm ~/zeros 

Für ein mechanisches / magnetisches Laufwerk schreibt dies einfach 0-Bits in eine Operation pro Bit in den gesamten freien Speicherplatz. Bei einem Solid-State- / Flash-Gerät wie einer SD-Karte oder SSD erfordert das Schreiben von 0 tatsächlich zwei Operationen pro Bit:

  • Eine Massenlöschung, bei der ein ganzer Block auf alle Einsen gleichzeitig gesetzt wird
  • Ein einzelner Schreibvorgang, der die ausgewählten Bits auf 0 zurücksetzt

Wenn ich also ein Solid-State- / Flash-Gerät mit Einsen anstelle von Nullen fülle, wie in dieser Antwort beschrieben, würde ich den Vorgang beschleunigen oder die Lebensdauer des Geräts verlängern, indem ich den zweiten Schritt des Schreibvorgangs vermeide?

0
Was ist das ziel Ramhound vor 7 Jahren 0
@Ramhound: Grundsätzlich die Fragen am Ende. Im Besonderen mache ich eine Menge Versuch und Irrtum, indem ich versuche, einen Pi so zu bauen, wie ich es will, und die SD-Karte dabei zu verprügeln. Teilerfolge sichern, dann eine völlig andere Herangehensweise versuchen usw. Ich dachte nicht, dass die spezifische Anwendung relevant ist, es sei denn, ich schreibe viel darüber. AaronD vor 7 Jahren 0
Ich denke, Löschungen heben die Verknüpfung von Einträgen mit Dateispeicherorten oder Partitionstabellen auf und lassen die Daten unberührt. Wenn sich das Laufwerk während einer Wiederherstellung dazu entschließt, nicht zu schreiben, weil das Bit bereits das richtige war, würde ich vermuten, dass dies eine Funktion des Installers oder des Laufwerkscontrollers ist und nicht die Funktionsweise des Flash-Speichers. Louis vor 7 Jahren 0
@ Louis: Ja, rm `tut das, aber ich verwende` dd 'für die Sicherung / Wiederherstellung, keine Dateikopie, die Dinge vermisst, die keine Dateien sind. Der Punkt der Datei mit dem vollständigen Laufwerk, die sofort gelöscht wird, besteht darin, den gesamten freien Speicherplatz auf denselben Wert festzulegen, damit das Image des Laufwerks effizient komprimiert werden kann. ~ 600 MB für eine 8 GB SD-Karte mit ~ 2 GB verwendet. Obwohl diese Datei nur ~ 600 MB groß ist, muss sie auf einer 8 GB-Karte oder einer größeren Karte wiederhergestellt werden. Der allgemeine Punkt ist, einen Haufen desselben Werts bei der Sicherung zurückzulesen, unabhängig davon, wie das darunter funktioniert ... nur dass es nicht so viele Ersatzblöcke gibt. AaronD vor 7 Jahren 0
Ihre Frage ist nicht klar, also klären Sie, was ist Ihr Endziel, 0 oder 1 auf das Gerät zu schreiben? Ramhound vor 7 Jahren 0
@ Ramhound: Ich bin mir nicht sicher, ob ich mich sehr verändert habe, aber ich habe es trotzdem umformuliert. Ist das besser? AaronD vor 7 Jahren 0
Die meisten SSDs haben ein Massenlöschen, das so schnell ist, dass es eine bessere Lösung als dd wäre Ramhound vor 7 Jahren 0
@ Ramhound: Ich möchte ALLES nicht löschen !!! Setzen Sie einfach den freien Speicherplatz auf ein leicht komprimierbares Muster (alle denselben Wert), sodass ich es mit `dd 'lesen und komprimieren kann. AaronD vor 7 Jahren 0
(Okay, ich verwende das Wort "bulk" in einem allgemeineren Sinn in der Frage als das, was die Spezifikation verwendet.) AaronD vor 7 Jahren 0
Sie verstehen, dass SSDs ein begrenztes Schreibrecht haben. Haben Sie Benchmarks, die zeigen, dass Ihre typischen Aktionen tatsächlich bei einer SSD hilfreich sind? Ramhound vor 7 Jahren 0
@Ramhound: Ja, das ist der halbe Punkt der Frage - das Vermeiden tatsächlicher, physischer Schreibvorgänge um den spezifischen Wert, den ich verwende, und die Funktionsweise der Technologie berücksichtigen. Abgesehen von dem Lesen einer gesamten 8-GB-SD-Karte in ein 0,6-GB-komprimiertes Image, dem Wiederherstellen der gesamten 8-GB-Karte und dem fehlerfreien Betrieb, habe ich keinen Benchmark für meine typische Aktion, das Laufwerk mit demselben Wert zu füllen. Persönlich halte ich das für einen ziemlich guten Maßstab. AaronD vor 7 Jahren 0

2 Antworten auf die Frage

0
Journeyman Geek

Das fühlt sich an wie ein XY-Problem - die richtige Antwort ist, dass es wahrscheinlich überhaupt keine Rolle spielt, aber es macht Sinn, es später zu tun.

Die meisten SSDs verschlüsseln oder verschlüsseln Daten zum Zweck des Verschleißniveaus. Sie dürften also wahrscheinlich nur ein wenig schneller das Laufwerk verschleißen. SD-Karten, da bin ich mir nicht sicher. Es ist ziemlich ungewöhnlich, sie als Startlaufwerke außerhalb von Szenarien mit sehr wenig Schreibvorgängen zu verwenden.

Wenn es sich um ein relativ kleines Backup handelt, vermute ich tatsächlich, dass es sich bei der "intelligenten" Methode um ein Abbild handelt, dann den spärlichen Speicherplatz auf dem Abbild mounten und auf Null setzen, dann erscheint das Komprimieren intelligent. Sie arbeiten mit relativ schnellem Speicher, minimieren das Überschreiben des Flash-Speichers, lesen das gesamte Laufwerk aus und beginnen trotzdem mit einem unkomprimierten Image. Imaging zuerst dann aus Nullstellung dann komprimiert spart auf den Verschleiß.

Es ist auch eine Überlegung wert, wenn ich mich recht erinnere, noobs arbeitet sowieso mit Disk-Images auf einem fat32-Laufwerk. Wenn ja, können Sie einfach die SSD einbinden, das Disk-Image darin kopieren und dort vorgehen . Ersetzen Sie dann die Disk-Images nach Bedarf. Oder kopieren Sie einfach den Inhalt des Laufwerks und komprimieren Sie es nach Bedarf, und ersetzen Sie den Inhalt des alten Laufwerks durch das neue.

Ooo, das hört sich attraktiv an! Daran hätte ich nie gedacht! Okay, also auf einem Lubuntu-Laptop, wie kann ich eine unkomprimierte Image-Datei mit mehreren Partitionen (erstellt mit `dd 'von der gesamten physischen Karte) einhängen und den freien Speicherplatz mit komprimierbarem Material füllen? AaronD vor 7 Jahren 0
Jep. Ich glaube, dass kpartx -a -v backup.img eine Reihe von Geräten in / dev / mapper hinzufügt, die Sie dann so anhängen können, als wären sie eine physische Festplatte Journeyman Geek vor 7 Jahren 0
Ich musste das zuerst installieren, und es muss als Sudo laufen, aber dann wurde ein Roh-SD-Image eingebunden, als hätte ich eine physische Karte eingesetzt. Leider scheint die Verzeichnisstruktur nur lesbar zu sein. (Jeder Versuch, eine Datei zu erstellen, auch als sudo, führt zu "Permission denied"). Die Manpage erwähnt eine Readonly-Option (-r), aber ich habe sie nicht verwendet. bisher nur kopiert / eingefügt, mit backup.img geändert, was es wirklich ist. AaronD vor 7 Jahren 0
erf. Ich verwende es normalerweise "readonly" - Sie behandeln die Dinge auf / dev / mapper als Geräte, richtig? Sie müssten also mounten, um wirklich an ihnen arbeiten zu können. Sie können dd darauf wie ein SDX-Gerät ausführen ... Journeyman Geek vor 7 Jahren 0
Ich bin nicht sicher, was du da meinst. Ich bin sicher, ich vermisse eine Menge unter der Haube, aber aus dem, was ich eigentlich sehen kann: Ich bekomme im Dateisystem-Browser (PCManFM) für jede Partition im Image ein neues Lesezeichen / Quick-Link, genau wie beim Stecken eine Karte in. Ich klicke auf eine Karte, das Auswurfsymbol erscheint wie bei einer physischen Karte, und ich kann sie lesen und vorhandene Dateien ändern. Ich kann einfach keine Datei erstellen, auch nicht mit Sudo. AaronD vor 7 Jahren 0
Oh, das ist seltsam. Klingt wie es automatisch mit ungeraden Berechtigungen mounten. Versuchen Sie, die Einhängepunkte herauszufinden und * die Aufhebung der Aufhängung * vorzunehmen und sie dann erneut zu montieren Journeyman Geek vor 7 Jahren 0
sudo mount / dev / mapper / loop0p2 / path / that / I / own` macht keinen Unterschied. Es kann immer noch keine Datei erstellt werden. `/ proc / mounts` sagt, dass beide Versuche mit den gleichen Optionen endeten:` ext4 rw, nosuid, nodev, relatime, block_validity, dealloc, Schranke, user_xattr, acl 0 0` Haben Sie etwas davon? AaronD vor 7 Jahren 0
0
Jason Swartz

@AaronD

Versuchen Sie zu fragen, ob das Löschen von freiem Speicherplatz besser mit dem
Muster von 0 oder 1 zu tun ist, da weniger Blöcke verwendet und neu gefüllt werden?

Wenn Sie denken, dass 0 leer ist, wird die Lebensdauer eines SSD-Laufwerks verlängert oder verkürzt. Wenn die zweite Logik die Blöcke zusammenbricht, damit sie nicht verwendet wird, anstatt freien Speicherplatz mit gelöschten oder entfernten Elementen zu haben, sind immer noch Daten mit Speicherplatz und mehr Blöcken, die mehr Schreibvorgänge haben, wodurch die Verschlechterung beschleunigt wird

Ihr verpasst den Punkt, warum Ramhound Ihre Frage nicht versteht.

Es liegt an Ihrer Logik, indem Sie den freien Speicherplatz löschen und ihn mit erstellen

cat> ~ / null

Das Erstellen eines Schreibvorgangs durch Entfernen der verwendeten Blöcke ist immer noch ein Schreibzugriff auf dieses Laufwerk. Dies bedeutet eine schlechte Idee, aber eine gute Idee mit einer schlechten Logik, unabhängig davon, ob ein kleineres Backup-Image verwendet wird oder nicht. Dieser Vorgang hilft dabei, ein kleineres komprimiertes Backup-Image zu erstellen, das Laufwerk dabei jedoch zu töten.

Durch das Paspeln der Ausgabedatei auf demselben Laufwerk und Löschen des freien Speicherplatzes erstellen Sie eine große Datei mit> auf demselben Laufwerk b / c, die das Laufwerk noch mit Daten schreibt, obwohl es noch freien Speicherplatz gibt. Ein Schreibzugriff auf das Laufwerk ist ein Schreibvorgang und dazu ein massiver Schreibvorgang.

Ich denke, dass Sie eine geladene Frage stellen, was bedeutet, dass die Logik, nach der Sie gefragt werden, sinnvoll ist. Sie ist jedoch falsch und 100% kontraproduktiv. Möglicherweise ist Ihr Laufwerk 10-mal schneller.

Wenn das Laufwerk frei von Speicherplatz ist, aber Schreibvorgänge mithilfe einer Datei erstellt werden, die eine große Dateigröße haben wird, ist ein Schreibvorgang ein Schreibvorgang. Daher ist die gesamte Logik, auch wenn ich sie bekomme, immer noch hilfreich, wenn Sie das kleinste Backup-Image verwenden Es ist wahr, der freie Speicherbereich für das Löschen wird viel mehr Schreibvorgänge erzeugen, als selbst mit freiem Speicherplatz in Ihrem Backup-Image erstellt werden würde, selbst wenn der Vorgang immer und immer wieder ausgeführt wird, indem freier Speicherplatz geschrieben wird, der eine stumme Menge ist, und dann eine Datei mit Schreibzugriff erstellt wird Der gesamte freie Speicherplatz des Laufwerks erzeugt immer noch einen massiven Schreibvorgang, wobei der freie Speicherplatz nur wenig Speicherplatz beansprucht. Das Laufwerk wird schlechter, weil es eine Datei schreibt. Löschen löscht die Datei und schreibt eine Datei.

Es ist nicht so sehr, dass die Blöcke verwendet werden oder nicht. Sie werden alle beim Schreiben der Datei verwendet und beim Löschen der Datei freigegeben, unabhängig davon, mit welchem ​​Wert ich die Datei fülle. Der einzige Unterschied auf der obersten Ebene ist der Restwert, der aus dem derzeit technisch freien Speicherplatz zurückgelesen wird, und ich hatte gehofft, etwas Abnutzung und möglicherweise sogar etwas Geschwindigkeit zu sparen, indem ich beim Füllen die zweite Hälfte eines generischen Schreibzyklus ausschneide die Datei. Das ist wirklich alles - nur die Standardroutine zum Befüllen mit komprimierbaren Stoffen vor der Komprimierung, jedoch mit einem anderen Füllwert, um den Prozess zu optimieren. AaronD vor 7 Jahren 0
Davon abgesehen mag ich wirklich, wohin Journeyman Geek geht. Das verspricht, das Problem insgesamt zu umgehen, wenn wir nur den einen oder anderen Fehler ausarbeiten können. AaronD vor 7 Jahren 0