Cách tốt nhất để vô hiệu hóa trao đổi trong Linux


53

Tôi đang chạy kernel 3.18.9 được biên dịch tùy chỉnh và tôi đang tự hỏi về cách tốt nhất để vô hiệu hóa trao đổi trên hệ thống. Tôi cũng sử dụng init nếu nó tạo ra sự khác biệt.

Có đủ để nhận xét hoặc xóa dòng trao đổi trong /etc/fstabđể ngăn trao đổi hoạt động / gắn kết khi khởi động hay tôi nên biên dịch lại kernel mà không Support for paging of anonymous memory (swap)chắc chắn 100% rằng nó không được kích hoạt?

Tôi chạy các phân vùng được mã hóa và muốn ngăn chặn sự cố rò rỉ vào đĩa cứng. Thông số kỹ thuật hệ thống của tôi cũng đủ lớn để tôi có thể tồn tại trong môi trường không có trao đổi.


Tại sao trao đổi của bạn không được mã hóa?
Michael Hampton

@MichaelHampton Tôi không thấy cần thiết vào thời điểm đó cho đến khi tôi nhận ra điều gì cuối cùng sẽ xảy ra. Thêm vào đó, hệ thống của tôi không đạt đến điểm bất cứ khi nào hoán đổi được sử dụng, vì vậy tôi cảm thấy mình có thể tự do gỡ bỏ nó.
dùng283167

Tôi sẽ xóa tính năng này khỏi kernel rồi. Nếu không, ai đó có thể cắm một thanh USB và bắt đầu hoán đổi lại.
ott--

@ott Người dùng không yêu cầu quyền truy cập siêu người dùng để sử dụng thực thi hoán đổi / hoán đổi? Tôi có thể vô hiệu hóa nó một lần nữa trong trường hợp, nhưng tôi không chắc người dùng không có đặc quyền có thể tạo các tệp hoán đổi.
dùng283167

Thật vậy, anh ta cần quyền truy cập siêu người dùng, mà anh ta có thể khai thác, ví dụ. Nhưng bạn đang xem máy chủ của bạn 24/7?
ott--

Câu trả lời:


76
  1. Xác định các thiết bị và tập tin hoán đổi được cấu hình với cat /proc/swaps.
  2. Tắt tất cả các thiết bị trao đổi và các tập tin với swapoff -a.
  3. Xóa mọi tham chiếu phù hợp được tìm thấy trong /etc/fstab.
  4. Tùy chọn: Phá hủy mọi thiết bị hoán đổi hoặc tệp được tìm thấy trong bước 1 để ngăn chặn việc sử dụng lại chúng. Do những lo ngại của bạn về việc rò rỉ thông tin nhạy cảm, bạn có thể muốn xem xét thực hiện một số loại xóa an toàn.

người đàn ông trao đổi


Trên một số hệ thống, bạn cũng phải xây dựng lại initrdkho lưu trữ, ví dụ như với dracut --regenerate-all --forcehoặc mkinitrd, hoặc hệ thống sẽ không khởi động. Nhờ JO AhoCarlos ER trên alt.os.linux.suse.
Ant_222

10

Nếu bạn thực sự chắc chắn rằng bạn muốn tắt tính năng hoán đổi (lưu ý: điều này không được khuyến khích, ngay cả khi bạn khá chắc chắn rằng RAM vật lý là quá đủ), hãy làm theo các bước sau:

  1. chạy swapoff -a: điều này sẽ ngay lập tức vô hiệu hóa trao đổi
  2. xóa bất kỳ mục trao đổi từ /etc/fstab
  3. reboothệ thống. Nếu trao đổi không còn, tốt. Nếu vì lý do nào đó, nó vẫn ở đây, bạn phải xóa phân vùng trao đổi. Lặp lại các bước 1 và 2 và sau đó, sử dụng fdiskhoặc partedxóa phân vùng trao đổi (hiện không được sử dụng). Sử dụng cẩn thận ở đây: loại bỏ phân vùng sai sẽ có tác động thảm họa!
  4. reboot

1
Tại sao không nên tắt trao đổi ngay cả khi bạn có đủ ram?
Rolf

1
Bởi vì Linux chủ động sử dụng phân vùng trao đổi để giải phóng thêm bộ nhớ cho bộ nhớ đệm. Điều này có thể cải thiện hiệu suất. Dù sao, nó là một tham số điều chỉnh. Để biết thêm thông tin, đọc ở đây . Hơn nữa, sự gia tăng ngẫu nhiên trong việc cấp phát bộ nhớ trong một hệ thống không thể hoán đổi có thể kích hoạt trình diệt OOM kernel.
shodanshok

1
Cảm ơn, điều này là hợp lý. Tuy nhiên, tôi đã nghĩ rằng nếu "đủ ram" (ví dụ: 8 hoặc 16 GB) đã đầy thì đó có thể là một tình huống đặc biệt (ứng dụng bị rò rỉ bộ nhớ hoặc một số vấn đề chạy trốn khác, tấn công DDOS, v.v.) trường hợp thậm chí hoán đổi cuối cùng sẽ bị áp đảo. Có lẽ tôi không đưa ra một lập luận rất thuyết phục tuy nhiên điều này không nên xảy ra trong việc sử dụng máy tính để bàn nhẹ.
Rolf

9

Trước đây, chỉ có các phân vùng trao đổi /etc/fstabđược sử dụng tự động, tuy nhiên, systemd có thể thay đổi một chút. Bạn có thể cần phải làm:

systemctl mask dev-sdXX.swap

(thay đổi sdXX) thành phân vùng trao đổi được định dạng thực của bạn, điều này đặt ra câu hỏi tại sao bạn có phân vùng trao đổi nếu bạn không muốn sử dụng ...

Nếu bạn không sử dụng systemd, thì việc xóa các mục trao đổi /etc/fstablà đủ (theo như tôi biết).

Có lẽ giải pháp thực sự là loại bỏ các phân vùng trao đổi, vì vậy chúng sẽ không được sử dụng một cách tình cờ. Để loại bỏ các phân vùng trao đổi, tôi sẽ sử dụng fdisk để thay đổi loại phân vùng từ hoán đổi sang thứ khác, sau đó định dạng lại phân vùng hoặc sử dụng: dd if=/dev/zero of=/dev/old-swap-partitionđể loại bỏ nó ra và ngăn chặn việc sử dụng nó.

Xem thêm Thiết lập sử dụng phân vùng trao đổi với systemd .


Tôi vẫn sử dụng init thông qua openRC, tôi cố tình thanh lọc systemd từ cài đặt. Và đối với câu hỏi hoán đổi, tôi đã thực hiện cài đặt thường xuyên cho đến khi tôi đưa ra quyết định sử dụng cryptsetup / luks để gắn các tệp được mã hóa được định dạng vào ext4 trên đầu hệ thống tệp của tôi. Nếu bạn có thể rất tử tế khi chạm vào cách vô hiệu hóa trao đổi khi sử dụng init, tôi sẽ đánh giá cao nó.
dùng283167

0

Khi tôi xem tệp / etc / fstab trên Raspbian, tôi thấy một bình luận nói rằng

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

Nhưng để vô hiệu hóa hoàn toàn tệp hoán đổi cấu hình sẵn, nó hoạt động hoàn toàn tốt:

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

Giải pháp này có vẻ hơi nhanh và bẩn đối với tôi, tuy nhiên, bạn chỉ có thể kích hoạt nó bằng:

chmod +x /etc/init.d/dphys-swapfile
reboot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.