Je ne peux pas activer l'espace de swap sur CentOS 7

55

Donc, je suis un tutoriel pour installer OTRS qui est Open Source Ticket Request System. Donc, pour installer, il faut: 4 Go d'espace d'échange. Voici la commande que j'ai utilisée:

[root@ip-10-0-7-41 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       50G   14G   37G  27% /
devtmpfs        478M     0  478M   0% /dev
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           496M   13M  484M   3% /run
tmpfs           496M     0  496M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/1000
[root@ip-10-0-7-41 ~]# fallocate -l 4G /myswap
[root@ip-10-0-7-41 ~]# ls -lh /myswap
-rw-r--r--. 1 root root 4.0G Jul  8 08:44 /myswap
[root@ip-10-0-7-41 ~]# chmod 600 /myswap
[root@ip-10-0-7-41 ~]# mkswap /myswap
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=3656082a-148d-4604-96fb-5b4604fa5b2e
[root@ip-10-0-7-41 ~]# swapon /myswap
swapon: /myswap: swapon failed: Invalid argument

Vous pouvez voir: Erreur d'argument invalide ici. J'ai essayé plusieurs fois en vain de l'activer. Quelqu'un peut-il me dire comment corriger cette erreur. (J'exécute ce CentOS 7 sur AWS Instance EC2)

[root@ip-10-0-7-41 ~]# df -T | awk '{print $1,$2,$NF}' | grep "^/dev"
/dev/xvda1 xfs /
Celui
la source
Sur quel système de fichiers cela se passe-t-il? btrfs par hasard?
Schaiba
@schaiba Bonjour, j'ai modifié ma question. Je pense que le système de fichiers est xfs.
Le One
2
Sur XFS, en effet, il vaut mieux l’utiliser dd. Gardez à l'esprit que tous les systèmes de fichiers ne supportent pas l'échange ou du moins pas de la même manière.
Schaiba
@schaiba Je ne connaissais pas très bien le type de système de fichiers. Merci beaucoup.
Le One

Réponses:

102

Le problème fallocate(1)est qu’il utilise un système ioctlsde fichiers pour rendre l’attribution rapide et efficace. L’inconvénient est qu’il n’alloue pas physiquement l’espace mais que l’ swapon(2)appel système nécessite un espace réel. Référence: https://bugzilla.redhat.com/show_bug.cgi?id=1129205

J'avais déjà fait face à ce problème plus tôt avec ma boîte. Donc, au lieu d'utiliser fallocate, j'ai utilisé ddcomme le suggère le lien

sudo dd if=/dev/zero of=/myswap count=4096 bs=1MiB

et aller de l'avant avec chmod, mkswap& swaponcommandes. Bingo! Ça a marché.

Rahul
la source
1
Odd, un fichier d'échange fallocate'd a bien fonctionné pour moi sous Ubuntu 16.04.3 LTS mais il a échoué avec "swapon failed: argument invalide" sous Red Hat Enterprise Linux Server version 7.4 (Maipo). La commande dd fournie ci-dessus fonctionne bien sur RedHat. Il doit y avoir quelque chose de différent entre les deux systèmes d’exploitation qui permet à fallocate de fonctionner sur Ubuntu.
Davidian1024
La solution fonctionne sur CentOS 7.5
NerdOfCode
ddsemble faire beaucoup plus de travail time dd if=/dev/zero of=/myswap count=4096 bs=1MiBprend 14,003 secondes où time fallocate -l 4G /swap3prend 0,018 secondes, mais ils produisent le fichier de même taille. Je suppose que fallocatecela ne copie pas en zéros comme le ddfait et a swaponbesoin de ces zéros.
Daniel Wisehart le
swapon: /swapfile: read swap header failed: Invalid argumenta obtenu cette erreur après avoir essayé de swapon /swapfilesur le serveur centos7 puppetenterprise
Brian Thomas
@BrianThomas On dirait que vous avez oublié d'exécuter mkswap sur le fichier après l'avoir créé avec dd.
Jblaine
17

Suivez ces étapes, cela fonctionne sur les gouttelettes de DigitalOcean. J'ai testé. Modifiez le montant 4096 en fonction de vos besoins

yum install nano -y

sudo dd if=/dev/zero of=/swapfile count=4096 bs=1MiB
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

sudo nano /etc/fstab

ajoutez cette ligne:

/swapfile   swap    swap    sw  0   0

lancer cette commande

sudo sysctl vm.swappiness=10

sudo nano /etc/sysctl.conf

ajouter cette ligne

vm.swappiness = 10
vm.vfs_cache_pressure = 50

Pour vérifier la taille de l'échange

swapon --summary
free -h
Dylan B
la source
2
Ma ddcommande serait dd if=/dev/zero of=/swapfile count=4 bs=1GiBparce que je ne peux pas être dérangé par le calcul de mebibytes en gibyctets si ddje peux le faire pour moi. Saviez-vous que jadis, les gens l’exprimaient en kibibytes et calculaient cela en gibibytes? Incroyable!
Amédée Van Gasse
@AmedeeVanGasse, votre version de la commande dd nécessite en réalité 1 Go de mémoire et la commande échouera si vous n'avez pas beaucoup de mémoire disponible.
Fabiano
@ Fabiano oui et? Votre point est ...?
Amédée Van Gasse
2
@AmedeeVanGasse Mon point est que si vous ne voulez pas vous soucier de calculer les MiB et les GiB, ce bs=n'est pas la bonne façon de le faire, car cela a des conséquences inattendues, comme l'efficacité des blessures et ne fonctionne probablement pas avec la plupart des hébergements à faible coût. Si vous êtes simplement paresseux, utilisez count_byteset laissez ddfaire pour vous les calculs et le choix d’une taille de bloc efficace: dd if=/dev/zero of=/swapfile count=4GiB iflag=count_bytes=)
Fabiano
iflag=count_bytesest une excellente amélioration à votre commentaire. Et je ne suis pas paresseux, je me soucie de la lisibilité. Dans 6 mois, lorsque je relirai mon script (ou lorsque le prochain responsable viendra), le lecteur devra comprendre ce qui se passe. Il n'y a pas que les ordinateurs qui lisent le code, les humains le lisent aussi!
Amédée Van Gasse