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.