Ansible을 통해 systemd로 구성된 스왑 파일을 비활성화하는 방법은 무엇입니까?

Ansible을 통해 systemd로 구성된 스왑 파일을 비활성화하는 방법은 무엇입니까?

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디스크에서 메모리로 아무것도 이동할 수 없기 때문에 그 직후 실행하는 데는 swapon1초도 채 걸리지 않습니다. 하지만 확실히 달려야 해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: startedansible이 실행될 때마다 서비스가 다시 내보내지는 것을 방지해야 합니다.

관련 정보