CentOS 7에서 스왑 공간을 활성화 할 수 없습니다


55

그래서 오픈 소스 티켓 요청 시스템 인 OTRS를 설치하는 튜토리얼을 따르고 있습니다. 따라서 설치하려면 4GB의 스왑 공간이 필요합니다. 내가 사용한 명령은 다음과 같습니다.

[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

당신은 볼 수 있습니다 : 여기에 잘못된 인수 오류가 있습니다. 이 오류를 해결하기 위해 많은 시간을 허비했습니다. (AWS 인스턴스 EC2에서이 CentOS 7을 실행하고 있습니다)

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

무슨 일이 일어나고 있습니까? 우연히 btrfs?
schaiba

@ schaiba 안녕하세요, 내 질문을 편집했습니다. 파일 시스템은 xfs라고 생각합니다.
하나의

2
XFS에서는 실제로 사용하는 것이 좋습니다 dd. 모든 파일 시스템이 스왑을 지원하거나 최소한 같은 방식으로 지원하지는 않습니다.
schaiba

@ schaiba 파일 시스템 유형에 대해 잘 몰랐습니다. 정말 고마워.
하나의

답변:


102

문제 fallocate(1)는 파일 시스템 ioctls을 사용하여 할당을 빠르고 효율적으로 만드는 것입니다. 단점은 물리적으로 공간을 할당하지 않지만 swapon(2)syscall에는 실제 공간이 필요하다는 것입니다. 참조 : https://bugzilla.redhat.com/show_bug.cgi?id=1129205

내 상자 에서도이 문제에 일찍 직면했습니다. 그래서을 사용하는 대신 링크가 제안한대로 fallocate사용 dd했습니다.

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

chmod, mkswap& swapon명령 으로 진행 합니다. 빙고! 효과가있었습니다.


1
홀수, 낙태 된 스왑 파일이 Ubuntu 16.04.3 LTS에서 제대로 작동했지만 Red Hat Enterprise Linux Server 릴리스 7.4 (Maipo)에서 "스왑 실패 : 잘못된 인수"로 실패했습니다. 위에 제공된 dd 명령은 실제로 RedHat에서 작동합니다. fallocate가 우분투에서 작동하도록 허용하는 두 OS 간에는 다른 것이 있어야합니다.
Davidian1024

솔루션은 CentOS 7.5
NerdOfCode에서 실행했습니다.

dd0.018 초가 time dd if=/dev/zero of=/myswap count=4096 bs=1MiB걸리는 14.003 초가 훨씬 더 많은 작업을 수행하는 것으로 time fallocate -l 4G /swap3보이지만 동일한 크기의 파일을 생성합니다. 나는 추측하고 fallocate방법이 제로에 복사하지 않습니다 dd수행하고 swapon그 0을 필요로한다.
다니엘 와이즈 하트

swapon: /swapfile: read swap header failed: Invalid argumentswapon /swapfilecentos7 puppetenterprise 서버에서 시도한 후이 오류가 발생했습니다
Brian Thomas

@BrianThomas dd로 파일을 만든 후 파일에서 mkswap을 실행하는 것을 잊은 것처럼 들립니다.
jblaine

17

다음 단계에 따라 DigitalOcean의 물방울에서 작동합니다. 나는 테스트했다. 필요에 따라 4096을 변경하십시오.

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

이 줄을 추가하십시오 :

/swapfile   swap    swap    sw  0   0

이 명령을 실행

sudo sysctl vm.swappiness=10

sudo nano /etc/sysctl.conf

이 줄을 추가

vm.swappiness = 10
vm.vfs_cache_pressure = 50

스왑의 크기를 확인하려면

swapon --summary
free -h

2
dd명령은 dd if=/dev/zero of=/swapfile count=4 bs=1GiB내가 할 수 있다면 기가 바이트 단위로 계산하는 데 방해 가 될 수 없기 때문 dd입니다. 사람들이 요레 시대에 그것을 킬로바이트로 표현하고 그것을 기가 바이트로 직접 계산 한 것을 알고 있습니까? 놀랄 만한!
Amedee Van Gasse

@AmedeeVanGasse dd 명령 버전은 실제로 1GiB의 메모리가 필요하며 사용 가능한 메모리가 많지 않으면 명령이 실패합니다.
Fabiano

@Fabiano 네? 요점은 ...?
Amedee Van Gasse

2
@AmedeeVanGasse 내 요점은 MiB 및 GiB 계산에 신경 쓰지 않으려 bs=는 경우 의도하지 않은 결과와 같은 의도하지 않은 결과를 초래하고 대부분의 저렴한 호스팅에서 작동하지 않을 가능성이 있기 때문에 적절한 방법이 아니라는 것입니다. 당신은 그냥 게으른 경우, 사용 count_bytes및하게 dd당신을 위해 수학 및 효율적인 블록 크기의 선택에 모두 수행합니다 dd if=/dev/zero of=/swapfile count=4GiB iflag=count_bytes=)
파비아누

iflag=count_bytes귀하의 의견을 크게 개선했습니다. 나는 게으르지 않고 가독성에 관심이 있습니다. 6 개월 동안 스크립트를 다시 읽거나 (또는 ​​다음 관리자가 등장 할 때) 독자는 진행 상황을 이해해야합니다. 코드를 읽는 컴퓨터뿐만 아니라 인간도 코드를 읽는 것입니다!
Amedee Van Gasse
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.