systemd 및 Ansible을 사용하여 GNU/Linux 호스트 세트에서 스왑을 완전히 비활성화하는 가장 좋은 방법은 무엇입니까?
어떤 이유로든 내 VM 중 일부에는 다음과 같이 /etc/fstab
시작 시 자동으로 선택되는 스왑 파일이 구성되어 있습니다 systemd-fstab-generator
.
$ cat /run/systemd/generator/swapfile.swap
# Automatically generated by systemd-fstab-generator
[Unit]
SourcePath=/etc/fstab
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
[Swap]
What=/swapfile
여러 가지 이유로 이러한 시스템에서 실행되는 일부 서비스는 스왑 파일을 사용할 때 매우 느려지므로 해당 서비스가 사용되지 않도록 방지해야 합니다. 내 systemd 버전에는 아직 포함되지 않습니다.MemorySwapMax
.
나는 혼란을 피하고 싶고 /etc/fstab
이러한 스왑 파일을 제자리에 유지하는 데 신경 쓰지 않습니다.
맥락에 따라 저는 ansible-3.0.0, ansible-base-2.10.6을 사용하고 있습니다. 시스템은 CentOS 7, systemd 219입니다.
답변1
기본적으로 systemd가 해당 작업을 수행하도록 한 다음 다른 systemd 장치를 사용하여 즉시 재개할 수 있습니다.
확인해 보면 장치가 수행하는 모든 작업이 systemd show swapfile.swap
해당 파일에서 실행되는 것을 볼 수 있습니다. 수동으로 실행 swapon
하면 swapoff
다음 부팅 시 스왑이 다시 나타납니다.
swapoff
디스크에서 메모리로 아무것도 이동할 수 없기 때문에 그 직후 실행하는 데는 swapon
1초도 채 걸리지 않습니다. 하지만 확실히 달려야 해swapoff
뒤쪽에 swapon
, systemd에게 그렇게 하도록 지시할 수 있습니다 After=local-fs.target
.
플레이북이나 역할 디렉토리에 유닛 파일을 j2 템플릿으로 배치합니다 noswap.service.j2
.templates/
{{ ansible_managed|comment }}
[Unit]
Description=Disable swapfile
Documentation=man:swapon(8) man:systemd.swap(5)
After=local-fs.target
[Service]
Type=oneshot
User=root
ExecStart=/usr/sbin/swapoff -a
[Install]
WantedBy=default.target
스크립트나 캐릭터에 다음과 같은 내용을 포함하세요.
---
- name: Your playbook
tasks:
- name: Write noswap systemd service config file
template:
src: noswap.service.j2
dest: /etc/systemd/system/noswap.service
owner: root
group: root
mode: 0644
notify: Enable noswap service
handlers:
- name: Enable noswap service
systemd:
name: noswap
state: started
enabled: true
daemon_reload: true
처음 이후에는 부팅 중에 서비스가 시작되므로 state: started
ansible이 실행될 때마다 서비스가 다시 내보내지는 것을 방지해야 합니다.