Làm thế nào tôi có thể tắt trao đổi vĩnh viễn?


64

Hoán đổi làm cho hệ thống của tôi chậm chạp và tắt nó làm cho mọi thứ mượt mà hơn. Tôi có 3,5 GB RAM.

Tôi biết cách tắt trao đổi bằng cách nhập vào sudo swapoff -athiết bị đầu cuối, nhưng đó chỉ là cho phiên hiện tại, vì sau khi trao đổi khởi động lại tự bật lại. Có cách nào để tắt trao đổi vĩnh viễn?


2
AFAIK trao đổi được sử dụng để ngủ đông. Chỉ cần nói
Danman

1
Có nó, nhưng nó vẫn có thể được sử dụng. Tôi có một đoạn script nhỏ gắn kết phân vùng trao đổi khi hệ thống chuyển sang chế độ ngủ đông và hủy gắn kết nó khi nó hoạt động trở lại. Trong khi đó, tệp hoán đổi không cần phải hoạt động.
Animaletdesequia

Đơn giản chỉ cần đặt hoán đổi -a trong /etc/rc.local và quên điều đó ...;)
user264467

1
@ user264467: khá là không trực quan khi để hoán đổi được kích hoạt chỉ để vô hiệu hóa nó trên mỗi lần khởi động lại, nó sẽ sạch hơn rất nhiều để vô hiệu hóa nó một cách vĩnh viễn.
karatedog

Câu trả lời:


119

Tôi có thể đề nghị một cách tiếp cận an toàn hơn? Bạn không bao giờ biết khi nào trao đổi có thể cứu bạn khỏi bị rơi. Mặc dù việc hoán đổi thực sự làm chậm máy tính của bạn, nhưng nếu bạn sử dụng một chương trình ngốn hết RAM, việc có khả năng trao đổi có thể cứu bạn khỏi việc khởi động lại khó khăn. Khi máy tính bắt đầu hoán đổi, bạn sẽ chú ý và có thể tắt ứng dụng vi phạm.

Vì vậy, thay vì vô hiệu hóa trao đổi hoàn toàn, chỉ cần đảm bảo hệ điều hành của bạn hoán đổi rất hiếm khi. Điều này được kiểm soát bởi các vm.swappinessthiết lập trong /etc/sysctl.conf. Cài đặt mặc định của Ubuntu là 60nếu tôi nhớ chính xác, quá nhiều cho hầu hết các tình huống và sẽ khiến bạn bắt đầu hoán đổi ngay cả khi RAM vẫn khả dụng. Nếu bạn giảm giá trị này, bạn sẽ có thể giữ dòng trao đổi an toàn trong khi chỉ sử dụng nó cho các trường hợp khẩn cấp. Vì vậy, hãy mở tệp:

sudo nano /etc/sysctl.conf

Và thêm dòng này vào nó:

vm.swappiness=10

Nếu vẫn còn quá nhiều, hãy thay đổi 10 thành 1. Bây giờ, sau khi bạn khởi động lại, bạn sẽ chỉ trao đổi khi thực sự cần thiết và bạn có thể quên nó đi.


Tôi thích thay đổi swappines, và tôi đã không thực hiện trong nhiều năm. Cảm ơn đã nhắc nhở. sudo upvote turdon!
Darth Egregious 28/03 '

16
Chỉ cần thêm vào đối số 'phương pháp an toàn hơn': Khi bạn không có trao đổi và hệ thống hết bộ nhớ, kẻ giết người OOM (Out Of Memory) của Linux được gọi. Việc này chọn một quy trình dựa trên điểm số 'xấu' và sau đó ... giết nó (chấm dứt, đóng) mà không có cơ hội để ứng dụng lưu các thay đổi của nó, dọn sạch, v.v. Vì vậy, nếu bạn tắt trao đổi và hết bộ nhớ, bạn rất có nguy cơ mất việc nếu các quy trình quan trọng ghi điểm kém trong mắt kẻ giết người OOM. Vì vậy, bạn chỉ nên tắt trao đổi nếu bạn tự tin rằng bạn sẽ không bao giờ hết bộ nhớ.
Reid

5
@Reid đáng để chỉ ra rằng, rõ ràng, điều tương tự chính xác sẽ xảy ra nếu bạn cũng hết dung lượng trao đổi.
o0 '.

