Jak mogę na stałe wyłączyć swap?

64

Zamiana powoduje, że mój system jest powolny, a wyłączenie go sprawia, że ​​wszystko jest płynniejsze. Mam 3,5 GB pamięci RAM.

Wiem, jak wyłączyć swap, wchodząc sudo swapoff -ado terminalu, ale to tylko dla bieżącej sesji, ponieważ po ponownym uruchomieniu swap ponownie się włącza. Czy jest jakiś sposób, aby na stałe wyłączyć swap?

Alex Li
źródło
2
AFAIK swap służy do hibernacji. Tylko
mówię
1
Tak, ale nadal można z niego korzystać. Mam mały skrypt, który montuje partycję wymiany, gdy system przechodzi w stan hibernacji i odinstalowuje ją po powrocie. Tymczasem plik wymiany nie musi być aktywny.
animaletdesequia
Po prostu umieść swapoff -a w /etc/rc.local i zapomnij o tym ...;)
user264467
1
@ user264467: pozostawienie opcji swap włączonej jest po prostu sprzeczne z intuicją, aby wyłączyć ją przy każdym ponownym uruchomieniu, o wiele czystsze jest wyłączenie jej na stałe.
karatedog

Odpowiedzi:

119

Czy mogę zasugerować bezpieczniejsze podejście? Nigdy nie wiadomo, kiedy swap może uchronić Cię przed awarią. Podczas gdy zamiana rzeczywiście spowalnia komputer, jeśli korzystasz z programu, który zużywa całą pamięć RAM, możliwość zamiany może uratować Cię przed ciężkim ponownym uruchomieniem komputera. Gdy komputer zacznie zamieniać, zauważysz i będziesz mógł zabić szkodliwą aplikację.

Zamiast całkowicie wyłączać swap, upewnij się, że system operacyjny zamienia się bardzo rzadko. Jest to kontrolowane przez vm.swappinessustawienie w /etc/sysctl.conf. Domyślne ustawienie Ubuntu to, 60jeśli dobrze pamiętam, co jest zbyt duże w większości sytuacji i spowoduje, że zaczniesz zamieniać, nawet jeśli pamięć RAM jest nadal dostępna. Jeśli zmniejszysz tę wartość, będziesz w stanie utrzymać linię bezpieczeństwa wymiany, używając go tylko w nagłych wypadkach. Więc otwórz plik:

sudo nano /etc/sysctl.conf

I dodaj do niego ten wiersz:

vm.swappiness=10

Jeśli to wciąż za dużo, zmień 10 na 1. Teraz po ponownym uruchomieniu zamienisz tylko wtedy, gdy jest to absolutnie konieczne i możesz po prostu zapomnieć o tym.

terdon
źródło
Uwielbiam zmieniać swapiny i nie robiłem tego od lat. Dzięki za przypomnienie. sudo upvote turdon!
Darth Egregious
16
Wystarczy dodać do argumentu „bezpieczniejsze podejście”: gdy nie ma wymiany, a systemowi kończy się pamięć, wywoływany jest zabójca Linux OOM (Out Of Memory). To wybiera proces na podstawie wyniku „złego”, a następnie ... zabija go (kończy, zamyka) bez żadnej szansy, że aplikacja zapisze zmiany, wyczyści itp. Tak więc, jeśli wyłączysz swap i skończy się pamięci, bardzo dobrze ryzykujesz utratę pracy, jeśli ważne procesy słabo oceniają się w oczach zabójcy OOM. Dlatego powinieneś wyłączyć swap tylko wtedy, gdy masz pewność , że nigdy nie zabraknie ci pamięci.
Reid
5
@ Reid warto zaznaczyć, że oczywiście to samo stanie się, jeśli zabraknie Ci także przestrzeni wymiany.
o0 ”.
11
To tak naprawdę nie odpowiada na pytanie. Całkowite wyłączenie wymiany może mieć sens w systemie z 16 GB lub 32 GB pamięci RAM. Kilka dodatkowych GB wymiany nie przyniesie nic dobrego w przypadku aplikacji zużywających pamięć, podczas gdy duża ilość wymiany (np. 20 GB) zajmie dużo miejsca na dysku twardym / dysku SSD. Ponadto hibernacja z 32 GB pamięci RAM nie jest fajna .
jmiserez
7
W przypadku niektórych konfiguracji, jak tylko skończy się fizyczna pamięć RAM i rozpocznie się zamiana, system zaczyna „ssać błoto” i staje się bezużyteczny. Tak, teoretycznie możesz wejść i zabić sprawcę, ale kiedy zmiana celu w interfejsie użytkownika zajmuje ponad 20 minut, a jeszcze dłużej, aby uzyskać hasło za pośrednictwem SSH, OOMing jest najlepszą opcją (po czym następuje uruchom ponownie, a następnie wejdź i napraw problem).
BCS,
46

Znajdź wiersz w / etc / fstab odnoszący się do wymiany i skomentuj go. Mój jest taki:

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

Możesz edytować ten plik za pomocą gedit. Najpierw wykonaj kopię zapasową, na wszelki wypadek:

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

Wystarczy dodać # na początku wiersza, w którym znajduje się zamiana, i ponownie uruchom komputer.

LUB

Wypróbuj sposób wiersza polecenia komentowania pozycji wymiany w /etc/fstabpliku,

sudo sed -i.bak '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
Animaletdesequia
źródło
Rozumiem to, piszącgksu 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
Więc rób, co on mówi. Skomentuj pierwszy wiersz, który odnosi się do „zamiany”. : P
cHao
13

Po prostu usuń wpis (lub skomentuj go za pomocą # przed linią) z fstab i uruchom ponownie. Poszukaj linii ze słowem „zamień”.

sudo nano /etc/fstab
Mdalacu
źródło
10
Ten też by działał, ale myślę, że lepiej jest komentować wiersz niż całkowicie go usunąć, na wypadek, gdybyś chciał cofnąć zmiany.
animaletdesequia
1
Zredagowałem swój post.
mdalacu
11

Źle ... jeśli systemd znajdzie partycję SWAP na dowolnym dysku, i tak ją automatycznie zamontuje. Dziwne, że nikt nie wspomniał o systemd. Rozwiązanie i tak jest dość proste; aby trwale wyłączyć swap, musisz:

  1. zamiana -a
  2. edytuj / etc / fstab i komentuj wszelkie wpisy wymiany, jeśli są obecne.
  3. run: sudo systemctl mask dev-sdXX.swap (gdzie XX jest partycją wymiany. Przydatne jest również, aby zrobić to dla wszystkich możliwych partycji, aby w przypadku partycji wymiany na innym dysku nie została zamontowana)

Pokój na zewnątrz.

Zibri
źródło
numer 3 do wygrania !!
oneklc