如何使用盐栈启用交换?

如何使用盐栈启用交换?

如何使用 salt stack 创建并启用永久的 1GB 交换文件,使其在重启后可用?salt.states.mount.swap不允许定义交换大小。此外,我需要定义 swappiness。目前我使用echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf

答案1

我目前在生产中使用它,对我来说很有用。

community_swap_file:
  cmd.run:
    - name: |
        [ -f /.swapfile ] || dd if=/dev/zero of=/.swapfile bs=1M count=2048
        chmod 0600 /.swapfile
        mkswap /.swapfile
        echo '/.swapfile      none      swap     sw       0       0' >> /etc/fstab
        swapon -a
    - unless: file /.swapfile 2>&1 | grep -q "Linux/i386 swap"

答案2

这是我在基于 debian 的系统上使用的方法。它是 Dan 的答案的改进版本。它从 Grain 中获取可用内存,将其乘以 2,以创建具有适当大小的交换文件。如果不存在,它还会在 /etc/fstab 中创建一个条目。

coreutils:
  pkg.installed

/swapfile:
  cmd.run:
    - name: |
        [ -f /swapfile ] || dd if=/dev/zero of=/swapfile bs=1M count={{ grains["mem_total"] * 2 }}
        chmod 0600 /swapfile
        mkswap /swapfile
        swapon -a
    - unless:
      - file /swapfile 2>&1 | grep -q "Linux/i386 swap"
  mount.swap:
    - persist: true

答案3

fallocate与 相比,使用是即时的dd。此外,如果您在支柱中更改其大小,下面的状态将重新生成交换文件。此版本还省略了多余的swapon -a,它mount.swap会为您处理。

{% set swapfile = salt['pillar.get']('swapfile', {}) %}
{% set size = swapfile.get('size', grains["mem_total"]) %}
{% set path = swapfile.get('path', '/var/swapfile0') %}

{{ path }}:
  cmd.run:
    - name: |
        swapon --show=NAME --noheadings | grep -q "^{{ path }}$" && swapoff {{ path }}
        rm -f {{ path }}
        fallocate -l {{ size }}M {{ path }}
        chmod 0600 {{ path }}
        mkswap {{ path }}
    - unless: bash -c '[[ $(($(stat -c %s {{ path }}) / 1024**2)) = {{ size }} ]]'

  mount.swap:
    - persist: true

答案4

我正在做与丹的回答类似的事情:

configuring_swap:
  cmd.run:
    - name: |
        [ -f /var/swap.1 ] && swapoff /var/swap.1
        dd if=/dev/zero of=/var/swap.1 bs=1M count=3072
        chmod 0600 /var/swap.1
        mkswap /var/swap.1
        swapon /var/swap.1
    - unless:
      - "[ `free -b | awk '/Swap/{print $2}'` -ge 3221225472 ]"
  file.append:
    - name: /etc/fstab
    - text: /var/swap.1  swap  swap  defaults  0 0
    - onlyif:
      - file /var/swap.1 2>&1 | grep -q "Linux/i386 swap"

这将查看系统的总交换空间,如果小于 3GB,则创建一个 3GB 的交换文件,并确保它在重新启动后保持不变/etc/fstab。如果你想确保你的 swappiness 配置到位,你可以这样做:

configure_swappiness:
  file.append:
    - name: /etc/sysctl.conf
    - text: vm.swappiness = 10

相关内容