Как отключить swap linux

Обновлено: 04.07.2024

У меня есть некоторые конфиденциальные данные в оперативной памяти, которые я предпочитаю не быть на диске. Как отключить своп? У меня более чем достаточно овна. Если оперативная память становится слишком высокой, у меня нет проблем с прекращением процессов. Как отключить своп?

Примечание: у меня нет раздела подкачки, и он работает на виртуальной машине (VMWare)

это обычный способ отключить своп, с помощью swapon -a команды, используемой для его включения. Смотрите man swapoff для получения дополнительной информации об отключении подкачки для явных устройств.

Постоянные изменения в swap обычно вносятся в / etc / fstab. Нет. Вместо этого вы закомментируете строку подкачки в / etc / fstab. Вы можете прочитать в других ответах, как это закомментировать.

Теперь ваша запись подкачки /etc/fstab будет выглядеть примерно так:

С вашими конкретными цифрами и строчными буквами вместо букв «х».

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

Если вас беспокоит содержание файла подкачки, вы всегда можете отключить его, как обычно, с помощью, sudo swapoff -a а затем заполнить устройство подкачки нулями или случайными данными, используя dd.

Сначала используйте содержимое fstab, чтобы найти файл подкачки или устройство ( less /etc/fstab )

Обнаружив его, дважды и трижды проверив его местоположение, скажем, в sda5 или /swapfile (разделы подкачки были заменены по умолчанию файлом подкачки в 17.04 и более поздних версиях ) .

В случае раздела подкачки или диска: (с предисловием / dev) введите команду «уничтожить диск» (не следует использовать слегка)

sudo dd if=/dev/zero of=swap заменить слово swap на устройство подкачки или файл, в котором вы находитесь /etc/fstab

взорвать его полный нулей или

sudo dd if=/dev/random of=swap снова заменить слово swap на устройство подкачки или файл, в котором вы находитесь /etc/fstab

взорвать его полный случайных данных.

В случае файла подкачки (с предваряющим только путь): вы можете просто удалить файл с rm /path/to/swapfile

В следующий раз, когда вы включите своп с

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

free когда система находится под большой нагрузкой и посмотрите, сколько используется для этого определения.

Если вы решите, что вам навсегда не нужен своп (для гибернации или чего-либо еще), вы можете просто закомментировать эту строку в fstab, как предлагается здесь

Когда может понадобиться своп

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

При подобных симптомах и ошибках может помочь своппинг.

Преимущества SWAP

Сравнение стоимости оперативной памяти и SSD
(цены актуальны на 7 июля 2017 года) IHOR FirstVDS
Оперативная память, в среднем за 1 гигабайт 100 рублей в месяц 170 рублей в месяц
SSD, в среднем за 1 гигабайт 10 рублей в месяц 13 рублей в месяц

Как видно из таблицы, экономия выйдет примерно в 10 раз.

Недостатки SWAP

Медленная работа Если файл или раздел свопа хранится на HDD (жёстком диске), то скорость чтения данных с него намного меньше, чем из оперативной памяти. Получше дела обстоят с SSD (твёрдотельным накопителем), однако, надо понимать, что поиск и чтение данных происходит через оперативную память, что, в свою очередь, всё равно увеличивает время отклика. Поэтому, если Вы решили сэкономить на оперативной памяти, полностью положившись на SWAP, то я категорически не рекомендую так делать. Необходимо наличие свободного места на диске Вам необходимо зарезервировать свободное место на диске под своп, иначе стабильность работы не гарантируется. Это не то, чтобы недостаток свопа, просто его надо учитывать и помнить о нём.

Как создать и подключить файл подкачки SWAP

Далее, в работе используется командная строка SSH.
Инструментарий: Far Manager или Putty.
Для примера приводятся команды из под root . Если Вы работаете не под root , перед командами задавайте префикс sudo

Проверка наличия свопа в системе

Для начала, нужно убедиться, что своп ещё не подключен:

Если команда выдала пустой результат или что-то навроде:

Дополнительно проверим командой:

Своп нулевой


Если в таблице в строке swap стоит 0, значит своп отсутствует.

Проверка наличия свободного места на диске

Теперь, надо проверить, сколько свободного места есть на диске:

В результате, мы увидим что-то подобное:

Какого размера создать swap

Создание файла SWAP

