Ein Schema für den Swap-Speicherplatz auf einem USB

555
Melab

Ich habe kürzlich ein USB-Flash-Laufwerk gekauft, das ich ausschließlich für Swap-Partitionen verwenden werde. Ich verstehe, dass Auslagerungsdateien auf Flash-Medien die Anzahl der Schreibzyklen ziemlich schnell aufbrauchen, aber deswegen habe ich diese USB-Karte gekauft, so dass ich mich nicht mit einer derartigen Verschlechterung des Speichergeräts meines Laptops (einer eMMC) befassen muss. . Ich habe zwei Ideen, wie ich dies für den Swap Space nutzen kann.

Schema 1: Eine Dateisystempartition und viele kleinere Swap-Partitionen

Das USB-Laufwerk wurde mit einer Kapazität von 32 Gigabyte angekündigt, wobei ein Gigabyte als 1000000000Bytes definiert ist, aber die tatsächlich verfügbare Kapazität für die Diskontierung des Dateisystems ist 307520000000Bytes (abgesehen davon gibt es hier immer noch falsche Werbung).

Was ich mit diesem Laufwerk tun möchte, ist, es mit einer GUID-Partitionstabelle zu formatieren und mehrere Partitionen darauf zu erstellen, wobei eine Partition größer als die anderen ist und mit einem Basisdateisystem (z. B. VFAT / FAT32, ext2, ext4) formatiert ist. Die Gesamtanzahl der Partitionen beträgt mindestens Hunderte, und abgesehen von der größeren Dateisystempartition haben sie eine einheitliche Größe und werden für den Seitenwechsel / Auslagerungsbereich verwendet. Die Dateisystempartition wird zum Speichern von Daten zum Verwalten dieses bestimmten Schemas verwendet.

Der Grund für die Verwendung vieler kleiner Partitionen anstelle einer einzelnen Partition oder einer Auslagerungsdatei in einem Dateisystem besteht darin, zu verhindern, dass fehlerhafte Blöcke auf dem USB-Laufwerk verteilt werden. Dadurch wird die Beeinträchtigung der Verwaltung vereinfacht, da Partitionen mit fehlerhaften Blöcken nicht mehr verwendet werden. Aufzeichnungen darüber, welche Partitionen nicht verwendbar sind, werden im Dateisystem aufbewahrt, das sich auf der einzigen größeren Partition befindet.

Das lineare Ziel des Device-Mapper wird zum Erstellen eines einzelnen großen Geräts aus einer beliebigen Anzahl der kleinen Partitionen auf dem USB-Gerät verwendet. Die Entscheidung, welche Partitionen zum Erstellen des zugeordneten Geräts verwendet werden, wird anhand der in der Dateisystempartition aufgezeichneten Daten festgelegt. Wenn ich mich für ein verschlüsseltes Swap-Gerät entscheide, speichere ich einen verschlüsselten Schlüssel in der Dateisystempartition (oder möglicherweise auf dem Host-Computer).

Um auf die Frage zurückzukommen, wie ich das USB-Laufwerk partitionieren möchte, werden die 30752000000Bytes des unformatierten Speicherplatzes in 60062500Sektoren umgewandelt, die jeweils 512Byte groß sind. Die Verwendung eines GPT-Schemas bedeutet, dass es zwei Regionen gibt, eine an beiden Enden des Speicherplatzes des Laufwerks, die nicht als Teil eines Dateisystems oder als Auslagerungsspeicher zur Verfügung stehen. In Anbetracht der Praxis, Partitionen an N-Sektorgrenzen auszurichten, sind diese beiden Bereiche größer als die Größe der Partitionstabelle, die ich verwenden werde (die Anzahl der Partitionseinträge, die ein GPT enthält, ist einstellbar und maximal 4294967295).

Werkzeuge wie fdiskund die gdiskStandard-zu- 2048Sektor-Ausrichtungsgrenzen scheinen zu vermuten, dass 2048 empfohlen wird oder in gewisser Weise optimal ist. Wenn ich meine Partitionierungsgrenzen an 2048Sektoren ausrichte, 2048verbleibt ein Segment des Sektors, das den primären GPT enthält, am Anfang des Laufwerks, ein Teilsegment des 804-Sektors, das den Sicherungs-GPT am Ende des Laufwerks enthält, und 29326 2048die Segmente des Sektors, die für verfügbar sind Dateisystem / Swap-Partitionen dazwischen.

