Swapon fehlgeschlagen: Ungültiges Argument auf einem Linux-System mit Btrfs-Dateisystem

16

Was ist falsch an dieser Abfolge von Operationen, die auf einem Debian Squeeze-System mit einem Btrfs-Dateisystem ausgeführt werden?

$ dd if=/dev/zero of=swapfile2 bs=1024 count=524288
$ sudo mkswap swapfile2
$ sudo chown root:root swapfile2
$ sudo chmod 0600 swapfile2  
$ sudo swapon -v -f swapfile2
swapon on swapfile2
swapon: /home/mathieu/swapfile2: found swap signature: version 1, page-size 4, same byte order
swapon: /home/mathieu/swapfile2: pagesize=4096, swapsize=536870912, devsize=536870912
swapon: swapfile2: swapon failed: Invalid argument

Mein Dateisystem ist:

$ mount
/dev/mapper/voxbox-root on / type btrfs (rw)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/mapper/voxbox-boot on /boot type ext2 (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
malat
quelle
malat, ich habe deine frage wieder geöffnet und deine antwort wie folgt hinzugefügt. Fühlen Sie sich frei, Ihre Antwort zu posten, ich werde meine löschen.
Sathyajith Bhat

Antworten:

16

Dieser Fehlerbericht führt zu dieser Diskussion

"Ungültiges Argument" sollte also als "Ihr Dateisystem unterstützt keine Auslagerungsdatei" gelesen werden.

wie von malat gepostet

Sathya
quelle
6
Schöner Fang! Das btrfsDateisystem kann keine Auslagerungsdateien unterstützen, da es Dateidaten verschiebt und der Linux-Auslagerungscode die Zuordnung der Auslagerungsdatei nur einmal verwendet. Wenn dies zulässig ist, würde eine Katastrophe eintreten - zufällige Dateidaten, die Blöcke verwendeten, die die Auslagerungsdatei einmal verwendete, würden beschädigt.
David Schwartz
1
neuere Swapon-Manpage dokumentieren einen neuen Trick "Eine mögliche Problemumgehung besteht darin, die Datei einem Loopback-Gerät zuzuordnen". Ich habe es noch nicht ausprobiert.
Malat
8

Ich habe weniger als 50 Ruf, so kann ich nicht kommentieren. Aber ich MUSS vorhandene Antworten aktualisieren. In Linux-Kernel 5.0.0 unterstützt btrfs jetzt nativ Swapfile. (Sie müssen es als No-COW einstellen)

Hier sind einige Informationen von kernel.org: https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F

Ab Kernel 5.0+ unterstützen btrfs native Auslagerungsdateien, jedoch mit einigen Einschränkungen. Auslagerungsdatei - muss vollständig als NOCOW ohne Komprimierung auf einem Gerät zugeordnet sein.

Dieser Link zeigt, wie es geht: https://wiki.archlinux.org/index.php/swap#Swap_file .

VERSUCHEN SIE ES NICHT UNTER LINUX <4.21 !!!

Warnung: Btrfs unter Linux-Kernel vor Version 5.0 unterstützt keine Auslagerungsdateien. Die Nichtbeachtung dieser Warnung kann zur Beschädigung des Dateisystems führen. Während eine Auslagerungsdatei auf Btrfs verwendet werden kann, wenn sie über ein Schleifengerät eingehängt wird, führt dies zu einer schwerwiegenden Verschlechterung der Auslagerungsleistung.

recolic
quelle
1
Könnten Sie den entsprechenden Abschnitt in Ihrem Link zitieren?
Burgi
@ Burgi Ich habe meine Antwort bearbeitet und es ist jetzt besser!
Recolic
2

Wenn Sie trotzdem eine Datei austauschen möchten, verwenden Sie einfach btrfs-swapon

Sebastian Wagner
quelle
Ich bin zur gleichen Lösung gekommen, habe aber Bedenken hinsichtlich der Richtigkeit eines solchen Ansatzes. Ex. Mit loop dev kann ich Löcher umgehen, die mit check erstellt wurden truncate -s 4G swapfile_holes.img. Das heißt, der Grund, warum swaponnach etwas gesucht wird, ist, dass die Swap-Datei einige Anforderungen für eine angemessene Leistung erfüllen sollte.
am
1
Und vor kurzem habe ich mich entschieden, kein losetupMapping zu verwenden. Mein System steckte nach dem Start der Verwendung von Swap Through losetupauf BTRFS (mit vorab zugewiesenen Datei). Vielleicht stört es irgendwie Puffer und Caches. Das heißt, das System möchte Speicher freigeben und etwas austauschen, dies führt jedoch dazu, dass der Cache bei gleicher Größe vergrößert wird. Obwohl ich nicht sicher bin, würde ich das vermeiden.
Am
0

Update April 2019 : Bitte lesen Sie die Antwort von recolic, wonach Btrfs ab Linux-Kernel-Version 5.0.0 Swap unterstützt .

Ursprüngliche Antwort:

Sathyas Antwort scheint tote Links zu enthalten.

Ich habe dies in den Btrfs FAQ gefunden:

Unterstützt btrfs Swap-Dateien?

Zurzeit nicht. Nur eine Datei zu erstellen, die NOCOW nicht hilft, die Unterstützung für Auslagerungsdateien basiert auf einer Funktion, die btrfs aufgrund möglicher Beschädigungen absichtlich nicht implementiert. Die Swap-Implementierung, die verwendet wurde, um sich auf einige Annahmen zu stützen, die in btrfs möglicherweise nicht zutreffen, wie z. B. Blocknummern in der Swap-Datei, während btrfs bei mehreren Geräten eine andere Blocknummernzuordnung hat. Es gibt eine neue API, die verwendet werden könnte, um den Swap nach btrfs zu portieren. Weitere Informationen finden Sie unter Projektideen. # Unterstützung für Swap-Dateien.

Eine Problemumgehung, wenn auch mit schlechter Leistung, besteht darin, eine Auslagerungsdatei über ein Schleifengerät bereitzustellen.

Quelle: https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F

mpb
quelle
Die FAQ besagt auch, dass Swap auf Btrfs seit Linux-Kernel 5.0
phuclv
@phuclv: Ja, Fortschritt!
mpb
-2

Invalid argumentsagt, dass etwas in Argumenten für swaponBefehl falsch ist .

Lesen Sie zuerst man swapon.

Versuchen Sie es sudo swapon swapfile2. In meinem Fall funktioniert es.

Paul Brit
quelle
5
Denken Sie vielleicht, ich könnte -v und -f flag finden, ohne die Manpage zu lesen?
Malat