11
Điều này không thực sự trả lời câu hỏi. Vô hiệu hóa trao đổi hoàn toàn có thể có ý nghĩa rất nhiều trên một hệ thống có RAM 16 GB hoặc 32 GB. Một vài GB trao đổi bổ sung sẽ không làm được gì trong trường hợp các ứng dụng ăn bộ nhớ, trong khi một lượng lớn trao đổi (ví dụ 20 GB) sẽ chiếm rất nhiều dung lượng ổ cứng / SSD. Ngoài ra, ngủ đông với 32GB RAM là không vui .
jmiserez

7
Đối với một số thiết lập, ngay khi bạn hết RAM vật lý và bắt đầu trao đổi, hệ thống bắt đầu "hút bùn" và trở nên không sử dụng được. Đúng, về mặt lý thuyết bạn có thể xâm nhập và tiêu diệt kẻ phạm tội, nhưng khi phải mất hơn 20 phút để thay đổi trọng tâm trong giao diện người dùng và thậm chí lâu hơn để nhận được lời nhắc mật khẩu qua SSH, OOMing kết thúc là lựa chọn tốt nhất (tiếp theo là khó khởi động lại, tiếp theo là vào và khắc phục sự cố).
BCS

46

Tìm dòng trong / etc / fstab đề cập đến trao đổi và nhận xét nó. Của tôi là như thế này:

UUID=6880a28d-a9dc-4bfb-ba47-0876b50e96b3 /               ext4    errors=remount-ro 0       1
UUID=7350e6f2-e3a7-4d80-9a95-8741c7db118f /home           ext4    defaults        0       2
UUID=E2E26AD1E26AAA0D /media/windows  ntfs    defaults,umask=007,gid=46 0       0

# Swap a usb extern (3.7 GB):
#/dev/sdb1 none swap sw 0 0

Bạn có thể chỉnh sửa tập tin này với gedit. Sao lưu nó trước, chỉ trong trường hợp:

sudo cp /etc/fstab /etc/fstab_backup
gksu gedit /etc/fstab

Chỉ cần thêm # vào đầu dòng nơi trao đổi và khởi động lại máy tính.

HOẶC LÀ

Hãy thử cách dòng lệnh nhận xét mục trao đổi trong /etc/fstabtệp,

sudo sed -i.bak '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

Tôi nhận được điều này khi tôi gõgksu gedit /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> /host/ubuntu/disks/root.disk / ext4 loop,errors=remount-ro 0 1 /host/ubuntu/disks/swap.disk none swap loop,sw 0 0
Alex Li

1
Vì vậy, hãy làm những gì anh ấy nói. Nhận xét dòng đầu tiên đề cập đến "trao đổi". : P
cHao

13

Chỉ cần xóa mục nhập (hoặc nhận xét nó bằng cách sử dụng # ở phía trước của dòng) từ fstab và khởi động lại. Tìm dòng có chữ "hoán đổi" trong đó.

sudo nano /etc/fstab

10
Điều này cũng sẽ làm việc, nhưng tôi nghĩ là bình luận tốt hơn thay vì loại bỏ nó hoàn toàn, chỉ trong trường hợp bạn muốn hoàn nguyên các thay đổi.
Animaletdesequia

1
Tôi đã chỉnh sửa bài viết của mình.
mdalacu

11

Sai .. nếu systemd tìm thấy phân vùng SWAP trên bất kỳ ổ đĩa nào, nó sẽ tự động kết nối nó. Lạ mà không ai nhắc đến systemd. Giải pháp là khá đơn giản; để vô hiệu hóa vĩnh viễn trao đổi, bạn phải:

  1. hoán đổi -a
  2. chỉnh sửa / etc / fstab và nhận xét bất kỳ mục trao đổi nào nếu có.
  3. run: sudo systemctl mask dev-sdXX.swap (trong đó XX là phân vùng trao đổi. Cũng hữu ích để làm điều đó cho tất cả các phân vùng có thể để nếu có phân vùng trao đổi trên bất kỳ ổ đĩa nào khác, nó sẽ không được gắn kết)

Bình yên ra.


số 3 cho chiến thắng !!
oneklc
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.