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.j2templates/

{{ 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が実行されるたびにサービスが再エクスポートされるのを防ぐ必要があります。

おすすめ記事