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.

użytkownik 283167
źródło
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

Aaron Copley
źródło
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
Shodanshok
źródło
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 .

Gregor
źródło
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
Fabian31415
źródło