Допустим, мы хотим создать swap-файл размером 4 гигабайта.
Далее, здесь существует 2 подхода, традиционный медленный и новый быстрый:

Быстрый способ Используем fallocate :

Результатом будет пустая строка, это нормально.
В отличие от dd , результат будет получен почти сразу, и я рекомендую именно его. Традиционный, медленный способ Или используем команду:

Синтаксис команды простой:

Будьте очень внимательны с синтаксисом команды, потому что если, например, ошибиться с определением пути для 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

Теперь, файл готов в роли свопа. Подключим его к системе:

Если на данном этапе выходит похожая ошибка, значит, скорее всего, своп запрещено подключать в систему. Такое ограничение часто ставят на VDS с виртуализацией OpenVZ. Рекомендую использовать IHOR, сервера от 100 рублей в месяц и виртуализация KVM позволяют включать SWAP.

Всё, теперь своп подключен и работает. Осталось проверить правильность работы самой первой командой:

Своп также будет виден в стандартных командах:

Всё, теперь точно, своп в системе готов и будет использоваться при необходимости.

Добавление свопа в автозагрузку

Чтобы при перезагрузке сервера своп автоматически подтягивался в систему, нужно прописать его в /etc/fstab :

Теперь система знает, где и как при перезагрузке искать и подключать своп.
Проверить, подключен ли своп в автозагрузке, можно с помощью редактора:

Дополнительные вопросы

Как очистить SWAP в Linux

Вообще, это делается с помощью отключения и включения свопа.

Однако, я не рекомендую прибегать к этому способу, так как swap просто очищается, а не переносится в ОЗУ, и, в случае наличия данных системных процессов, система может стать недоступна.

Эта страница дает ознакомление с пространством подкачки и подкачкой страниц в GNU/Linux. Охватывает создание, активацию файлов и разделов подкачки.

Linux делит свою физическую RAM (оперативную память) на кусочки памяти, называемые страницами. Подкачка (swapping) это процесс, когда страницы памяти копируются на предварительно сконфигурированное пространство на жестком диске, называемое пространством подкачки, чтобы освободить эту страницу из памяти. Суммарный размер оперативной памяти и пространства подкачки это количество доступной виртуальной памяти.

Поддержка подкачки обеспечивается ядром Linux и утилитами в пользовательском пространстве из util-linux пакета.

Contents

Пространство подкачки

Пространство подкачки может быть разделом диска или файлом. Пользователи могут создать пространство подкачки во время установки или позднее в любое желаемое время. Пространство подкачки может быть использовано для двух целей, расширить виртуальную память за пределы установленной оперативной памяти (RAM), а также для сохранения данных при гибернации (suspend-to-disk).

Для проверки статуса подкачки, используйте:

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

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

Раздел подкачки

Раздел подкачки может быть создан различными GNU/Linux утилитами разметки. Разделы подкачки обычно обозначаются как тип 82 . Хотя есть возможность использовать разные типы как подкачку, рекомендуется использовать тип 82 , в большинстве случаев systemd, будет автоматически определять его и монтировать (см. ниже)

Для установки раздела как область Linux подкачки, можно использовать mkswap . Например:

Важно: Все данные на указанном разделе будут утеряны.

Для подключения устройства как подкачку:

Чтобы подключить этот раздел подкачки при загрузке, добавьте запись в fstab:

где <UUID> может быть получен из команды:

Совет: Предпочтительно использовать UUID и LABEL, чем имена устройств полученные от ядра (/dev/sd*), т.к. порядок устройств может измениться в будущем. Смотри fstab.
  • Эта fstab запись необязательна если раздел подкачки находится на устройстве, использующий GPT разметку, см. следующий подраздел.
  • Если используется SSD с поддержкой TRIM, учтите использование defaults,discard в fstab строке подключения подкачки. Если вручную активировать подкачку с помощью swapon, используйте параметр -d / --discard , который делает тоже самое. Подробности смотри в swapon(8) .
Важно: Включение discard в RAID установке с использованием mdadm, приведёт к блокировке системы при загрузке и во время выполнения, если использовать swapon.

Активация используя systemd

