Sujet : Re: configuration du swap
De : pascal (at) *nospam* plouf.fr.eu.org (Pascal Hambourg)
Groupes : fr.comp.os.linux.configurationDate : 02. Oct 2021, 11:42:52
Autres entêtes
Organisation : Guest of ProXad - France
Message-ID : <615837ac$0$6460$426a74cc@news.free.fr>
References : 1 2 3 4 5 6 7 8
User-Agent : Mozilla/5.0 (X11; Linux i686; rv:78.0) Gecko/20100101 Thunderbird/78.14.0
Le 02/10/2021 à 11:58, Marc SCHAEFER a écrit :
D'ailleurs, pourquoi ne pas créer un fichier de swap qui aurait des
trous? (sparse file)
Parce que ce n'est pas supporté. Tous les blocs doivent être alloués et mappables. Extrait de swapon(8) :
==================================================
Files with holes
The swap file implementation in the kernel expects to be able to write to the file directly, without the assistance of the filesystem. This is a problem on files with holes or on copy-on-write files on filesystems like Btrfs.
Commands like cp(1) or truncate(1) create files with holes. These files will be rejected by swapon.
Preallocated files created by fallocate(1) may be interpreted as files with holes too depending of the filesystem. Preallocated swap files are supported on XFS since Linux 4.18.
The most portable solution to create a swap file is to use dd(1) and /dev/zero.
==================================================
Toutefois, `swapon /tmp/bla' ne va pas fonctionner sous root
Ah, swapon fonctione sous un utilisateur non root ?
car il
estime que les fichiers à trous, c'est mal: forcer de l'allocation
d'espace dans le filesystem au moment même où on est probablement bas
dans la disponibilité de la mémoire vive n'est, à son avis, pas une
bonne idée.
Non, ce n'est pas la raison principale. Tout swap est utilisé comme un périphérique bloc, même quand c'est un fichier ; la seule différence, c'est qu'au lieu d'utiliser tous les blocs du périphérique le swap va utiliser seulement les blocs alloués au fichier en y accédant directement sans passer par le système de fichiers. C'est pour cela que les blocs doivent être alloués et mappables. C'est aussi pour cela que lorsqu'on utilise un fichier de swap pour l'hibernation, on ne spécifie pas le fichier de swap pour la reprise mais le périphérique bloc sous-jacent et l'offset du début du fichier dans celui-ci.
Si l'on le veut vraiment, on peut le faire quand même: sous root:
sw=$(losetup -f)
losetup $sw /tmp/bla
chmod 600 $sw
mkswap $sw
swapon $sw
Bonjour les performances pourries. Et effectivement on est à la merci des besoins en mémoire du système de fichiers.