Swapon non riuscito: argomento non valido su un sistema Linux con filesystem Btrfs


16

Cosa c'è di sbagliato in questa sequenza di operazioni, in esecuzione su un sistema Debian Squeeze con un filesystem Btrfs?

$ 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

Il mio file system è:

$ 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, ho riaperto la tua domanda e ho aggiunto la tua risposta come di seguito. Sentiti libero di pubblicare la tua risposta, eliminerò la mia.
Sathyajith Bhat

Risposte:


16

Questa segnalazione di bug porta a questa discussione

Quindi "Argomento non valido" dovrebbe essere letto come "Il tuo filesystem non supporta il file di scambio"

come pubblicato da malat


6
Bella presa! Il btrfsfilesystem non può supportare i file di scambio perché sposta i dati dei file e il codice di scambio Linux prende il mapping del file di scambio solo una volta. Se ciò fosse consentito, si verificherebbe una catastrofe: i dati di file casuali che utilizzavano blocchi che il file di scambio una volta utilizzato venivano danneggiati.
David Schwartz,

1
la pagina man di swapon più recente documenta un nuovo trucco "Una possibile soluzione alternativa è mappare il file su un dispositivo di loopback". Non l'ho ancora provato.
malat,

8

Ho meno di 50 reputazione quindi non posso commentare. Ma DEVO aggiornare le risposte esistenti. Nel kernel 5.0.0 di Linux, btrfs ora supporta nativamente swapfile. (Devi impostarlo come no-COW)

Ecco alcune informazioni da kernel.org: https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F

Dal kernel 5.0+ btrfs ha il supporto per i file di scambio nativo, ma con alcune limitazioni. Scambia file: deve essere completamente allocato come NOCOW senza compressione su un dispositivo.

Questo link mostra come farlo: https://wiki.archlinux.org/index.php/swap#Swap_file .

NON PROVARLO IN LINUX <4.21 !!!

Avvertenza: Btrfs sul kernel Linux prima della versione 5.0 non supporta i file di scambio. La mancata osservanza di questo avviso può comportare la corruzione del file system. Mentre un file di scambio può essere utilizzato su Btrfs quando montato attraverso un dispositivo loop, ciò comporterà prestazioni di scambio gravemente degradate.


1
Potresti citare la sezione pertinente nel tuo link?
Burgi,

@Burgi Ho modificato la mia risposta ed è meglio ora!
recolic

2

Se vuoi scambiare un file comunque, usa semplicemente btrfs-swapon


Sono arrivato alla stessa soluzione, ma ho dubbi sulla correttezza di tale approccio. Ex. con loop dev I canna lavorare attorno al controllo dei fori creato con truncate -s 4G swapfile_holes.img. Cioè il motivo per cui swaponcontrolla qualcosa è che il file di scambio dovrebbe soddisfare alcuni requisiti per prestazioni ragionevoli.
ony

1
E solo un momento fa ho deciso di evitare l'uso della losetupmappatura. Il mio sistema si è bloccato dopo aver iniziato a usare lo scambio losetupsu btrfs (con file pre-allocato). Forse interferisce in qualche modo con buffer e cache. Cioè il sistema vuole liberare memoria e scambiare qualcosa, ma questo si traduce in un aumento della cache per le stesse dimensioni. Anche se non sono sicuro, lo eviterei.
ony

0

Aggiornamento aprile 2019 : consultare la risposta di Recolic, che afferma che Btrfs ha iniziato a supportare lo scambio a partire dalla versione 5.0.0 del kernel di Linux.

Risposta originale:

La risposta di Sathya sembra contenere collegamenti morti.

Ho trovato questo nelle FAQ di Btrfs:

Btrfs supporta i file di scambio?

Attualmente no. Il solo fatto di creare un file NOCOW non aiuta, il supporto per il file di scambio si basa su una funzione che btrfs non implementa intenzionalmente a causa di potenziali corruzioni. L'implementazione dello swap faceva affidamento su alcune ipotesi che potrebbero non essere contenute in btrfs, come i numeri di blocco nel file di scambio mentre btrfs ha una mappatura dei numeri di blocco diversa nel caso di più dispositivi. Esiste una nuova API che potrebbe essere utilizzata per il port swap su btrfs; per maggiori dettagli dai uno sguardo alle idee del progetto # Scambia supporto file.

Una soluzione alternativa, sebbene con scarse prestazioni, è montare un file di scambio tramite un dispositivo loop.

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


le FAQ dicono anche che lo swap su Btrfs è supportato dal kernel 5.0 di Linux
phuclv,

@phuclv: Yay, progressi!
mpb,

-2

Invalid argumentdice che qualcosa non va negli argomenti per il swaponcomando.

Prima di tutto, leggi man swapon.

Prova sudo swapon swapfile2. Nel mio caso funziona.


5
Pensi che potrei trovare -v e -f flag senza leggere la pagina man?
malat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.