Najlepszy sposób na wyłączenie wymiany w systemie Linux


53

Korzystam z niestandardowego kompilowanego jądra 3.18.9 i zastanawiam się nad najlepszym sposobem na wyłączenie wymiany w systemie. Używam również init, jeśli to robi różnicę.

Czy wystarczy skomentować lub usunąć linię wymiany, /etc/fstababy uniemożliwić zamianę pracy / montowania podczas rozruchu, czy też powinienem ponownie skompilować jądro bez Support for paging of anonymous memory (swap)100% pewności, że nie zostanie włączone?

Prowadzę zaszyfrowane partycje i chcę zapobiec przypadkowemu wyciekowi na dysk twardy. Moje specyfikacje systemu są również na tyle świetne, że mogę przetrwać w środowisku bez wymiany.


Dlaczego twoja zamiana nie jest szyfrowana?
— Michael Hampton

@MichaelHampton W tym momencie nie widziałem potrzeby, dopóki nie zdałem sobie sprawy, co w końcu się wydarzy. Ponadto mój system nie osiąga punktu w żadnym momencie, kiedy zamiana została użyta, więc czuję, że mogę ją usunąć.
— user283167,

Wtedy usunąłbym tę funkcję z jądra. W przeciwnym razie ktoś może podłączyć pamięć USB i ponownie zacząć z nią korzystać.
— ott--

@ott Czy użytkownik nie potrzebuje dostępu superużytkownika do korzystania z pliku wykonywalnego swapon / swapoff? Na wszelki wypadek mogę go wyłączyć, ale nie jestem pewien, czy nieuprzywilejowany użytkownik może tworzyć pliki wymiany.
— user283167,

Rzeczywiście, potrzebuje dostępu superużytkownika, który mógłby wykorzystać przy użyciu np. Ale czy oglądasz swój serwer 24/7?
— ott--

Odpowiedzi:


76
  1. Zidentyfikuj skonfigurowane urządzenia i pliki wymiany za pomocą cat /proc/swaps.
  2. Wyłącz wszystkie urządzenia i pliki wymiany za pomocą swapoff -a.
  3. Usuń wszystkie pasujące odniesienia znalezione w /etc/fstab.
  4. Opcjonalne: Zniszcz wszystkie urządzenia wymiany lub pliki znalezione w kroku 1, aby zapobiec ich ponownemu użyciu. Ze względu na obawy związane z wyciekiem poufnych informacji możesz rozważyć wykonanie pewnego rodzaju bezpiecznego czyszczenia.

człowiek zamiana


W niektórych systemach musisz również odbudować initrdarchiwum, np. Z dracut --regenerate-all --forcelub mkinitrd, inaczej system nie uruchomi się. Dzięki JO Aho i Carlos ER na alt.os.linux.suse.
— Ant_222,

10

Jeśli naprawdę masz pewność, że chcesz wyłączyć zamianę (uwaga: nie jest to zalecane, nawet jeśli masz pewność, że fizyczna pamięć RAM jest wystarczająca), wykonaj następujące kroki:

  1. run swapoff -a: natychmiast wyłączy swap
  2. usuń wszelkie wpisy wymiany z /etc/fstab
  3. rebootsystem. Jeśli wymiany nie ma, dobrze. Jeśli z jakiegoś powodu nadal tu jest, musisz usunąć partycję wymiany. Powtórz kroki 1 i 2, a następnie użyj fdisklub, partedaby usunąć (teraz nieużywaną) partycję wymiany. Zachowaj szczególną ostrożność: usunięcie niewłaściwej partycji będzie miało katastrofalne skutki!
  4. reboot

1
Dlaczego nie zaleca się wyłączania wymiany, nawet jeśli masz wystarczającą ilość pamięci RAM?
— Rolf

1
Ponieważ Linux aktywnie korzysta z partycji wymiany, aby zwolnić więcej pamięci do buforowania. Może to poprawić wydajność. W każdym razie jest to parametr przestrajalny. Aby uzyskać więcej informacji, przeczytaj tutaj . Co więcej, gwałtowny wzrost alokacji pamięci w systemie swapless może wyzwolić zabójcę OOM jądra.
— shodanshok

1
Dzięki, to rozsądne. Niemniej jednak myślałem, że jeśli „wystarczająca ilość pamięci RAM” (np. 8 lub 16 GB) jest pełna, to prawdopodobnie jest to jakaś wyjątkowa sytuacja (aplikacja z wyciekiem pamięci lub innym problemem polegającym na niekontrolowanym uruchomieniu, atak DDOS itp.), W którym w każdym razie nawet zamiana zostanie ostatecznie przytłoczona. Być może nie przedstawiam zbyt przekonującego argumentu, jednak nie powinno to się zdarzyć w przypadku lekkiego użytkowania pulpitu.
— Rolf

9

Kiedyś tylko partycje wymiany /etc/fstabbyły używane automatycznie, jednak systemd może to nieco zmienić. Może być konieczne wykonanie:

systemctl mask dev-sdXX.swap

(zmień sdXX) na prawdziwą sformatowaną partycję wymiany, która nasuwa pytanie, dlaczego masz partycję wymiany, jeśli nie chcesz, aby była używana ...

Jeśli nie używasz systemd, usunięcie wpisów wymiany /etc/fstabpowinno wystarczyć (o ile mi wiadomo).

Być może prawdziwym rozwiązaniem jest pozbycie się partycji wymiany, aby nie zostały użyte przypadkowo. Aby usunąć partycje wymiany, użyłbym fdisk, aby zmienić typ partycji z zamiany na inną, a następnie sformatować partycję lub użyć: dd if=/dev/zero of=/dev/old-swap-partitionw celu wyzerowania i zapobiegania jego użyciu.

Zobacz także Konfigurowanie użycia partycji wymiany za pomocą systemd .


Nadal używam init przez openRC, celowo usunąłem system z instalacji. A jeśli chodzi o pytanie o zamianie, robiłem regularną instalację, dopóki nie zdecydowałem się użyć cryptsetup / luks do montowania zaszyfrowanych plików sformatowanych w formacie ext4 na moim systemie plików. Jeśli mógłbyś być tak miły, aby dotknąć sposobu wyłączenia wymiany podczas korzystania z init, byłbym wdzięczny.
— user283167,

0

Kiedy przeglądam plik / etc / fstab na Raspbian, widzę komentarz mówiący

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

Ale aby całkowicie wyłączyć wstępnie skonfigurowany plik wymiany, działa to doskonale:

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

To rozwiązanie wydaje mi się trochę szybkie i brudne, jednak możesz je ponownie włączyć za pomocą:

chmod +x /etc/init.d/dphys-swapfile
reboot
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.