So erstellen Sie mit BTRFS eine Auslagerungsdatei auf einer SSD-Festplatte

So erstellen Sie mit BTRFS eine Auslagerungsdatei auf einer SSD-Festplatte

Ich habe eine SSD mit BTRFS und habe versucht, eine Auslagerungsdatei wie folgt zu erstellen:

dd if=/dev/zero of=swapfile01  bs=1M count=10240
mkswap swapfile01
chmod 600 swapfile01
swapon swapfile01

In dmesg sehe ich

[238434.731654] swapon: swapfile has holes

Ich verstehe, dass es wahrscheinlich einige Löcher gibt, die durch die Festplattenfragmentierung verursacht werden, aber dies ist eine SSD-Festplatte, also sollte das wahrscheinlich keine Rolle spielen? Gibt es eine Möglichkeit, die Löcher zu ignorieren? Oder wie kann ich das beheben?

Abseits des Themas – warum ich dies möchte (um irrelevante Fragen in Kommentaren zu vermeiden): Ich habe eine verschlüsselte Festplatte, deren Größe zu ändern ein echter Krampf ist, also habe ich einfach beschlossen, eine Auslagerungsdatei zu erstellen, anstatt die Größe der Auslagerungspartition zu ändern (ich habe 14 GB RAM hinzugefügt, von 4 GB auf 16 GB, und kann jetzt nicht in den Ruhezustand wechseln).

Antwort1

Stand 2019

Die Entwicklung von Btrfs und Linux-Kernel machte meine ursprüngliche AntwortveraltetBitte beachten Siediese andere Antwort.


Ursprüngliche Antwort von 2016

AusHäufig gestellte Fragen zu btrfs:

Unterstützt btrfs Auslagerungsdateien? Derzeit nein. Einfach eine NOCOW-Datei zu erstellen, hilft nicht, die Unterstützung von Auslagerungsdateien basiert auf einer Funktion, die btrfs aufgrund möglicher Beschädigungen absichtlich nicht implementiert. (...) Eine Problemumgehung, allerdings mit schlechter Leistung, besteht darin, eine Auslagerungsdatei über ein Loop-Gerät zu mounten.

Es gibt also noch keine gute Möglichkeit, eine Auslagerungsdatei auf der BTRFS-Partition zu erstellen.

Antwort2

Wie oben erwähnt,seit Linux 5.0Es ist jetzt möglich, Auslagerungsdateien auf BTRFS zu erstellen. Sie sollten jedoch nicht komprimiert und NoCOW sein. So erstellen Sie eine solche Datei:

  1. Erstellen Sie eine leere Datei:touch /swap
  2. Verwenden Sie , um ihm Attribute chattrzuzuweisen :NoCOWchattr +C /swap
  3. Überprüfen Sie, ob das CAttribut angezeigt wird:lsattr /swap
  4. Füllen Sie es aus: dd if=/dev/zero of=/swap bs=1M count=1024 # für 1 Gigabyte
  5. mkswap /swap && chmod 600 /swap && swapon /swap

Alternativ können Sie ein Verzeichnis erstellen, chattr +Cdieses Verzeichnis festlegen und dann darunter eine Auslagerungsdatei erstellen.

chattr +CBeachten Sie, dass Sie dies nicht mit bereits vorhandenen, nicht leeren Dateien machen können . Es ist dokumentiert, dass es sich um undefiniertes Verhalten handelt (tatsächlich werden die Attribute einfach nicht geändert). Sie sollten also entweder eine leere Datei erstellen und dann chattroder ein Verzeichnis mit erstellen chattrund dann eine Datei darin erstellen (in diesem Fall chattrhaben alle Dateien, die nach dem Hinzufügen des Verzeichnisses erstellt werden, das Attribut nocow).

Vorbehalt:wie erwähnt, ist hierfür Kernelversion 5.0 oder höher erforderlich. Raspberry Pi verwendet beispielsweise 4.19.*-Kernel, daher können Sie diese Technik darauf nicht verwenden.

Antwort3

Die Unterstützung für Auslagerungsdateien wurde der Kernelversion 5.0 hinzugefügt, wie aus dem Commit ersichtlich ist.https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ed46ff3d423780fa5173b38a844bf0fdb210a2a7 Um die Auslagerungsdatei auf BTRFS zu aktivieren, muss die Datei vollständig als NOCOW ohne Komprimierung auf einem Gerät zugewiesen werden.

Antwort4

Nützlicher Hinweis zum Swap auf BTRFS: Wenn Sie Sicherungs-Snapshots/Subvolumes erstellen, sollten Sie ein dediziertes Subvolume erstellen, von dem Sie keinen Snapshot erstellen.

Auf dem Snapshot-Subvolume wird Ihre Auslagerungsdatei wieder zu COW und Sie können dies swaponnach dem Neustart nicht mehr tun:https://www.spinics.net/lists/linux-btrfs/msg96790.html

Ich habe mein letztes Untervolume beschreibbar gemacht, sudo btrfs property set -ts /.sxbackup/sx-20210211-092159-utc/ ro falsegelöscht swapund konnte es swaponauf dem Hauptvolume wieder tun – aber als Nächstes werde ich ein dediziertes Untervolume erstellen.

verwandte Informationen