Лучший способ отключить своп в Linux


54

Я использую собственно скомпилированное ядро ​​3.18.9, и мне интересно, как лучше отключить своп в системе. Я также использую init, если это имеет значение.

Достаточно ли комментировать или удалить строку подкачки, /etc/fstabчтобы помешать работе / монтированию подкачки при загрузке, или я должен перекомпилировать ядро, Support for paging of anonymous memory (swap)чтобы не быть уверенным на 100%, что оно не включено?

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


Почему ваш своп не зашифрован?
Майкл Хэмптон

@MichaelHampton В тот момент я не видел необходимости, пока не понял, что в итоге должно было случиться. Кроме того, моя система не достигает момента, когда использовался своп, поэтому я чувствую, что могу удалить его.
user283167

Тогда я бы удалил эту функцию из ядра. В противном случае кто-то может подключить USB-флешку и начать заменять ее снова.
ot--

@ott Разве пользователю не требуется доступ суперпользователя для использования исполняемого файла swapon / swapoff? Я мог бы отключить его снова на всякий случай, но я не уверен, что непривилегированный пользователь может создавать файлы подкачки.
user283167

На самом деле, ему нужен супер-пользовательский доступ, который он мог бы использовать с помощью эксплойта, например Но вы смотрите свой сервер 24/7?
ot--

Ответы:


76
  1. Определите настроенные устройства подкачки и файлы с cat /proc/swaps.
  2. Выключите все устройства подкачки и файлы с помощью swapoff -a.
  3. Удалите все соответствующие ссылки, найденные в /etc/fstab.
  4. Необязательно: Удалите все устройства подкачки или файлы, найденные на шаге 1, чтобы предотвратить их повторное использование. Из-за вашей озабоченности по поводу утечки конфиденциальной информации, вы можете рассмотреть возможность выполнения какой-либо безопасной очистки.

человек своп


В некоторых системах вы также должны пересобрать initrdархив, например, с помощью dracut --regenerate-all --forceили mkinitrd, иначе система не загрузится. Благодаря JO Ахо и Карлос ER на alt.os.linux.suse.
Ant_222

10

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

  1. запустить swapoff -a: это немедленно отключит своп
  2. удалить любую запись своп из /etc/fstab
  3. rebootсистема. Если своп ушел, хорошо. Если по какой-то причине он все еще здесь, вам пришлось удалить раздел подкачки. Повторите шаги 1 и 2, а затем используйте fdiskили, partedчтобы удалить (теперь неиспользуемый) раздел подкачки. Будьте очень внимательны: удаление неправильного раздела будет иметь катастрофические последствия!
  4. reboot

1
Почему не рекомендуется отключать своп, даже если у вас достаточно оперативной памяти?
Рольф

1
Поскольку Linux активно использует раздел подкачки, чтобы освободить больше памяти для кэширования. Это может улучшить производительность. Во всяком случае, это настраиваемый параметр. Для получения дополнительной информации читайте здесь . Кроме того, импровизированный всплеск выделения памяти в системе без подкачки может вызвать убийство OOM ядра.
Шоданшок

1
Спасибо, это разумно. Тем не менее, я думал, что если «достаточно оперативной памяти» (например, 8 или 16 ГБ) заполнен, то это, вероятно, какая-то исключительная ситуация (приложение с утечкой памяти или какой-либо другой проблемой сбоя, DDOS-атака и т. Д.), В которой случай даже своп в конечном итоге будет перегружен. Может быть, я не привожу очень убедительных аргументов, однако это не должно происходить при использовании настольных компьютеров.
Рольф

9

/etc/fstabРаньше автоматически использовались только разделы подкачки , однако systemd может немного изменить это. Вам может потребоваться сделать:

systemctl mask dev-sdXX.swap

(замените sdXX) на ваш реальный отформатированный раздел подкачки, что вызывает вопрос о том, почему у вас есть раздел подкачки, если вы не хотите, чтобы он использовался ...

Если вы не используете systemd, то удаления записей подкачки /etc/fstabдолжно быть достаточно (насколько я знаю).

Возможно, реальное решение состоит в том, чтобы избавиться от разделов подкачки, чтобы они не использовались случайно. Чтобы удалить разделы подкачки, я бы использовал fdisk, чтобы изменить тип раздела с swap на другой, а затем переформатировать раздел или использовать: dd if=/dev/zero of=/dev/old-swap-partitionдля обнуления и предотвращения его использования.

См. Также Настройка использования раздела подкачки с помощью systemd .


Я все еще использую init через openRC, я намеренно удалил systemd из установки. Что касается вопроса подкачки, я делал обычную установку, пока не принял решение использовать cryptsetup / luks для монтирования зашифрованных файлов, отформатированных в ext4, поверх моей файловой системы. Если бы вы могли так любезно коснуться способа отключения свопа при использовании init, я был бы признателен.
user283167

0

Когда я просматриваю файл / etc / fstab на Raspbian, я вижу комментарий

a swapfile is not a swap partition, no line here
  use dphys-swapfile swap[on|off] for that

Но для полного отключения предварительно настроенного файла подкачки это прекрасно работает:

swapoff -a
chmod -x /etc/init.d/dphys-swapfile
reboot

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

chmod +x /etc/init.d/dphys-swapfile
reboot
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.