Активация разделов подкачки в systemd базируется на двух различных механизмах. Оба исполняются в /usr/lib/systemd/system-generators . Генераторы запускаются при старте системы и создают нативные systemd юниты для монтирования. Первый systemd-fstab-generator , читает fstab, чтобы генерировать юниты, включая юнит для подкачки. Второй systemd-gpt-auto-generator , осматривает корневой диск, чтобы генерировать юниты. Это операция проходит только на GPT дисках и может идентифицировать разделы подкачки по их тип коду 82 .

Отключение подкачки

Чтобы деактивировать определенное пространство подкачки:

Также можно использовать -a ключ, чтобы деактивировать все пространства подкачки.

С тех пор, как systemd управляет подкачкой, она вновь будет активирована при старте системы, для долговременного отключения автоматической активации найденных пространств подкачки, выполните systemctl --type swap , чтобы найти связанные со .swap юниты и замаскируйте (systemctl mask юнит) их.

Файл подкачки

Как альтернатива к созданию целого раздела, файл подкачки даёт возможность менять свой размер на лету, а также его гораздо легче полностью удалить. Это может быть особенно важно, если дисковое пространство ограничено (например, небольшие SSD)

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

Вручную

Создание файла подкачки

Использовать под суперпользователем fallocate , чтобы создать файл подкачки размером на свой выбор (M = Mebibytes, G = Gibibytes). Например создание 512 MiB файла подкачки:

Примечание: fallocate может вызвать проблемы с некоторыми файловыми системами, такими как: F2FS или XFS.[1]. Как вариант, используйте dd, наиболее надёжный, но медленный.

Установите права доступа (всеми читаемый файл подкачки это огромная локальная уязвимость)

После создания файла нужного размера, форматируйте его в подкачку:

Активируйте файл подкачки:

В завершении, отредактируйте fstab, добавив запись для файла подкачки:

Примечание: Не забудьте добавить discard, если у вас SSD с поддержкой TRIM

Удаление файла подкачки

Чтобы удалить файл подкачки, сначала нужно отключить подкачку, а затем файл может быть удален:

В завершении, удалите соответствующую запись из /etc/fstab .

Автоматически

systemd-swap

Установить systemd-swap пакет. Установить swapfc_enabled=1 в Swap File Chunked разделе файла /etc/systemd/swap.conf . Start/enable systemd-swap сервис. Посетить страницу авторов на GitHub для получения подробностей и установить рекомендуемую конфигурацию.

Примечание: Если журнал продолжает показывать следующее предупреждение systemd-swap[..]: WARN: swapFC: ENOSPC и файл подкачки не создаётся, вы должны установить параметр swapfc_force_preallocated=1 в /etc/systemd/swap.conf .

Подкачка с USB устройства

Благодаря модульности, предлагаемой Linux, мы можем иметь множество разделов подкачки на различных устройствах. Если у вас полностью заполнен жесткий диск, то можно использовать USB устройство как временный раздел подкачки. Однако, этот метод имеет серьёзные недостатки:

  • USB устройство медленнее чем жесткий диск
  • Flash память имеет ограниченное количество циклов записи. Использование его как раздела подкачки, может быстро убить его.

Далее откройте /etc/fstab и добавьте

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

Данная инструкция будет работать и для других устройств хранения, таких как SD карты и т.д.

Шифрование подкачки

Производительность

Операции подкачки как правило существенно медленнее чем непосредственный доступ к RAM. Отключение подкачки полностью для повышения производительности, иногда может привести к ухудшению, поскольку это уменьшает доступную память для VFS кеша, вызывая более частые и дорогостоящие операции ввода/вывода.

Значения подкачки можно настроить, чтобы помочь производительности:

Swappiness

Swappiness sysctl параметр представляющий частоту использования пространства подкачки. Swappiness может иметь значение от 0 до 100, значение по умолчанию = 60. Низкое значение заставляет ядро избегать подкачки, высокое значение позволяет ядру использовать подкачку наперёд. Использование низкого значения на достаточном количестве памяти, улучшает отзывчивость на многих системах.

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

Примечание: Т.к. /proc менее организован и сохраняется только для обратной совместимости, вместо него предпочтительнее использовать /sys .

Чтобы временно установить значение swappiness:

Чтобы постоянно установить значение swappiness, отредактируйте (создайте) конфигурационный файл sysctl

Чтобы проверить и больше узнать, почему оно так работает, посмотрите эту статью.

VFS cache pressure

Приоритет

