Non riesco ad abilitare lo spazio di Swap su CentOS 7


55

Quindi sto seguendo un tutorial per installare OTRS che è Open Source Ticket Request System. Quindi, per l'installazione, richiede: 4 GB di spazio di swap. Ecco il comando che ho usato:

[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

Puoi vedere: Errore argomento non valido qui. Ho provato molte volte invano per abilitarlo. Qualcuno mi dica come risolvere questo errore. (Sto eseguendo questo CentOS 7 su AWS Instance EC2)

[root@ip-10-0-7-41 ~]# df -T | awk '{print $1,$2,$NF}' | grep "^/dev"
/dev/xvda1 xfs /

Su quale filesystem sta succedendo? btrfs per caso?
schaiba,

@schaiba Ciao, ho modificato la mia domanda. Penso che il filesystem sia xfs.
The One

2
Su XFS infatti è meglio usarlo dd. Tieni presente che non tutti i filesystem supportano lo swap o almeno non allo stesso modo.
schaiba,

@schaiba Non conoscevo molto bene il tipo di filesystem. Grazie mille.
The One

Risposte:


102

Il problema fallocate(1)è che usa il filesystem ioctlsper rendere l'allocazione veloce ed efficace, lo svantaggio è che non alloca fisicamente lo spazio ma swapon(2)syscall richiede uno spazio reale. Riferimento: https://bugzilla.redhat.com/show_bug.cgi?id=1129205

Avevo affrontato questo problema in precedenza anche con la mia scatola. Quindi, invece di usare fallocate, ho usato ddcome suggerisce il link

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

e andare avanti con chmod, mkswape swaponcomandi. Bingo! Ha funzionato.


1
Stranamente, un file di scambio fallocate ha funzionato bene su Ubuntu 16.04.3 LTS, ma fallisce con "swapon failed: Argomento non valido" su Red Hat Enterprise Linux Server versione 7.4 (Maipo). Il comando dd fornito sopra funziona davvero su RedHat. Ci deve essere qualcosa di diverso tra i due sistemi operativi che consente a fallocate di funzionare su Ubuntu.
Davidian1024,

La soluzione funziona su CentOS 7.5
NerdOfCode

ddsembra che stia facendo molto più lavoro time dd if=/dev/zero of=/myswap count=4096 bs=1MiBimpiega 14,003 secondi dove time fallocate -l 4G /swap3impiega 0,018 secondi, ma producono lo stesso file di dimensioni. Immagino che fallocatenon copi negli zeri come ddfa e abbia swaponbisogno di quegli zeri.
Daniel Wisehart,

swapon: /swapfile: read swap header failed: Invalid argumentha ottenuto questo errore dopo aver tentato di swapon /swapfileeseguire il server Puppetenterprise di centos7
Brian Thomas l'

@BrianThomas Sembra che tu abbia dimenticato di eseguire mkswap sul file dopo averlo creato con dd.
jblaine,

17

Segui questi passaggi, funziona sulle goccioline di DigitalOcean. Ho provato. Modifica l'importo 4096 in base alle tue necessità

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

aggiungi questa riga:

/swapfile   swap    swap    sw  0   0

eseguire questo comando

sudo sysctl vm.swappiness=10

sudo nano /etc/sysctl.conf

aggiungi questa linea

vm.swappiness = 10
vm.vfs_cache_pressure = 50

Per verificare le dimensioni dello swap

swapon --summary
free -h

2
Il mio ddcomando sarebbe dd if=/dev/zero of=/swapfile count=4 bs=1GiBperché non posso essere disturbato dal calcolo dei mebibyte nei gibibyte se ddposso farlo per me. Lo sapevi che ai tempi di un tempo la gente lo esprimeva in kibibyte e lo calcolava a mano in gibibyte? Incredibile!
Amedee Van Gasse,

@AmedeeVanGasse la versione del comando dd richiede in realtà 1GiB di memoria e il comando fallirà se non si dispone di memoria sufficiente.
Fabiano,

@Fabiano si e? Il tuo punto è ...?
Amedee Van Gasse,

2
@AmedeeVanGasse il mio punto è che se non vuoi preoccuparti di calcolare MiB e GiB, bs=non è il modo corretto per farlo, poiché ha conseguenze indesiderate, come l'efficienza del danno e probabilmente non funziona sulla maggior parte degli hosting a basso costo. Se sei solo pigro, usa count_bytese lascia ddfare a te sia la matematica sia la scelta di una dimensione del blocco efficiente: dd if=/dev/zero of=/swapfile count=4GiB iflag=count_bytes=)
Fabiano

iflag=count_bytesè un eccellente miglioramento per il tuo commento. E non sono pigro, mi interessa la leggibilità. Tra 6 mesi quando rileggerò la mia sceneggiatura (o quando arriverà il prossimo manutentore), il lettore deve capire cosa sta succedendo. Non sono solo i computer a leggere il codice, anche gli umani leggono il codice!
Amedee Van Gasse,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.