"Sichere" ext4-Konfiguration für Systeme, die unbeaufsichtigt laufen

18

Ich habe ein Linux-System, das für längere Zeit unbeaufsichtigt laufen muss. Das System verwendet eine industrielle CF-Karte zur Speicherung. Meistens gibt es keine Schreibvorgänge zum Flashen, obwohl hin und wieder einige Konfigurationsdaten / -einstellungen geändert werden können. Das System muss beständig gegen Stromausfälle sein.

Ich würde dafür gerne ext4 verwenden. Was ist der beste Weg, um ext4 für diese Art von Setup zu konfigurieren? Unter Berücksichtigung, dass:

  • Leistung ist überhaupt kein Problem (insbesondere Schreibleistung)
  • Bei einem Stromausfall sollte das System immer in einem sauberen Zustand gestartet werden, auch wenn dadurch Daten verloren gehen, die in den letzten Sekunden geschrieben wurden
  • Wenn es möglich ist, fsck zu vermeiden, dann umso besser.

(Ich bin mir dieser verwandten Frage bewusst: Verhindern Sie Datenbeschädigung auf ext4 / Linux-Laufwerk bei Stromausfall )

Grodriguez
quelle

Antworten:

11

Ich habe daran gearbeitet, ein System für die Automatisierung von Booten zu bauen, und es gab eine Voraussetzung: In jedem Moment konnte der Strom ausfallen und alles musste wieder korrekt aufgeladen werden.

Meine Lösung bestand darin, ein Gentoo-basiertes initramfs-System mit nur einem rw-Ordner für Anwendungen und Konfigurationen zu erstellen (dies ist der Ansatz, den jeder Hersteller von Routern / Firewalls verwendet). Diese Lösung erhöht die Komplexität bei Systemaktualisierungen zusätzlich, stellt jedoch sicher, dass das System IMMER gebootet wird.

In Bezug auf Ihre spezielle Frage sollten Sie das EXT4- Journal aktiviert lassen, um ein schnelleres Fsck (von wenigen Sekunden) zu erhalten. Verwenden Sie die Option data = journal mount, verringern Sie die Option commit oder verwenden Sie die Option sync , um die Puffer immer leer zu halten.

Verweise: http://www.kernel.org/doc/Documentation/filesystems/ext4.txt

Giovanni Toraldo
quelle
Gut! Wenn die Anwendung nicht zu viele Daten schreibt, sollten Sie mit der Synchronisierungsoption zufrieden sein.
Giovanni Toraldo
1
Der bessere Ort ist die Linux-Kernel-Dokumentation: kernel.org/doc/Documentation/filesystems/ext4.txt Aktivieren Sie data = journal und commit = nrsec, um möglichen Datenverlust zu minimieren (* == Standard)
Giovanni Toraldo,
Die zeitlich festgelegten Commits sind auf jeden Fall hilfreich. Ich glaube, Sie können nur Intervalle von 1 Sekunde erreichen (allerdings mit einer erheblichen Leistungsstrafe für schreibintensive Operationen), aber wenn Sie sich einen Datenverlust von 1 Sekunde nicht leisten können, haben Sie größere Probleme.
Voretaq7
2
Einer der wichtigsten positiven Effekte von Journaling ist, dass bei der Wiederherstellung nach einem Absturz die letzten nicht festgeschriebenen Änderungen wiederholt werden. Dies ist sehr viel schneller als das Überprüfen des gesamten Volumes auf Inkonsistenzen. Wenn dies Ihr größtes Problem ist, sollten Sie sich für den Standard-EXT4 entscheiden und zufrieden sein.
Giovanni Toraldo
1
@Grodriguez "Daten zu verlieren" kann alles Mögliche sein, von "Datei ist nicht mehr da" bis "Warum befindet sich ein Teil des Kernels in meiner Datenbank?" - Es hängt alles davon ab, was "verloren" ist :)
voretaq7
12

Ich möchte das vorwegnehmen, indem ich sage, dass EXT (in all seinen Inkarnationen) ein ziemlich schreckliches Dateisystem ist - ich habe " interessantere " Fälle von Dateisystemkorruption in der relativ kleinen Anzahl von Linux / EXT gesehen {2,3,4} Systeme, die ich verwaltet habe, als ich sie in der relativ großen Anzahl von Not-EXT-Dateisystemen verwendet habe.
Versuchen Sie nach Möglichkeit, ein robusteres Dateisystem auszuwählen. Sie werden sich bedanken, wenn das Unvermeidliche passiert.


Davon abgesehen und all meine persönlichen Vorurteile gegenüber dem Rest der Welt, hat EXT4 drei Funktionen, von denen ich mir vorstellen kann, dass sie Ihnen helfen könnten:

  • Journaling
    EXT4 kann ein Journaled-Dateisystem sein, wenn Sie es möchten. Aktivieren Sie die Journalfunktion (und stellen Sie den Datenjournalmodus speziell auf journalVia tune2fsoder als Mount-Option ein).
    Dies führt zu Leistungseinbußen, da alle Daten in das EXT-Journal geschrieben werden müssen, bevor sie in das Dateisystem "übertragen" werden (jeder Schreibvorgang erfolgt grundsätzlich zweimal). Sie können jedoch jederzeit wiederherstellen, sofern bei einer Journalwiedergabe keine Daten vorhanden sind Probleme.

  • SYNCHronous Mounts
    Wenn Sicherheit an erster Stelle steht, ist das Mounten eines Dateisystems mit der syncOption immer eine gute Idee. Dies zwingt alle Schreibvorgänge sofort auf die Festplatte - auch dies ist ein Leistungseinbruch, aber eine gute Idee, wenn Sie einen Stromausfall erwarten oder zufällige Fremde die CF-Karte herausreißen.

  • Beschreibbare Dateisysteme so weit wie möglich einschränken Dieses ist nicht EXT-spezifisch, aber die allzu verbreitete Linux-Philosophie "nur eine große Root-Partition erstellen und alles darin ablegen" ist ehrlich gesagt dumm . Erstellen Sie eine richtige Dateisystem - Struktur ( /, /var, /usr, /home, etc ...), und montieren , da viele der Dateisysteme schreibgeschützt wie möglich.
    Dies war früher ein allgemeiner Rat für Unix-Systeme aus Sicherheitsgründen, hat in Ihrem Fall jedoch einen zusätzlichen Vorteil: Sie können ein Dateisystem nicht beschädigen, wenn Sie nicht darauf schreiben können.

voretaq7
quelle
Die Funktionalität von vollständig synchronen Bereitstellungen entspricht nicht dem einfachen Aufrufen syncnach jedem Schreibvorgang. Synchrone Bereitstellungen werden von einem Dateisystemschreibaufruf nicht zurückgegeben (oder sollten dies zumindest nicht tun), bis sich die Daten auf der Festplatte befinden. Beim Aufrufen syncwerden alle ausstehenden Schreibvorgänge gelöscht. Zwischen der Rückkehr des Schreibvorgangs und Ihrem Rückruf, syncin dem möglicherweise noch keine Daten auf die Festplatte geschrieben wurden , besteht jedoch ein (jedoch kurzes) Fenster .
Voretaq7
Welches Dateisystem empfehlen Sie? Können Sie Ihre Erfahrungen quantifizieren?
Mark Wagner
@embobo meine Erfahrungen sind völlig ungewöhnlich: Ich habe die EXT-Familie von Dateisystemen noch nie einem Stresstest unterzogen, aber ein Vorfall, der mir in den Sinn kam, war, als ich einen Squid-Server hatte, der unter "Wohin gingen alle meine Inodes?!?" - Das Dateisystem wurde gestartet und anschließend als sauber markiert, aber jede Inode wurde in einem Zustand belassen, in dem behauptet wurde, auf den nie verwiesen wurde. Das Fsck, um dieses bestimmte Chaos zu beheben, war positiv EPIC (wir haben gerade eine neue FS gemacht). Das war der Tag, an dem ich jegliches Vertrauen in die EXT-Dateisystemfamilie verlor.
Voretaq7
@Grodriguez Re: Journaling, die drei Optionen sind data=journal(was ich oben beschrieben habe), data=ordered(Metadaten werden aufgezeichnet. Daten werden auf die Festplatte geschrieben, bevor Metadaten in das Dateisystem geschrieben werden) und data=writeback(was praktisch keine Aufzeichnung / Schutz von Daten ist - Bad Things) kann nach einem Absturz passieren, wie z. B. Müll in der Mitte von Dateien). Ich glaube, das orderedist heutzutage die Standardeinstellung in den meisten Linux-Distributionen ...
voretaq7
2
Zusätzlich zu "Beschreibbare Dateisysteme so weit wie möglich einschränken": Im debian-Wiki finden Sie eine Anleitung, um genau dies zu tun, mit vielen Beispielen für Daemons, die eine spezielle Behandlung benötigen. Es sollte auch für die meisten anderen Distris gelten: wiki.debian.org/ReadonlyRoot
krissi
7