Если у вас больше одного файла или раздела подкачки, вы должны учитывать присвоение приоритетного значения (от 0 до 32767) для каждой области подкачки. Система будет использовать области подкачки с высоким приоритетом, перед использованием областей с низким приоритетом. Например, если у вас быстрый диск ( /dev/sda ) и медленный ( /dev/sdb ), назначьте высокий приоритет для подкачки расположенной на быстром устройстве. Приоритет может быть назначен в fstab как pri параметр:

Или как параметр в swapon --priority

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

Использование zswap или zram

Zswap это особенность ядра Linux, обеспечивающая сжатие обратного кэша для страниц подкачки. Она увеличивает производительность и уменьшает операции ввода/вывода. ZRAM создаёт виртуальный сжатый файл подкачки в памяти, как альтернатива файлу подкачки на диске.

Чередование

Нет необходимости использовать RAID для повышения производительности подкачки. Ядро самостоятельно может чередовать подкачку на нескольких устройствах, если вы присвоите им одинаковый приоритет в /etc/fstab . Для подробной информации смотри The Software-RAID HOWTO.


До того, как я купил себе ноутбук, я предварительно искал информацию о том, с какими проблемами мне придётся столкнуться при установке линукса. Судя по тому, что я нашёл, мне светило пропатчить модуль ядра для того, чтобы заработал тачпад и собрать модуль драйвера Wi-Fi из исходников. Это конечно, совершенно не rocket science, но со временем начинаешь ценить время и удобство, хочется побольше вещей, которые просто работают, работают хорошо и из коробки.

Последние лет шесть я работал на самосборном дистрибутиве на базе debian. И всё было бы ничего, но поддержка этого дистрибутива в актуальном состоянии требовала периодических усилий и существенных затрат времени. Так как debian stable имеет далеко не самую свежую пакетную базу, то заморочек с железом ожидалось больше, чем обычно. Так как у меня уже был положительный опыт установки Linux Mint, я взял последнюю версию 19.1 Tara с xfce4, накатил на ноутбук и - о чудо - всё заработало. Абсолютно всё - тачпад, звук, wi-fi, видео. При всём этом установка заняла в общей сложности всего минут пять.

Так как заморачиваться действительно не хотелось, а попользоваться новым ноутбуком напротив - хотелось очень, то разбивать жёсткий диск я не стал и оставил настройку разделов в таком виде, в котором её предлагает программа установки по умолчанию, только дополнительно включил шифрование. После установки я решил отключить swap, так как во-первых, 8Гб оперативной памяти мне скорее всего должно хватить на все мои нужды, а держать swap раздел на ssd категорически не рекомендуется. Постоянная перезапись одних и тех же блоков намного быстрее исчерпает ресурс ssd диска.

Отключить swap - несложно, но есть несколько тонкостей. Например, отключение приводит к тому, что ноутбук начинает загружаться в несколько раз дольше, так как скрипты в initrd пытаются найти swap раздел и проверить, нет ли там данных для восстановления из режима гибернации. На ожидание раздела есть таймаут в 30 секунд и несколько попыток, в результате чгео время загрузки увеличивается примерно на полторы минуты или даже больше.

Для начала отключаем swap и убираем его автоматическое подключение из fstab:

Затем запускаем команду lvm, с её помощью смотрим список активных lvm вольюмов, удаляем вольюм свопа, проверяем размер вольюма root, расширяем root на всё доступное пространство и снова проверяем размер вольюма:

С помощью resize2fs увеличиваем размер раздела на всё доступное пространство:

Всё прошло вполне успешно. Но как я уже писал выше, нам нужно обновить initrd, чтобы он не пытался каждый раз искать swap при старте. Причину и метод устранения проблемы я нашёл не сразу, поэтому просто поделюсь простым и правильным способом:

Всё, после ребута перезагрузка будет занимать примерно то же время, что и до удаления свопа.

Также нужно заметить, что при работе без свопа нужно следить, чтобы приложения не скушали всю доступную оперативную память. В Linux для этого существует так называемый OOMKiller (OOM = Out Of Memory) - это часть ядра linux, призванная убивать приложения в ситуации критической нехватки оперативной памяти с целью предотвращения полного зависания. На своей машине пока ещё соответствующие настройки не менял, но могу поделиться парой полезных ссылок, где написано о том, как это сделать: раз и два.

Читайте также: