Ich kann Swap Space unter CentOS 7 nicht aktivieren

55

Ich folge daher einem Tutorial zur Installation von OTRS, dem Open Source Ticket Request System. Für die Installation sind also 4 GB Swap-Speicherplatz erforderlich. Hier ist der Befehl, den ich verwendet habe:

[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

Sie können sehen: Ungültiger Argumentfehler hier. Ich habe viele Male vergeblich versucht, es zu aktivieren. Bitte sagen Sie mir, wie ich diesen Fehler beheben kann. (Ich führe dieses CentOS 7 unter AWS Instance EC2 aus.)

[root@ip-10-0-7-41 ~]# df -T | awk '{print $1,$2,$NF}' | grep "^/dev"
/dev/xvda1 xfs /
Der Eine
quelle
Auf welchem ​​Dateisystem geschieht dies? btrfs zufällig?
Schaiba
Hallo, ich habe meine Frage bearbeitet. Ich denke, das Dateisystem ist XFS.
The One
2
Auf XFS ist es in der Tat besser zu verwenden dd. Bitte beachten Sie, dass nicht alle Dateisysteme Swap unterstützen oder zumindest nicht auf die gleiche Weise.
Schaiba
@schaiba Ich wusste nicht sehr gut über die Art des Dateisystems. Vielen Dank.
The One

Antworten:

102

Das Problem dabei fallocate(1)ist, dass es das Dateisystem verwendet ioctls, um die Zuweisung schnell und effektiv zu machen. Der Nachteil ist, dass es den Speicherplatz nicht physisch zuweist, sondern dass swapon(2)syscall einen realen Speicherplatz benötigt. Referenz: https://bugzilla.redhat.com/show_bug.cgi?id=1129205

Ich hatte dieses Problem früher auch mit meiner Box konfrontiert. Also, anstatt zu verwenden fallocate, habe ich, ddwie der Link andeutet, verwendet

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

und weiter mit chmod, mkswap& swaponbefehlen. Bingo! Es funktionierte.

Rahul
quelle
1
Seltsamerweise funktionierte eine fallocate'd Swap-Datei unter Ubuntu 16.04.3 LTS einwandfrei, schlägt jedoch mit "swapon failed: Invalid argument" unter Red Hat Enterprise Linux Server Version 7.4 (Maipo) fehl. Der oben angegebene Befehl dd funktioniert tatsächlich mit RedHat. Es muss etwas anderes zwischen den beiden Betriebssystemen geben, das es Fallocate ermöglicht, unter Ubuntu zu arbeiten.
Davidian1024
Lösung funktioniert auf CentOS 7.5
NerdOfCode
ddtime dd if=/dev/zero of=/myswap count=4096 bs=1MiBScheint viel mehr Arbeit zu leisten, dauert 14.003 Sekunden, wobei 0.018 Sekunden erforderlich time fallocate -l 4G /swap3sind, sie produzieren jedoch die gleiche Dateigröße. Ich vermute, dass fallocatenicht in Nullen kopiert wird, wie dddies der Fall ist und swapondiese Nullen benötigt.
Daniel Wisehart
swapon: /swapfile: read swap header failed: Invalid argumenthabe diesen Fehler erhalten, nachdem swapon /swapfileich versucht habe, auf dem centos7 puppetenterprise server
Brian Thomas
@BrianThomas Das hört sich so an, als hätten Sie vergessen, mkswap für die Datei auszuführen, nachdem Sie sie mit dd erstellt haben.
Jblaine
17

Befolgen Sie diese Schritte, es funktioniert auf DigitalOcean-Tröpfchen. Ich habe getestet. Ändern Sie die Menge 4096 entsprechend Ihrem Bedarf

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

füge diese Zeile hinzu:

/swapfile   swap    swap    sw  0   0

Führen Sie diesen Befehl aus

sudo sysctl vm.swappiness=10

sudo nano /etc/sysctl.conf

füge diese Zeile hinzu

vm.swappiness = 10
vm.vfs_cache_pressure = 50

So überprüfen Sie die Größe des Swap

swapon --summary
free -h
Dylan B
quelle
2
Mein ddBefehl wäre, dd if=/dev/zero of=/swapfile count=4 bs=1GiBweil ich nicht die Mühe habe, Mebibyte in Gibibyte zu berechnen, wenn ddich das für mich tun kann. Wussten Sie, dass die Menschen es in früheren Zeiten in Kibibyte ausgedrückt und in Gibibyte von Hand berechnet haben? Unglaublich!
Amedee Van Gasse
@AmedeeVanGasse Ihre Version des Befehls dd benötigt tatsächlich 1 GB Speicher und der Befehl schlägt fehl, wenn Sie nicht über so viel freien Speicher verfügen.
Fabiano
@ Fabiano ja und? Ihr Punkt ist ...?
Amedee Van Gasse
2
@AmedeeVanGasse Mein Punkt ist, dass, wenn Sie sich nur nicht mit der Berechnung von MiBs und GiBs beschäftigen möchten, dies bs=nicht der richtige Weg ist, da es unbeabsichtigte Konsequenzen hat, wie die Effizienz zu beeinträchtigen und wahrscheinlich auf den meisten kostengünstigen Hostings nicht funktioniert. Wenn Sie nur faul sind, verwenden Sie count_bytesund lassen ddSie für Sie sowohl die Mathematik als auch die Auswahl einer effizienten Blockgröße tun: dd if=/dev/zero of=/swapfile count=4GiB iflag=count_bytes=)
Fabiano
iflag=count_bytesist eine hervorragende Verbesserung für Ihren Kommentar. Und ich bin nicht faul, mir ist die Lesbarkeit wichtig. In 6 Monaten, wenn ich mein Skript erneut lese (oder wenn der nächste Betreuer kommt), muss der Leser verstehen, was los ist. Es sind nicht nur Computer, die Code lesen, sondern auch Menschen!
Amedee Van Gasse