Selbstheilende SD-Kartenpartitionen

9

Viele SD-Karten sind ziemlich zerbrechlich. Ich habe jetzt seit ungefähr 2 Jahren einen Pi und die Hauptfehler waren darauf zurückzuführen, dass die SD-Karte aus dem einen oder anderen Grund beschädigt wurde.

Ich frage mich, ob einige Entwicklungen durchgeführt wurden, um die SD-Karte beim Booten zu "stärken". Ich erinnere mich, dass ich so etwas in einem früheren Projekt hatte, in dem uboot zwischen 12 Tarballs wählen würde, wenn einer von ihnen eine ungültige crc32-Prüfsumme hätte. Anschließend wird die validierte Datei erneut auf alle anderen kopiert, die nach einem erfolgreichen Start geändert wurden.

Ich würde mein Pi gerne in einem "permanenten" Setup verwenden und es wäre großartig, wenn es funktionieren könnte, ohne die Karte jemals neu zu flashen.

Gibt es bereits eine Entwicklung auf diese Weise? Während die allgemeine Idee eher trivial ist, ist es normalerweise ein ziemlich schmerzhafter Prozess, Uboot richtig zum Laufen zu bringen, den ich vermeiden möchte.

EDIT:

Nach einigem tieferen Graben scheint es, dass das, was ich mir vorgestellt habe, möglicherweise nicht möglich oder auf eine Weise möglich ist, die einen bedeutenden Vorteil bringt. Hier wird der Startvorgang beschrieben . Der Code, an dem ich gearbeitet habe, wurde auf der ersten Startstufe ausgeführt, da mein Board einen programmierbaren Flash dafür hatte. Mit dem pi wird dies ab Werk in einem ROM gespeichert. Alles andere kommt von der SD-Karte. Wenn die Karte beschädigt wird, hat der Bootloader der zweiten Stufe genauso viele Chancen, zerstört zu werden wie jede andere Partition.

Möglicherweise ist es möglich, den ROM-Bootloader für diesen Zweck zu missbrauchen, aber es ist schwer zu sagen, wie. Der Code scheint auch proprietär zu sein.

Bearbeiten 2:

Die tatsächliche Erklärung des Startvorgangs ist je nach Quelle widersprüchlich. Ich werde versuchen, mehr darüber zu lesen

Eric
quelle

Antworten:

9

Wenn Sie Probleme mit SD-Karten haben, sollten Sie versuchen (in der richtigen Reihenfolge):

  1. Verwenden Sie ein anderes (größeres) Netzteil.
  2. Schließen Sie einen Hub mit Stromversorgung zwischen dem Raspberry und einem USB-Peripheriegerät an.
  3. Verwenden Sie SD-Karten bekannter Marken.
  4. Verwenden Sie eine größere SD-Karte (für verteilte Verschleißnivellierung).
  5. Stellen Sie Ihre Rootfs auf schreibgeschützt ein und vermeiden Sie daher das Schreiben auf die SD-Karte.
  6. Verwenden Sie eine "Live" -Distribution, die vollständig aus dem RAM ausgeführt wird. Mein Projekt Nard SDK ist eines davon (aber es gibt auch andere). Bei Nard wird die SD-Karte nur beim Booten verwendet. Sobald das Dateisystem nie wieder verwendet wird, können Sie sogar die SD-Karte per Hotplug anschließen ...

Siehe: http://www.arbetsmyra.dyndns.org/nard/

Ronny Nilsson
quelle
Ich möchte hinzufügen, dass Sie das Betriebssystem auch von einer über USB angeschlossenen Festplatte ausführen können - genau wie bei Artikel 6.
Phil B.
Vielen Dank für die Vorschläge. Die SD-Karte kann jedoch beschädigt werden, wenn die Stromversorgung unterbrochen wird. Vielleicht würde es helfen, die Karte schreibgeschützt einzulegen. Ich stimme zu, dass die Verhinderung der Korruption in erster Linie eine bessere Lösung ist, aber es ist schwierig, sie vollständig zu verhindern.
Eric
Wenn Korruption bei Stromausfall das Problem ist, ist eine Live-Distribution das Mittel.
Ronny Nilsson
1

Sie sollten nicht häufig dramatische Korruption erleben, auch wenn die Stromversorgung gelegentlich verloren geht.

Wenn ein Dateisystem in der sechsten Spalte von einen Wert ungleich Null hat /etc/fstab, wird geprüft, ob es vor dem Mounten auf Fehler überprüft werden muss. Bei regulären pi-Distributionen (sollte) sollte dies für /dev/mmcblk0p1und die Root-Dateisystempartition (auf Raspbian mmcblk0p2) festgelegt sein. Für ext4-Dateisysteme (wie das Root-fs) bedeutet dies, dass dies unabhängig von allen N-Mounts geschieht. Für den Wert von N siehe "Maximale Anzahl von Mount" in der Ausgabe von tune2fs -l /dev/[partition]; Sie können diesen Wert mit tune2fs -c(siehe man tune2fs) einstellen .

