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.