Как я могу создать и включить постоянный файл подкачки размером 1 ГБ со стеком соли, который будет работать после перезагрузки? salt.states.mount.swap
не позволяет определить размер свопа. Кроме того, мне нужно определить swappiness. В настоящее время я делаю это с echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf
Это то, что я использую в системах на основе Debian. Это улучшенная версия ответа Дэна. Он получает доступную память из зерна, умножает ее на 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
Сейчас я использую это в продакшене, у меня работает.
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"
С помощью 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
Я делаю то же самое с ответом Дэна:
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"
Это смотрит на то, какой общий своп имеет система, если он меньше 3 ГБ, создайте файл подкачки 3 ГБ и убедитесь, что он сохраняется между перезагрузками через /etc/fstab
. Если вы хотите убедиться, что ваша конфигурация подкачки установлена, вы можете сделать что-то вроде:
configure_swappiness:
file.append:
- name: /etc/sysctl.conf
- text: vm.swappiness = 10