Es wird auch gescannt, wenn das Dateisystem nicht ordnungsgemäß abgemeldet wurde. Dies ist erledigt mit e2fsck. In den meisten Fällen wird alles gut gehen. Es besteht jedoch die Möglichkeit, dass Sie Daten durch Beschädigung verlieren. Beweise dafür bleiben in /lost+found. Wenn möglich (und normalerweise auch), bleibt das Dateisystem danach in einem verwendbaren, nicht beschädigten Zustand. Die Frage ist dann, ob eine kritische Komponente im Fix verloren gegangen ist - aber auch dies wäre sehr ungewöhnlich.

Der Grund, warum es unwahrscheinlich ist, dass etwas Kritisches beeinflusst wird, ist, dass das meiste davon, obwohl es technisch nicht schreibgeschützt ist, im normalen Verlauf der Dinge nicht geändert wird. Das System verfügt über Tonnen von Material aus /binund /libin dem Speicher zu einem bestimmten Zeitpunkt geladen, aber es gibt keine Absicht , ihre Quelle zu verändern , auf der Festplatte, so dass keine Chance fällt die Scheibe nicht mehr synchron mit den nicht vorhandenen Änderungen.

Obwohl ich nicht weiß, welche Regeln für die erste vfat-Partition gelten, die den Kernel und die Firmware enthält (da sie nicht ext-formatiert ist), würde ich davon ausgehen, dass eine ähnliche Überprüfung möglich ist, und auf jeden Fall die Logik des letzten Absatzes gilt - das Zeug ändert sich nur für Systemupdates. Wenn Sie wirklich paranoid sein möchten, können Sie es schreibgeschützt bereitstellen, außer für Updates (oder überhaupt nicht, da es nach Abschluss des normalen Startvorgangs nicht erforderlich ist).

Nach all dem sollten Sie so gut wie nie ernsthafte Korruption erleben, es sei denn, Sie würfeln wirklich häufig, indem Sie die Leistung verringern (und selbst dann sollte es selten sein). Wenn Sie häufig Korruption erleben, stimmt etwas sehr ernsthaft nicht. Es gab hier zumindest einige Leute, die Korruptionsprobleme meldeten, selbst wenn ein schreibgeschütztes Dateisystem verwendet wurde , was etwas verwirrend ist. Dies bedeutet, dass die Beschädigung willkürlich durch fehlerhafte Hardware oder einen Softwarefehler verursacht wird.

Und tatsächlich denke ich, dass es einen solchen Fehler gab , der pis von irgendwann im Jahr 2013 bis Mitte Ende 2014 willkürlich beeinflusst haben könnte (vorausgesetzt, das Betriebssystem wird auf dem neuesten Stand gehalten). Ich habe eine Vermutung, wir hatten weniger "Meine SD-Karte ist beschädigt!" Beiträge in den letzten 4-6 Monaten (aber Nb. Ich habe keine echte Buchhaltung durchgeführt, um dies zu bestätigen).

Goldlöckchen
quelle
1

Möglicherweise möchten Sie ein USB-Flash-Laufwerk / eine USB-Festplatte verwenden.

Sie sind normalerweise zuverlässiger als SD-Karten

Hier ist ein Thread , der beschreibt, wie es geht

nkizz
quelle
0

Selbstheilung ist ein Problem bei jeder Linux-Distribution, bei der sich fsck auf dem Dateisystem befindet, das am anfälligsten für Beschädigungen ist. Das ist ein Problem, das Raspbian mit so ziemlich allen Linux-Distributionen teilt - heutzutage möchten sie alles [einschließlich / boot im Fall von Ubuntu !! ??] auf einer großen ext4-Partition speichern.

Eine schreibgeschützte Root-Partition bewirkt Wunder, um das Boot-Killing-Problem zu vermeiden, bei dem Linux auf Dateisystemprobleme stößt, bevor es die Möglichkeit hatte, fsck auszuführen.

Aber selbst ein Lese- / Schreibstamm, der selten aktualisiert wird, ist ein großer Fortschritt.

Raspbian funktioniert gut mit einer schreibgeschützten Wurzel. Das Einrichten ist mit ein wenig Aufwand verbunden, und Sie müssen natürlich darauf vorbereitet sein, "-o remount, rw /" zu mounten, bevor Sie Änderungen am Root-Dateisystem vornehmen.

David Sainty
quelle