Найкращий спосіб відключити swap в Linux


53

У мене працює ядро, складене 3.18.9 ядра, і мені цікаво найкращий спосіб відключити своп в системі. Я також використовую init, якщо це має значення.

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

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


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

@MichaelHampton Я не бачив потреби в той момент, поки не зрозумів, що в кінцевому підсумку відбудеться. Плюс моя система ніколи не досягає точки, коли використовується своп, тому я відчуваю, що я вільний її зняти.
користувач283167

Потім я б видалив цю функцію з ядра. Інакше хтось може підключити USB-накопичувач і знову почати мінятися на нього.
ott--

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

Дійсно, йому потрібен суперкористувацький доступ, який він міг би використати, наприклад. Але ви дивитесь свій сервер 24/7?
ott--

Відповіді:


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

людина swapoff


У деяких системах потрібно також відновити initrdархів, наприклад, з dracut --regenerate-all --forceабо mkinitrd, або система не завантажиться. Завдяки Джо Ахо та Карлосу ЕР далі alt.os.linux.suse.
Ant_222

10

Якщо ви дійсно впевнені, що хочете відключити заміну (зверніть увагу: це не рекомендується, навіть якщо ви впевнені, що фізичної оперативної пам’яті більш ніж достатньо), виконайте наступні дії:

  1. запустити swapoff -a: це негайно вимкне своп
  2. видалити будь-який запис своп із /etc/fstab
  3. rebootсистема. Якщо своп пропав, добре. Якщо з якихось причин воно все ще є, вам довелося видалити розділ swap. Повторіть кроки 1 і 2, після чого скористайтеся fdiskабо partedвидаліть (не використовуваний) розділ swap. Будьте уважні тут: видалення неправильного розділу матиме згубні наслідки!
  4. reboot

1
Чому не рекомендується вимикати swap, навіть якщо у вас достатньо оперативної пам’яті?
Рольф

1
Оскільки Linux активно використовує розділ swap, щоб звільнити більше пам'яті для кешування. Це може підвищити продуктивність. У будь-якому випадку це налаштований параметр. Більше інформації читайте тут . Більше того, імпровізований сплеск розподілу пам'яті в системі без змін може спровокувати вбивцю OOM ядра.
shodanshok

1
Дякую, це розумно. Тим не менш, я думав, що якщо "достатньо оперативної пам’яті" (наприклад, 8 або 16 ГБ) повна, то, швидше за все, це якась виняткова ситуація (додаток із витоком пам'яті або іншим вирваним випуском, атака DDOS тощо), в якій випадок, навіть своп, врешті-решт, був би переповнений. Можливо, я не висловлюю дуже переконливих аргументів, проте цього не повинно відбуватися при використанні настільних комп'ютерів.
Рольф

9

Раніше було те, що /etc/fstabавтоматично використовувались лише підмінні розділи , але systemd може дещо змінити. Можливо, вам доведеться зробити:

systemctl mask dev-sdXX.swap

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

Якщо ви не використовуєте systemd, то, /etc/fstabнаскільки мені відомо , видалення записів свопі з цього має бути достатнім.

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

Див. Також Налаштування використання swap-розділу з системою .


Я все ще використовую init через openRC, я цілеспрямовано очистив systemd від установки. Що стосується питання swap, я робив регулярну установку, поки не прийняв рішення використовувати cryptsetup / luks для монтажу зашифрованих файлів, відформатованих до ext4 над моєю файловою системою. Якщо ви можете бути настільки люб'язними, щоб скористатися способом відключення swap під час використання init, я би вдячний.
користувач283167

0

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

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

Але повністю вимкнути попередньо налаштований файл swap це працює чудово:

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.