web-dev-qa-db-fra.com

Échec de Swapon: argument non valide sur un système Linux avec le système de fichiers Btrfs

Quel est le problème avec cette séquence d'opérations, s'exécutant sur un système Debian Squeeze avec un système de fichiers 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

Mon système de fichiers est:

$ 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)
15
malat

Ce rapport de bogue mène à cette discussion

Donc, "argument invalide" devrait être lu comme "Votre système de fichiers ne supporte pas le fichier d'échange"

comme posté par malat

15
Sathyajith Bhat

J'ai moins de 50 ans de réputation donc je ne peux pas commenter. Mais je dois mettre à jour les réponses existantes. Dans le noyau Linux 5.0.0, btrfs supporte nativement swapfile maintenant. (Vous devez le définir comme non-COW)

Voici quelques informations de kernel.org: https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F

Depuis le noyau 5.0+, btrfs prend en charge les fichiers d'échange natifs, mais avec certaines limitations. Fichier d'échange - doit être entièrement alloué en tant que NOCOW sans compression sur un périphérique.

Ce lien montre comment procéder: https://wiki.archlinux.org/index.php/swap#Swap_file .

NE PAS ESSAYER DANS LINUX <4.21 !!!

Avertissement: Btrfs sur le noyau Linux antérieur à la version 5.0 ne prend pas en charge les fichiers d'échange. Ne pas tenir compte de cet avertissement peut entraîner une corruption du système de fichiers. Bien qu'un fichier d'échange puisse être utilisé sur Btrfs lorsqu'il est monté via un périphérique en boucle, les performances de l'échange seront gravement dégradées.

5
recolic

Si vous voulez quand même échanger un fichier, utilisez simplement btrfs-swapon

2
Sebastian Wagner

Mise à jour avril 2019 : Voir la réponse de recolic qui affirme que Btrfs a commencé à prendre en charge le swap à partir de la version 5.0.0 du noyau Linux.

Réponse originale:

La réponse de Sathya semble contenir des liens morts.

J'ai trouvé ceci dans la FAQ de Btrfs:

Est-ce que btrfs supporte les fichiers d'échange?

Actuellement non. La création d’un fichier NOCOW n’aide en rien, la prise en charge des fichiers d'échange repose sur une fonction que btrfs ne met pas intentionnellement en œuvre en raison de corruptions potentielles. L'implémentation de swap reposait habituellement sur certaines hypothèses qui ne sont peut-être pas valables dans btrfs, telles que les numéros de bloc dans le fichier d'échange, alors que btrfs utilise un mappage de numéro de bloc différent dans le cas de plusieurs périphériques. Il existe une nouvelle API qui pourrait être utilisée pour porter le swap sur btrfs; pour plus de détails, jetez un coup d'œil aux idées de projets # Support du fichier d'échange.

Une solution de contournement, même si les performances sont médiocres, consiste à monter un fichier d'échange via un périphérique en boucle.

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

0
mpb