Bei einer Partitionsausrichtung an 2048-sector-Grenzen ist Xdie Gesamtanzahl der Sektoren, die als mehrere Swap-Partitionen verwendet werden sollen Y, gleich, wenn die Dateisystempartition eine Anzahl von Segmenten hat 29326-X. Da nun die Swap-Partitionen gleich groß sein sollen, muss der Wert von Yeine zusammengesetzte Zahl sein, und da eine größere Anzahl von Partitionen dazu führen könnte, dass die Partitionstabelle 2046Sektoren in der Größe überschreitet, muss die Anzahl der Swap-Partitionen eine von sein die größeren Faktoren von Y.

Verallgemeinern der oben genannten, bekomme ich diese Rechnung:

  • 30752000000 ist die Größe des USB-Laufwerks in Byte.
  • 60062500ist die Größe des USB-Laufwerks in 512Bytes.
  • p ist die Anzahl der Partitionen, die ich verwenden werde.
  • Pist die Größe der Partitionstabelle in Anzahl der Einträge. Dieser Wert ist Teil des GPT-Headers.
  • qist die Größe der primären GPT in- 512Byte Sektoren. Dieser Wert ist gleich ceiling(P/4)+2.
  • rist die Größe der Sicherungs-GPT in- 512Byte Sektoren. Dieser Wert ist gleich ceiling(P/4)+1.
  • N ist die Anzahl der Sektoren, auf die die Partitionen ausgerichtet sind.
  • Qist die Anzahl der 512Bytes am Anfang des Laufwerks, die keiner Partition angehören können. Dieser Wert ist gleich N.
  • Rist die Anzahl der 512Bytes am Ende des Laufwerks, die keiner Partition angehören können. Dieser Wert ist gleich 60062500 mod N.
  • Xist die Anzahl der NSegmentsektoren, die für Partitionen verwendet werden können.
  • Yist die Größe der Dateisystempartition in N-sector-Segmenten.
  • Zist die Anzahl der NSegmentsektoren, die als Teile von Swap-Partitionen verwendet werden können. Dieser Wert ist gleich X-Y.
  • S ist die Anzahl der Swap-Partitionen, die ich verwenden werde.
  • Zmuss teilbar sein durch S.
  • pkann nicht überschreiten P.
  • rkann nicht überschreiten N.

Meine Fragen zu diesem Schema lauten: + Ist die Partitionsausrichtung wichtig? + Wenn ja, sollte ich meine Partitionen an 2048Sektorengrenzen anpassen oder sollte es eine andere Anzahl sein? + Gibt es eine Zahl, die ich mir aussuchen kann N, die sich gleichmäßig teilen würde 60062500. Wenn ja, führt dies zu Datenüberlappungen? Wenn es sich um eine Zahl handelt, die keine Zweierpotenz ist, wäre dies eine nicht optimale Wahl?

Schema 2: Eine Dateisystempartition und eine größere LVM2-PV-Partition

Diese Idee ist der ersten sehr ähnlich, der Unterschied besteht jedoch darin, dass die vielen kleineren Swap-Partitionen durch eine große Partition ersetzt werden, die für die Verwendung als physisches Volume mit LVM2 formatiert ist. Die große Partition würde in viele logische Datenträger unterteilt, deren Größe geändert und je nach Bedarf neu kombiniert werden könnte. Das Dateisystem würde einem ähnlichen Zweck wie im ersten Schema dienen.

Ich sehe hier einige mögliche Probleme: + Ich weiß nicht, ob LVM2 wie ein Dateisystem funktioniert und ob es die Daten mit logischen Datenträgern verschiebt wie die Daten, die Dateien in einem Dateisystem enthalten. Wenn dies der Fall ist, wäre dies für die Isolierung von fehlerhaften Blöcken problematisch, was für dieses Schema ebenso wie für das erste erforderlich ist. + Ich weiß nicht, ob das Skalieren und Kombinieren von logischen Datenträgern unter einem ähnlichen Problem leiden würde, wie dies im vorhergehenden Punkt der Fall ist. + Dieses könnte unnötig komplizierter sein als die erste Idee, aber ich kann nicht sagen, ob es das ist oder nicht.

Abschließend…

Welches Schema sollte ich verwenden? Was sind die Antworten auf die Fragen / Probleme, die unter jedem gestellt werden? Gibt es sowieso eine Verschlüsselung für den Swap-Bereich, und wäre es leicht zu lösen (die Verschlüsselung), wenn ich sie nicht brauche? Würde ein komprimierter Swap-Speicher zramdie Anzahl der beschädigten Blöcke reduzieren? Wenn ja, wie verwende ich es? Wie bestimme ich die zugrunde liegende Blockgröße meines USB-Laufwerks? hdparmscheint nicht zu helfen.

