- Best way to disable swap in Linux
- 7 Answers 7
- SWAP — как создать, подключить, очистить и отключить файл подкачки в Linux
- Когда может понадобиться своп
- Преимущества SWAP
- Недостатки SWAP
- Как создать и подключить файл подкачки SWAP
- Проверка наличия свопа в системе
- Проверка наличия свободного места на диске
- Какого размера создать swap
- Создание файла SWAP
- Как подключить SWAP файл
- Добавление свопа в автозагрузку
- Дополнительные вопросы
- Как очистить SWAP в Linux
- How can I turn off swap permanently?
- 6 Answers 6
Best way to disable swap in Linux
I am running a custom compiled 3.18.9 kernel and I am wondering about the best way to disable swap on the system. I also use init if it makes a difference. Is it enough to comment or remove the swap line in /etc/fstab to prevent swap from working/mounting at boot or should I recompile the kernel without Support for paging of anonymous memory (swap) to be 100% sure it does not get enabled? I run encrypted partitions and want to prevent accidental leakage to the hard disk. My system specifications are also great enough that I can survive in a swap-less environment.
@MichaelHampton I didn’t see a need at the point in time until I realized what was eventually going to happen. Plus my system doesn’t reach a point in any time that the swap was used, so I feel I am free to remove it.
I’d remove the feature from the kernel then. Otherwise someone can plug an USB-stick and start swapping to it again.
@ott Doesn’t the user require super user access to use the swapon/swapoff executable? I might disable it again just in case, but I am uncertain a unprivileged user can create swap files.
@ott— this is for a laptop so I will be in control of it 24/7. If someone has gotten physical access to it or managed to exploit it to gain access to my unprivileged users there would be worse problems than worrying about a swap file being created. Thanks for the clarification though!
7 Answers 7
- Identify configured swap devices and files with cat /proc/swaps .
- Turn off all swap devices and files with swapoff -a .
- Remove any matching reference found in /etc/fstab .
- Optional: Destroy any swap devices or files found in step 1 to prevent their reuse. Due to your concerns about leaking sensitive information, you may wish to consider performing some sort of secure wipe.
On some systems you must also rebuild the initrd archive, e.g. with dracut —regenerate-all —force or mkinitrd , or the system will not boot. Thanks to J.O. Aho and Carlos E.R. on alt.os.linux.suse .
This doesn’t solve it for me, the system boots every time with swap enabled, even though there’s no fstab entry for it. It’s incredibly annoying.
It used to be that only swap partitions in /etc/fstab were used automatically, however, systemd may be changing that slightly. You might need to do:
systemctl mask dev-sdXX.swap
(change sdXX) to your real formatted swap partition, which, begs the question of why you have a swap partition if you don’t want it used.
If you are not using systemd, then, removing the swap entries from /etc/fstab should be sufficient (as far as I know).
Maybe the real solution is to get rid of the swap partitions, so they won’t be used accidentally. To remove the swap partitions, I would use fdisk to change the partition type from swap to something else, and then reformat the partition or use: dd if=/dev/zero of=/dev/old-swap-partition in order to zero it out and prevent its use.
SWAP — как создать, подключить, очистить и отключить файл подкачки в Linux
SWAP (своп) — это механизм виртуальной памяти, при котором часть данных из оперативной памяти (ОЗУ) перемещается на хранение на HDD (жёсткий диск), SSD (твёрдотельный накопитель), флеш-накопитель или иное вторичное хранилище. Как правило, swapping (свопинг) происходит, когда оперативная память переполнена, и ей для работы требуется дополнительное пространство.
Когда может понадобиться своп
Зачастую, от недостатка свободной памяти первой страдает база данных. Вы можете сталкиваться с проблемами типа:
- Постоянное падение сайта: Ошибка соединения с базой данных — означает, например, что MySQL упал;
- При внимательном изучении логов /var/log/mysql.log обнаруживается ошибка InnoDB: Fatal error: cannot allocate memory for the buffer pool . Она свидетельствует о том, что базе данных не хватает выделенной ей оперативной памяти для создания буфера.
При подобных симптомах и ошибках может помочь своппинг.
Преимущества SWAP
Экономия бюджета Допустим, рассчитано, что под работу сайта необходимо 2 гигабайта оперативной памяти. Однако, в зависимости от всплесков трафика, активности пользователей или особенностей работы проекта в моменты пиковой нагрузки оперативной памяти может не хватать, что, в свою очередь, может вызывать сбои в работе. Можно решить проблему, докупив оперативную память на 2-4 гигабайта, но тогда большую часть времени она будет простаивать вхолостую. В таком случае, может помочь простое подключение свопа на 4 гигабайта — вы выделяете место на диске под своп, и он берёт на себя роль помощника оперативной памяти.
Теперь сравним:
Сравнение стоимости оперативной памяти и SSD | ||
(цены актуальны на 7 июля 2017 года) | IHOR | FirstVDS |
Оперативная память, в среднем за 1 гигабайт | 100 рублей в месяц | 170 рублей в месяц |
SSD, в среднем за 1 гигабайт | 10 рублей в месяц | 13 рублей в месяц |
Как видно из таблицы, экономия выйдет примерно в 10 раз.
Недостатки SWAP
Медленная работа Если файл или раздел свопа хранится на HDD (жёстком диске), то скорость чтения данных с него намного меньше, чем из оперативной памяти. Получше дела обстоят с SSD (твёрдотельным накопителем), однако, надо понимать, что поиск и чтение данных происходит через оперативную память, что, в свою очередь, всё равно увеличивает время отклика. Поэтому, если Вы решили сэкономить на оперативной памяти, полностью положившись на SWAP, то я категорически не рекомендую так делать.
SWAP — это не замена оперативной памяти, а всего лишь его поддержка.
Необходимо наличие свободного места на диске Вам необходимо зарезервировать свободное место на диске под своп, иначе стабильность работы не гарантируется. Это не то, чтобы недостаток свопа, просто его надо учитывать и помнить о нём.
Как создать и подключить файл подкачки SWAP
Далее, в работе используется командная строка SSH.
Инструментарий: Far Manager или Putty.
Для примера приводятся команды из под root . Если Вы работаете не под root , перед командами задавайте префикс sudo
Проверка наличия свопа в системе
Для начала, нужно убедиться, что своп ещё не подключен:
Если команда выдала пустой результат или что-то навроде:
Filename Type Size Used Priority
— значит, своп, скорее всего отсутствует.
Дополнительно проверим командой:
Если в таблице в строке swap стоит 0, значит своп отсутствует.
Проверка наличия свободного места на диске
Теперь, надо проверить, сколько свободного места есть на диске:
В результате, мы увидим что-то подобное:
[email protected]:~# df -h Файловая система Размер Использовано Дост Использовано% Cмонтировано в /dev/vda1 30G 20G 9,0G 66% / udev 10M 0 10M 0% /dev tmpfs 403M 41M 362M 11% /run tmpfs 1006M 336K 1005M 1% /dev/shm tmpfs 5,0M 0 5,0M 0% /run/lock tmpfs 1006M 0 1006M 0% /sys/fs/cgroup tmpfs 1006M 492K 1005M 1% /tmp
Как мы видим, доступно 9 гигабайт дискового пространства — вполне достаточно, чтобы создать своп-файл.
Какого размера создать swap
Исходите из принципа — сколько может понадобиться, столько и выделяйте. Как правило, можно начинать с размера объёма оперативной памяти, либо его удвоенного количества. Например, если у вас в системе 2 гигабайта оперативки, своп можно сделать размером 2-4 гигабайта, как правило, этого должно хватать. Но, Вы можете скорректировать его размер под себя.
Создание файла SWAP
Допустим, мы хотим создать swap-файл размером 4 гигабайта.
Далее, здесь существует 2 подхода, традиционный медленный и новый быстрый:
Быстрый способ Используем fallocate :
Результатом будет пустая строка, это нормально.
В отличие от dd , результат будет получен почти сразу, и я рекомендую именно его. Традиционный, медленный способ Или используем команду:
dd if=/dev/zero of=/swapfile bs=1G count=4
Синтаксис команды простой:
- dd — команда предназначена для того, чтобы что-то куда-то копировать побайтово;
- if=/dev/zero — указывает на источник, т.е. на то, откуда копируем, в данном случае из /dev/zero — это специальный файл в UNIX-подобных системах, представляющий собой источник нулевых байтов;
- of=/swapfile — указывает путь назначения, куда копируем данные;
- bs=1G — количество байт, которые будут записаны за раз. В нашем случае, 1 гигабайт. Обозначения: G — гигабайт, M — мегабайт, K — килобайт, и так далее;
- count=4 — сколько блоков размером с bs будет создано, в нашем случае 4.
Будьте очень внимательны с синтаксисом команды, потому что если, например, ошибиться с определением пути для of= (куда сохранять файл), можно повредить данные на диске.
Теперь, когда файл создан, проверим результат:
В результате увидим:
-rw-r—r— 1 root root 4.0G Jul 07 16:16 /swapfile
Как видим, файл создался верно и с нужным объёмом.
Как подключить SWAP файл
Для начала, ограничим права доступа к вновь созданному файлу.
Предоставление другим пользователям возможности читать или писать в этот файл будет представлять собой огромный риск для безопасности, поэтому ограничение командой ниже строго обязательно:
В результате, мы должны увидеть подобное:
-rw——- 1 root root 4.0G Jul 07 16:16 /swapfile
Права прописаны верно.
Теперь нужно сделать из swapfile файл подкачки:
В результате, увидим примерно следующее:
Setting up swapspace version 1, size = 4193300 KiB
no label, UUID=e5f3e9cf-c1a9-4ed4-b8ab-711b6a7d6544
Теперь, файл готов в роли свопа. Подключим его к системе:
swapon: /swapfile: swapon failed: Operation not permitted
Если на данном этапе выходит похожая ошибка, значит, скорее всего, своп запрещено подключать в систему. Такое ограничение часто ставят на VDS с виртуализацией OpenVZ. Рекомендую использовать IHOR, сервера от 100 рублей в месяц и виртуализация KVM позволяют включать SWAP.
Всё, теперь своп подключен и работает. Осталось проверить правильность работы самой первой командой:
Filename Type Size Used Priority /swapfile file 4193300 0 -1
Своп также будет виден в стандартных командах:
total used free shared buffers cached Mem: 2010 1887 122 0 5 30 -/+ buffers/cache: 827 1183 Swap: 4095 0 4095
Всё, теперь точно, своп в системе готов и будет использоваться при необходимости.
Добавление свопа в автозагрузку
Чтобы при перезагрузке сервера своп автоматически подтягивался в систему, нужно прописать его в /etc/fstab :
echo "/swapfile none swap sw 0 0" >> /etc/fstab
Теперь система знает, где и как при перезагрузке искать и подключать своп.
Проверить, подключен ли своп в автозагрузке, можно с помощью редактора:
Дополнительные вопросы
Как очистить SWAP в Linux
Вообще, это делается с помощью отключения и включения свопа.
swapoff -a && sleep 3 && swapon -a
Однако, я не рекомендую прибегать к этому способу, так как swap просто очищается, а не переносится в ОЗУ, и, в случае наличия данных системных процессов, система может стать недоступна.
How can I turn off swap permanently?
Swap makes my system all sluggish and turning it off makes everything smoother. I have 3.5 GB of RAM. I know how to turn swap off by entering sudo swapoff -a in the terminal, but that’s just for the current session, because after a reboot swap turns itself back on. Is there any way to turn swap off permanently?
Yes it is, but it still can be used. I have a little script that mounts the swap partition when the system goes into hibernation and un-mounts it when it comes back. The swap file doesn’t need to be active in the meantime.
@user264467: it is quite counterintuitive to leave swap enabled just to disable it on every reboot, it is much cleaner to disable it permamently.
6 Answers 6
May I suggest a safer approach? You never know when swap can save you from crashing. While swapping does indeed slow down your computer, if you use a program that eats up all your RAM, having the ability to swap can save you from a hard reboot. When the computer starts swapping, you’ll notice and be able to kill the offending application.
So, instead of disabling swap altogether, just make sure your OS swaps very rarely. This is controlled by the vm.swappiness setting in /etc/sysctl.conf . Ubuntu’s default setting is 60 if I remember correctly which is too much for most situations and will cause you to start swapping even while RAM is still available. If you reduce this value, you will be able to keep the safety line of swap while only using it for emergencies. So, open the file:
If that is still too much, change the 10 to 1. Now, after you restart, you will only swap when absolutely necessary and you can simply forget about it.