Situation en 2019
Le développement de Btrfs et du noyau Linux a rendu ma réponse d'origine obsolète . Veuillez consulter cette autre réponse.
Réponse originale de 2016
De la FAQ de btrfs :
Est-ce que btrfs supporte les fichiers d'échange ?Actuellement non. Le simple fait de créer un fichier NOCOW n'aide pas, la prise en charge des fichiers d'échange repose sur une fonction que btrfs n'implémente pas intentionnellement en raison de corruptions potentielles. (...) Une solution de contournement, bien qu'avec des performances médiocres, consiste à monter un fichier d'échange via un périphérique de boucle.
Il n'y a donc pas encore de bon moyen de créer un fichier d'échange sur la partition btrfs.
Comme mentionné ci-dessus, depuis Linux 5.0 il est maintenant possible de créer des fichiers d'échange sur BTRFS. Mais ils doivent être non compressés et NoCOW.Voici comment créer réellement un tel fichier :
- Créer un fichier vide :
touch /swap
- Utilisez
chattr
pour définirNoCOW
lui attribuer :chattr +C /swap
- Vérifiez que
C
l'attribut est apparu :lsattr /swap
- Remplissez-le :
dd if=/dev/zero of=/swap bs=1M count=1024
# pour 1 gigaoctet mkswap /swap && chmod 600 /swap && swapon /swap
Alternativement, vous pouvez créer un répertoire, définir chattr +C
dans ce répertoire, puis créez un fichier d'échange sous celui-ci.
Notez que vous ne pouvez pas faire chattr +C
vers un fichier non vide déjà existant. Il est documenté comme étant un comportement indéfini (en fait, il ne change tout simplement pas les attributs). Vous devez donc soit créer un fichier vide puis chattr
, ou créer un répertoire avec chattr
puis créez-y un fichier (dans ce cas, tous les fichiers créés après chattr
le répertoire aura l'attribut nocow).
Mise en garde : comme mentionné, cela nécessite la version 5.0 ou supérieure du noyau. Raspberry Pi, par exemple, utilise des noyaux 4.19.*, vous ne pourrez donc pas utiliser cette technique dessus.
La prise en charge des fichiers d'échange a été ajoutée à la version 5.0 du noyau, comme on peut le voir sur commit https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ed46ff3d423780fa5173b38a844bf0fdb210a2a7Pour activer l'échange fichier sur btrfs, le fichier doit être entièrement alloué en tant que NOCOW sans compression sur un seul appareil.