Cara terbaik untuk menonaktifkan swap di Linux

53

Saya menjalankan kernel 3.18.9 yang dikompilasi khusus dan saya bertanya-tanya tentang cara terbaik untuk menonaktifkan swap pada sistem. Saya juga menggunakan init jika ada bedanya.

Apakah cukup mengomentari atau menghapus baris swap /etc/fstabuntuk mencegah swap bekerja / mount pada saat boot atau haruskah saya mengkompilasi ulang kernel tanpa Support for paging of anonymous memory (swap)menjadi 100% yakin itu tidak dapat diaktifkan?

Saya menjalankan partisi terenkripsi dan ingin mencegah kebocoran tidak disengaja ke hard disk. Spesifikasi sistem saya juga cukup bagus sehingga saya bisa bertahan dalam lingkungan swap-less.

pengguna283167
sumber
Mengapa swap Anda tidak dienkripsi?
Michael Hampton
@MichaelHampton Saya tidak melihat kebutuhan pada titik waktu sampai saya menyadari apa yang akhirnya akan terjadi. Ditambah lagi, sistem saya tidak mencapai titik kapan swap digunakan, jadi saya merasa bebas untuk menghapusnya.
user283167
Saya akan menghapus fitur dari kernel itu. Kalau tidak, seseorang dapat memasang USB-stick dan mulai menukarnya lagi.
ott--
@ott Bukankah pengguna memerlukan akses pengguna super untuk menggunakan swapon / swapoff yang dapat dieksekusi? Saya mungkin menonaktifkannya lagi untuk berjaga-jaga, tetapi saya tidak yakin pengguna yang tidak mampu dapat membuat file swap.
user283167
Memang, dia membutuhkan akses pengguna super, yang dia bisa dengan eksploit misalnya. Tetapi apakah Anda menonton server Anda 24/7?
ott--

Jawaban:

76
  1. Identifikasi perangkat dan file swap yang dikonfigurasi dengan cat /proc/swaps.
  2. Matikan semua perangkat dan file swap dengan swapoff -a.
  3. Hapus referensi yang cocok yang ditemukan di /etc/fstab.
  4. Opsional: Hancurkan perangkat atau file swap apa pun yang ditemukan pada langkah 1 untuk mencegah penggunaannya kembali. Karena kekhawatiran Anda tentang membocorkan informasi sensitif, Anda mungkin ingin mempertimbangkan melakukan semacam penghapusan aman.

man swapoff

Aaron Copley
sumber
Pada beberapa sistem Anda juga harus membangun kembali initrdarsip, misalnya dengan dracut --regenerate-all --forceatau mkinitrd, atau sistem tidak akan boot. Terima kasih kepada JO Aho dan Carlos ER di alt.os.linux.suse.
Ant_222
10

Jika Anda benar-benar yakin ingin menonaktifkan swapping (catatan: ini tidak disarankan, meskipun Anda cukup yakin bahwa RAM fisik lebih dari cukup), ikuti langkah-langkah ini:

  1. jalankan swapoff -a: ini akan segera menonaktifkan swap
  2. hapus entri swap apa pun dari /etc/fstab
  3. rebootsistem. Jika swap hilang, bagus. Jika, karena alasan tertentu, masih ada di sini, Anda harus menghapus partisi swap. Ulangi langkah 1 dan 2 dan, setelah itu, gunakan fdiskatau parteduntuk menghapus partisi swap (sekarang tidak digunakan). Gunakan dengan sangat hati-hati di sini: menghapus partisi yang salah akan memiliki efek buruk!
  4. reboot
shodanshok
sumber
1
Mengapa tidak disarankan untuk menonaktifkan swap meskipun Anda memiliki ram yang cukup?
Rolf
1
Karena Linux secara proaktif menggunakan partisi swap untuk membebaskan lebih banyak memori untuk caching. Ini dapat meningkatkan kinerja. Bagaimanapun, ini adalah parameter yang bisa diubah. Untuk informasi lebih lanjut, baca di sini . Selain itu, lonjakan improvisasi dalam alokasi memori dalam sistem swapless dapat memicu pembunuh OOM kernel.
shodanshok
1
Terima kasih, ini masuk akal. Namun demikian, saya berpikir bahwa jika "ram cukup" (misalnya: 8 atau 16 GB) penuh maka kemungkinan semacam situasi luar biasa (aplikasi dengan kebocoran memori atau masalah pelarian lainnya, serangan DDOS, dll.) Di mana Kasus bahkan swap akhirnya akan kewalahan. Mungkin saya tidak membuat argumen yang sangat meyakinkan namun ini seharusnya tidak terjadi pada penggunaan desktop yang ringan.
Rolf
9

Dulu hanya partisi swap /etc/fstabyang digunakan secara otomatis, namun systemd mungkin sedikit berubah. Anda mungkin perlu melakukan:

systemctl mask dev-sdXX.swap

(ubah sdXX) menjadi partisi swap terformat Anda yang sebenarnya, yang menimbulkan pertanyaan mengapa Anda memiliki partisi swap jika Anda tidak menginginkannya digunakan ...

Jika Anda tidak menggunakan systemd, maka, menghapus entri swap dari /etc/fstabharus cukup (sejauh yang saya tahu).

Mungkin solusi sebenarnya adalah dengan menyingkirkan partisi swap, sehingga tidak akan digunakan secara tidak sengaja. Untuk menghapus partisi swap, saya akan menggunakan fdisk untuk mengubah tipe partisi dari swap ke sesuatu yang lain, dan kemudian memformat ulang partisi atau menggunakan: dd if=/dev/zero of=/dev/old-swap-partitionuntuk menghilangkannya dan mencegah penggunaannya.

Lihat juga Mengatur penggunaan partisi swap dengan systemd .

Gregor
sumber
Saya masih menggunakan init melalui openRC, saya sengaja menghapus systemd dari instal. Dan untuk pertanyaan swap, saya melakukan instalasi rutin sampai saya membuat keputusan untuk menggunakan cryptsetup / luks untuk me-mount file terenkripsi yang diformat ke ext4 di atas filesystem saya. Jika Anda bisa begitu baik untuk menyentuh cara menonaktifkan swap saat menggunakan init saya akan sangat menghargainya.
user283167
0

Ketika saya melihat file / etc / fstab di Raspbian, saya melihat komentar yang mengatakan

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

Tetapi untuk sepenuhnya menonaktifkan file swap yang telah dikonfigurasikan ini berfungsi dengan baik:

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

Solusi ini terlihat agak cepat dan kotor bagi saya, namun, Anda dapat mengaktifkannya kembali dengan:

chmod +x /etc/init.d/dphys-swapfile
reboot
Fabian31415
sumber