1
Um das Tragen Ihres Swap-Laufwerks zu vermeiden, sollten Sie am besten über ausreichend Arbeitsspeicher und eine geringe "Ausfallsicherheit" verfügen. Wenn Sie Ihr Swap-Laufwerk auf eine vergleichsweise langsame USB-Verbindung setzen, scheint dies keine gute Lösung zu sein. SSD-Geräte verfügen über Sicherungssektoren, die transparent neu zugeordnet werden, um fehlerhafte Sektoren zu ersetzen. Wenn Sie fehlerhafte Sektoren sehen, bedeutet dies, dass die Sicherungssektoren erschöpft sind und die Sache an diesem Punkt ziemlich schnell schlecht wird und Sie das Gerät ersetzen sollten. Neue OTOH-Geräte nutzen sich ziemlich langsam ab. xenoid vor 6 Jahren 0
@xenoid Ich verstehe, dass mehr RAM das Problem lindern kann, aber das war nicht Teil der Frage. Mein RAM kann nicht erweitert werden. Melab vor 6 Jahren 0

1 Antwort auf die Frage

1
dirkt

Ich möchte nicht mit der Verschlechterung des Speichergeräts meines Laptops (einer eMMC) fertig werden.

Am besten ist es, genügend RAM zu installieren und den Swap vollständig zu deaktivieren.

Die Gesamtzahl der Partitionen beträgt mindestens Hunderte. [...] Der Grund für die Verwendung vieler kleiner Partitionen anstelle einer einzelnen Partition oder einer Auslagerungsdatei in einem Dateisystem besteht darin, dass keine fehlerhaften Blöcke auf dem USB-Laufwerk verstreut werden. Dadurch wird die Beeinträchtigung der Verwaltung vereinfacht, da Partitionen mit fehlerhaften Blöcken nicht mehr verwendet werden.

Das macht keinen Sinn: Egal wo der Block ist, auf alle Blöcke kann gleich schnell (oder langsam) zugegriffen werden. Der Mikrocontroller auf dem USB-Stick weist ohnehin fehlerhafte Blöcke neu zu oder verwendet Verschleißnivellierungen und bewegt sich um Blöcke herum, je nach Wunsch.

Machen Sie also nicht viele kleine Partitionen. Erstellen Sie eine Partition, die groß genug ist, um Ihren geplanten Speicherplatz zu nutzen (wie viele und welche Programme verwenden Sie im schlimmsten Fall?).

Die Verwendung von lvm fügt nur eine Ebene der Indirektion hinzu, wodurch alles langsamer wird.

Wiederholen: Am besten ist es, genügend RAM zu installieren und den Swap vollständig zu deaktivieren.

Edit : Erklärung des Verschleißniveaus

Der Mikrocontroller des USB-Sticks implementiert eine Schicht zwischen den realen (physischen) Blöcken des Sticks und den (logischen) Blöcken, die über USB zugänglich sind.

Angenommen, der Stick soll zur Veranschaulichung eine Standardgröße haben, beispielsweise 150 logische Blöcke. Einige Blöcke stellen sich nach der Herstellung immer als schlecht heraus und werden im Produktionsprozess gekennzeichnet. Angenommen, der Stick wurde mit 200 Blöcken hergestellt, von denen 20 schlecht sind. Das ist immer noch in Ordnung, jetzt haben Sie 180 physische Blöcke, und das sind mehr als die 150 logischen Blöcke, die der Stick behauptet.

Intern verfolgt der Stick eine Zuordnung zwischen logischen und physikalischen Blöcken. Nehmen wir an, Sie machen eine Partition aus (logischem) Block 0 bis 49 und schreiben jeden Block zweimal in diese Partition. Beim ersten Schreiben schreibt der Stick die physischen Blöcke 0 bis 49 und beim zweiten Mal schreibt er die physischen Blöcke 50 bis 99. Und so weiter.

Unabhängig von dem von Ihnen entwickelten Partitionsschema können Sie keine guten Blöcke für "später" speichern. Das wäre auch eine schlechte Idee, denn Blöcke werden defekt, wenn Transistoren undicht werden und alles sehr dicht gepackt ist. Ein fehlerhafter Block kann sich also auch auf benachbarte Blöcke auswirken und sie beschädigen. Sobald der Stick eine erhebliche Anzahl von fehlerhaften Blöcken aufweist, kann ich ihm ohnehin keine wichtigen Daten anvertrauen.

