Добавить Swap в CentOS/Fedora/RedHat

Добавить Swap в CentOS/Fedora/RedHat

Иногда, приходит время использовать SWAP из-за того что «заканчивается» оперативная память. Ну или нужно изменить файл подкачки ( увеличить или уменьшить). Т.к данные действия производятся очень редко, то я не держу в голове и мне приходится обращаться за помощью в гугл. Но данная статья «Добавить Swap в CentOS/Fedora/RedHat» будет служить как заметкой на момент использования.

Проверяем наличие SWAP-а в CentOS/Fedora/RedHat

Прежде чем я начну, нужно взглянуть на хранение сервера, чтобы увидеть имеется ли подкачка. Чтобы посмотреть данную информацию, можно выполнить одно из ниже упомянутых утилит.

Через утилиту swapon:

[root@localhost ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/dm-1                               partition	2031612	0	-1
[root@localhost ~]# 

Если ничего не возвращается командой, то на сервере нет файла для подкачки. У меня он есть, я ему выделил 2Гб. Но предположим что мне этого мало и я хотел бы увеличить его до 3-4Гб.

Другой способ проверки — это использовать утилиту «free», которая показывает нам общее использование памяти в системе. Мы можем видеть нашу текущую память и использование подкачки (в мегабайтах), введя:

# free -m
total used free shared buffers cached
Mem: 3953 315 3637 8 11 107
-/+ buffers/cache: 196 3756
Swap: 0 0 4095

Еще один способ — это с утилитой htop/top:

$ htop
$ top

Удобный для проверки способ выбирайте сами.

Проверяем дискового пространства и свободного места в CentOS/Fedora/RedHat

Т.к SWAP использует фал созданный на вашем HDD, то необходимо знать сколько имеется свободного места для данной операции. Я обычно использую утилиту — df:

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_servercentos-lv_root
                       18G  7.3G  9.8G  43% /
tmpfs                 491M  232K  491M   1% /dev/shm
/dev/sda1             477M  150M  302M  34% /boot
[root@localhost ~]# 

Как я вижу из вывода, место имеется и я смогу выделить 3Гб легко.

Создание файла подкачки (SWAP) в CentOS/Fedora/RedHat

Я приведу 2 способа как можно создать данный файл для подкачки. Я буду хранить свой файл подкачки в папке которую я создам:

# mkdir /home/captain/swap

Вы можете использовать любое другое место.

—- СПОСОБ 1 — Это использование утилиты fallocate.

Самый быстрый и простой способ для создания файла подкачки — использование fallocate. Эта команда создает файл с мгновенным размером. Я выделю себе файл подкачки с 3 Гб, набрав:

# fallocate -l 3G /home/captain/swap/swap.img

Чтобы проверить что вышло, выполните:

[root@localhost ~]# ls -alh /home/captain/swap/swap.img
-rw-r--r--. 1 root root 3.0G Feb 12 03:39 /home/captain/swap/swap.img
[root@localhost ~]# 

Как вы можете видеть, файл подкачки был создан с правильным размером.

—- СПОСОБ 2 — Это использование утилиты dd.

Определите размер нового файла подкачки в мегабайтах (парметр «count») и умножить на 1024, чтобы определить количество блоков. Например, создаем файл подкачки с 1Гб:

# dd if=/dev/zero of=/home/captain/swap/swap.img bs=1024 count=1024000

Так же, можно указать создаваемый блок не в мегабайтах, а в гигабайтах:

[root@localhost swap]# time dd if=/dev/zero of=/home/captain/swap/swap.img bs=2G count=1
dd: writing `/home/captain/swap/swap.img': No space left on device
0+5 records in
0+4 records out
10615627776 bytes (11 GB) copied, 144.066 s, 73.7 MB/s

real	2m24.196s
user	0m0.000s
sys	0m55.893s
[root@localhost swap]# 

Я использовал утилиту «time» для того чтобы показать на сколько долго это занимает времени.

Включаем/Подключаем Swap в CentOS/Fedora/RedHat

На данный момент, файл создался, но система не знает, что это за файл и как с ним работать. По этому, нужно включить его. Перед тем, как сделать это, мы должны выставить нужные права на файл подкачки так, чтобы он не может быть прочитан кем-либо (кроме пользователя root). Предоставление другим пользователям чтение или запись в этот файл будет огромный риск для безопасности. По этому, выставляем:

# chmod 600 /home/captain/swap/swap.img

Смотрим что вышло:

[root@localhost swap]# ls -alh /home/captain/swap/swap.img 
-rw-------. 1 root root 3.0G Feb 12 03:57 /home/captain/swap/swap.img
[root@localhost swap]# 

Теперь, когда наш файл подкачки является более безопасным, можем создать пространство подкачки:

[root@localhost swap]# mkswap /home/captain/swap/swap.img
mkswap: /home/captain/swap/swap.img: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.
Setting up swapspace version 1, size = 3145724 KiB
no label, UUID=4fc28e9e-8eef-4a01-86a6-67bb522cb707
[root@localhost swap]# 

Наш файл подкачки теперь готов к использованию, но нужно еще его включить:

# swapon /home/captain/swap/swap.img

Чтобы убедиться в том, что все выполнено правильно, можем проверить это:

[root@localhost swap]# swapon -s
Filename				Type		Size	Used	Priority
/dev/dm-1                               partition	2031612	173936	-1
/home/captain/swap/swap.img             file		3145724	0	-2
[root@localhost swap]# 

Этот вывод подтверждает, что в системе имеется новый файл подкачки. Вот еще один вывод:

[root@localhost swap]# free -m
             total       used       free     shared    buffers     cached
Mem:           980        263        717          0          6         49
-/+ buffers/cache:        207        773
Swap:         5055        169       4886
[root@localhost swap]# 

С помощью утилиты free, видно что у меня своп уже не 2Гб ( как было ранее), а уже 5Гб. Swap был успешно установлен и ОС начнет использовать его по мере необходимости.

Чтобы выключить его с ОС, используйте:

# swapoff /home/captain/swap/swap.img
# swapon -s

Он будет работать до перезагрузки ОС.

Автоматическое монтирование Swap в CentOS/Fedora/RedHat

Файл подкачки включен в данный момент, но когда перезагрузится сервер, то файл подкачки не будет использоваться больше, по этому нужно прописать его в файле FSTAB, который представляет собой таблицу, которая управляет файловыми системами и разделами:

$ sudo vim /etc/fstab

В данном файле, необходимо добавить строку, которая сообщит операционной системе автоматически использовать файл подкачки, который вы создали:

/home/captain/swap/swap.img swap swap sw 0 0

Взаимодействие SWAP с ОС. Проверика и настройка.

Есть несколько вариантов, которые вы можете настроить для более лучшей производительности вашей системы при работе со свопом.

Параметр swappiness определяет, как часто ваша система обменивается данными из оперативной памяти в подкачку. Этот параметр имеет диапазон от 0-100 и представляет собой процент.

При значениях, близких к нулю, ядро ​​не обменяется данными на диск, если это абсолютно необходимо. Помните, что взаимодействие с файлом подкачки являются «дорогими» в том плане, что такие операции занимают гораздо больше времени, чем взаимодействие с оперативной памятью и тем самым могут привести к значительному снижению производительности.

Значения, которые находятся ближе к 100%, ядро будет пытаться поместить больше данных в своп и освободить RAM.

Чтобы проверить текущее значение swappiness, выполните:

# cat /proc/sys/vm/swappiness
60

Т.к я использую виртуальную машину для тестов  — установка swappiness в 60 — дает не плохое значение, но для VPS желательно приблизить данный параметр в 0. И чтобы изменить swappiness используйте команду SYSCTL.

Например, чтобы установить swappiness в 10, выполним:

# sysctl vm.swappiness=10
vm.swappiness = 10

Этот параметр не сохранится до следующей перезагрузки и чтобы он применялся при каждом запуски ОС автоматически, нужно изменить (добавив строку в) файл /etc/sysctl.conf:

# vim /etc/sysctl.conf

В самом низу файла, прописываем:

vm.swappiness=10

Сохраняем и закрываем файл.

Другой связанной с этим значением параметр которое вы можете захотеть изменить — vfs_cache_pressure, который настраивает, как много система будет выбирать кэш иноде и dentry по сравнению с другими данными.В основном, это доступ к данным о файловой системе и чтобы посмотреть текущее значение, выполните:

# cat /proc/sys/vm/vfs_cache_pressure
100 

Параметр установлен в 100 и тем самым система удаляет информацию инодам из кэша очень быстро. Но если захотите уменьшить, выполните:

# sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50 

Это будет работать только до завершения вашей сессии и вы можем изменить его в файле ( как и ранее):

$ sudo vim /etc/sysctl.conf

В самом низу происываем строку, которая определяет ваше новое значение:

vm.vfs_cache_pressure = 50

Как видим, все работает и нет ничего сложного.

Полезная статья:

Увеличить SWAP на Ubuntu/Debian/Mint

Вот и все, тема «Добавить Swap в CentOS/Fedora/RedHat» завершена.

2 thoughts on “Добавить Swap в CentOS/Fedora/RedHat

  1. dd: writing `/home/captain/swap/swap.img’: No space left on device
    0+5 records in
    0+4 records out
    10615627776 bytes (11 GB) copied, 144.066 s, 73.7 MB/s

    Не моргнул глазом и прям так в статью и запостил.

  2. А если у меня уже есть swap но в виде partition? Можно и нужно увеличивать этот раздел, или создавать дополнительный файл как в вашей статье?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.