EXT4 scheint nicht die beste Wahl für Ihr System zu sein. Ich würde vorschlagen, sich ein Dateisystem mit Protokollstruktur anzusehen. Diese arbeiten, indem Daten als ein konstanter Strom von Schreibaktualisierungen gegen einen virtuellen Strom mit einem Zeiger behandelt werden, der auf den neuesten "Kopf" zeigt. Aktualisierungen erfolgen, indem Daten und Metadaten in den Speicher geschrieben und anschließend der Zeiger aktualisiert werden. Im Falle eines Absturzes nach dem Schreiben, aber vor der Zeigeraktualisierung, gehen die neuesten Daten verloren, aber das Dateisystem ist konsistent.

Zwei mögliche Dateisysteme sind LogFS und NILFS . Beide sind im Linux-Kernel verfügbar.

Steve Smith
quelle
1

Ich bin fasziniert von dem Gerät, das Ihr Gebäude hat. Sie sind auf die Zuverlässigkeit eines eingebetteten Geräts angewiesen, wenn Sie ein Dateisystem verwenden, das nicht wirklich geeignet ist.

Ext4 (und Familie) ist ein feines Allzweck-Dateisystem mit (glaube ich) vielen Milliarden Stunden Nutzungsdauer auf verschiedenen Hardware- und Anwendungsfällen. Was Sie jedoch wünschen, passt nicht wirklich zu ext4. Die Hinweise von voretaq7 und Giovanni helfen Ihnen dabei, ext4 optimal zu nutzen, wenn Sie müssen. Die eigentliche Antwort ist jedoch, etwas zu verwenden, das Ihren Anforderungen besser entspricht. Steve hat dir ein paar Optionen gegeben. Wenn Sie weiterhin Strom aus einem ext4 FS ziehen, wird es irgendwann zu einem Chaos kommen.

Wenn dies ein einmaliges System ist, das Sie erstellen, sollten Sie die Wahl treffen, etwas passenderes zu verwenden, oder akzeptieren, dass es irgendwann Probleme geben wird. Es ist möglicherweise nur ein Stromausfall von 100 oder ein Stromausfall von 1000. Dies ist möglicherweise ausreichend, um das Risiko einzugehen, und das Gerät läuft möglicherweise über einen langen Zeitraum (Jahre), ohne dass ein manueller Eingriff erforderlich ist.

Wenn es sich um ein Produkt handelt, das Sie auf breiter Basis bereitstellen / auf den Markt bringen möchten, haben Sie die Wahl, ein geeigneteres Produkt zu verwenden. Oder Sie treffen die Geschäftsentscheidung, einen Prozentsatz der Geräte zu unterstützen, die jedes Jahr blockiert werden, und müssen entweder ausgetauscht oder manuell eingegriffen werden, um sie wiederherzustellen.

Schmiere
quelle