Lösungen in der bevorzugten Reihenfolge:

1) Schalten Sie den Swap vollständig aus, verwenden Sie nur den verfügbaren RAM. Die Ladezeiten vom USB-Swap sind ohnehin ähnlich wie die Ladezeiten vom internen Flash-Speicher. Schließen Sie also die Anwendungen, die Sie nicht verwenden, und starten Sie sie erneut, wenn Sie sie erneut benötigen.

2) Wenn Sie unbedingt mehr Anwendungen verwenden müssen, als in Ihren Arbeitsspeicher passen, oder wenn Sie in den Ruhezustand versetzt werden möchten, erstellen Sie eine einzige Partition von angemessener Größe (die OS-Tabellen bleiben auf vernünftige Größe), und lassen Sie den Rest des Sticks leeren.

Setzen Sie den Swappiness auf "so niedrig wie möglich". Dies wird alle physischen Blöcke auf Ihrem Stick verwenden, und wenn es in einigen Jahren schlecht wird, werfen Sie es weg und kaufen Sie einen neuen. Versuchen Sie nicht, wichtige Daten darauf zu speichern, verwenden Sie dafür einen anderen Stick.

`Am besten ist es, genügend RAM zu installieren und den Swap vollständig zu deaktivieren. 'Es ist ein Chromebook, also nicht möglich. Bitte richten Sie die Fragen an, anstatt diese Alternative vorzuschlagen. Melab vor 6 Jahren 0
`Das macht keinen Sinn: Egal wo der Block ist, auf alle Blöcke kann gleich schnell (oder langsam) zugegriffen werden. Der Mikrocontroller im USB-Stick weist ohnehin fehlerhafte Blöcke neu zu oder verwendet Verschleißniveaus und bewegt sich auf beliebige Weise um Blöcke herum. “Wenn ich also das Ganze als Swap-Partition formatiere, verwende es für eine Weile und reduziere es Größe und formatieren Sie dann ein Dateisystem auf dem verbleibenden Speicherplatz. Das Dateisystem wird dadurch nicht beeinträchtigt. Melab vor 6 Jahren 0
(1) Wenn Sie keinen RAM installieren können, prüfen Sie, ob der verfügbare RAM bereits ausreicht, und deaktivieren Sie dann den Swap. Und du hast nicht erwähnt, um was für ein Gerät es sich handelt. (2) Sticks verwenden den Abnutzungsgrad. Daher wird jeder Block im Durchschnitt gleich oft geschrieben, unabhängig davon, ob er sich in einer Swap-Partition oder einem Dateisystem befindet. Sie können das nicht umgehen, weil Sie den Stick-Mikrocontroller nicht überschreiben können. Der FS * wird also betroffen sein (einige Blöcke wurden bereits ein paar Mal geschrieben), er ist jedoch unabhängig davon, was Sie tun, betroffen. dirkt vor 6 Jahren 0
(1) Es ist nicht genügend RAM vorhanden. (2) Was bedeutet das Dateisystem? Wenn ich nur die Swap-Partition (en) verwende und die Dateisystempartition nicht berühre, warum sollte dann der USB-Controller das Dateisystem überhaupt berühren? Wenn das, was Sie sagen, wahr ist, sollten wir erwarten, dass unberührte Dateisystempartitionen von der USB-Firmware geändert werden. Melab vor 6 Jahren 0
Swap ist eine Option, wenn 1) sie sehr leicht verwendet wird (meistens, um Speicherfehler zu vermeiden) oder 2) sich auf einem Gerät mit sehr schneller E / A befindet. Wenn das System ständig Dinge auf ein USB-Gerät austauscht, funktioniert dies nicht. xenoid vor 6 Jahren 0
* Was bedeutet das Dateisystem? * Weil die Firmware des Geräts Ihre Partitionierung nicht erkennt. Dabei sind alle Sektoren gleich und es werden reale Sektoren virtuellen Sektoren zugeordnet, die das einzige, was Ihr Betriebssystem sieht. Ihr Betriebssystem partitioniert also die virtuellen Sektoren, und diese können transparent neu zugeordnet werden. xenoid vor 6 Jahren 0
Was sind "OS-Tische"? Melab vor 6 Jahren 0
Zuordnung von interner RAM-Adresse zu Swap-Adresse usw. dirkt vor 6 Jahren 0