Jak bezpiecznie wyłączyć swap na stałe i odzyskać miejsce? (w Debian Jessie)

48

Zainstalowałem Debian Jessie z domyślnym partycjonowaniem na moim dysku SSD. Moje obecne partycjonowanie dysku wygląda następująco:

Moje obecne partycjonowanie dysku wygląda następująco

Ponieważ mam 16 GB pamięci RAM, zakładam, że nie potrzebuję wymiany . Ale ponieważ mam inne dyski, mogę utworzyć plik wymiany na przykład na jednym z innych dysków.

Czy możesz mi powiedzieć, jakie kroki należy podjąć, aby usunąć partycję wymiany poprawnie i trwale, aby nie zajmowała miejsca na dysku ? Chcę usunąć partycję wymiany, ponieważ obecnie mam tylko 128 GB SSD.

Oto, co próbowałem i za każdym razem restartowałem; każdy z tych kroków nie jest stały lub nic nie zrobił :

  1. Korzystanie z swapoffnarzędzia:

    swapoff --all
    
  2. Korzystanie z narzędzia GParted :

    Kliknięcie prawym przyciskiem myszy partycji wymiany i kliknięcie opcji Zamień.

  3. Komentowanie identyfikatora UUID partycji wymiany w następującym pliku:

    /etc/fstab
    
  4. Komentowanie identyfikatora UUID partycji wymiany w następującym pliku:

    /etc/initramfs-tools/conf.d/resume
    
  5. Uruchomienie tych poleceń na końcu (zarówno w tej, jak i odwrotnej kolejności):

    update-grub
    
    update-initramfs -u
    
LinuxSecurityFreak
źródło
1
Swapoff wyłącza tylko zamianę dla aktualnie działającego systemu, aby uczynić go trwałym, należy połączyć go z usunięciem odpowiedniego wpisu z /etc/fstab. Po zakończeniu zamiana powinna zostać wyłączona i nie wracać przy następnym uruchomieniu. Teraz powinieneś zmodyfikować tablicę partycji i rozszerzyć główny system plików, jeśli chcesz odzyskać nieużywane miejsce. Zobacz moją odpowiedź, aby uzyskać szczegółowe instrukcje.
André Borie,
@ burian.vlastimil czy możesz opublikować całość /etc/fstab?
André Borie,
@ burian.vlastimil Edytuj to w swoim pytaniu, ponieważ komentarze nie zachowują podziałów linii. Czy twoje zmiany w fstab utrzymują się po restarcie, czy też linia wymiany nie jest komentowana?
André Borie,
1
Jeśli mogę wtrącić się w to pytanie, celem zamiany jest usunięcie nieużywanych stron i ochrona systemu przed brakiem pamięci. Zatem, jak sugerował SnakeDoc, posiadanie 512 MB wymiany jest zawsze dobre. Osobiście mam dysk SSD bez partycji wymiany, a raczej plik wymiany w moim katalogu /. Jeśli zdecydujesz się to zrobić, skorzystaj z tego samouczka, aby utworzyć plik. Jeśli chodzi o partycję wymiany, możesz uruchomić live usb i użyć gparted, aby usunąć tę partycję. Pamiętaj jednak o zaktualizowaniu GRUB-a.
Sergiy Kolodyazhnyy
4
@SnakeDoc - zazwyczaj nie wywołuje paniki jądra, moduł obsługi OOM uruchamia się i zabija procesy w celu zwolnienia pamięci (i zazwyczaj wykonuje całkiem niezłą robotę, decydując, które zabić, generalnie dając pierwszeństwo do zabijania większych i nowszych procesów). Utrzymuję dużą liczbę serwerów bez zamiany, które są ustawione na panikę na OOM zamiast na zabijanie procesów, ponieważ serwery są skonfigurowane w taki sposób, że normalnie nigdy nie zabraknie im pamięci, a jeśli tak, chcę, aby panikowały i restartowały się, a nie zamieniały i zwolnij (lub pozwól, aby moduł obsługi OOM zdecydował, które procesy zabić)
Johnny,

Odpowiedzi:

46

Wykonaj jako root:

# swapoff -a

Aby zmienić tę opcję na stałe, edytuj /etc/fstabi usuwaj lub komentuj pozycję wymiany.

maxschlepzig
źródło
@ burian.vlastimil, co masz na myśli przez zablokowany? Możesz sprawdzić, czy żadne urządzenie wymiany nie jest używane, patrząc na pierwszą linię na górze - powinien zgłaszać „Zamiana KiB: łącznie 0”. Możesz także cat /proc/swaps- który powinien po prostu zgłosić wiersz nagłówka. Jeśli tak jest, to tak, możesz bezpiecznie usunąć partycję wymiany - i powiększyć inną partycję - aby odzyskać to miejsce - jeśli tego chcesz.
maxschlepzig,
@ burian.vlastimil, zamiana może być włączona przez twoje initramfs, być może będziesz musiał usunąć resumeopcję jądra (która odwołuje się do UUID twojej zamiany), tj. zaktualizuj grub i zregeneruj initramfs (w zasadzie wykonaj odwrotność niektórych kroków w SwapFaq ).
maxschlepzig,
@ burian.vlastimil, możesz również grepować swoją konfigurację grub (under /boot) dla tego identyfikatora użytkownika i możesz rozpakować initramsfs i grep jego zawartość, aby dostać się do głównej przyczyny tego. Upewnij się, że wykonujesz grep bez rozróżniania wielkości liter.
maxschlepzig,
2
wystarczy umieścić swapoff -aw /etc/rc.local. mając swapa na kilka milisekund podczas rozruchu nie jest problemem. z 16 GB pamięci RAM przez długi czas nic tam nie zostanie zapisane. po prostu zostaw tam miejsce wymiany (miejsce na dysku jest tanie) i nie zmieniaj się /etc/fstab .
Skaperen
zrób tymczasowy plik wymiany, a następnie możesz odzyskać miejsce, usuwając plik po wyłączeniu wymiany
Skaperen
40
  1. Jeśli GParted otwarty, zamknij go. Jego funkcja zamiany nie wydaje się być stała.

  2. Otwórz terminal i zostań root( su); jeśli sudowłączyłeś, możesz również zrobić na przykład sudo -i; zobacz man sudowszystkie opcje):

    sudo -i
    
  3. Wyłącz określoną partycję wymiany i / lub wszystkie swapy :

    swapoff --all
    
  4. Upewnij się w 100%, że konkretna partycja wymiany jest wyłączona:

    cat /proc/swaps
    
  5. Otwórz edytor tekstu, który znasz z tym plikiem, np. nanoJeśli nie jesteś pewien:

    nano /etc/fstab
    
  6. Skomentuj / usuń identyfikator UUID partycji wymiany , np .:

    # UUID=1d3c29bb-d730-4ad0-a659-45b25f60c37d    none    swap    sw    0    0
    
  7. Otwórz edytor tekstu, który znasz z tym plikiem, np. nanoJeśli nie jesteś pewien:

    nano /etc/initramfs-tools/conf.d/resume
    
  8. Skomentuj / usuń uprzednio zidentyfikowany identyfikator UUID partycji wymiany , np .:

    # RESUME=UUID=1d3c29bb-d730-4ad0-a659-45b25f60c37d
    
  9. Nie zamykaj terminalu, bo i tak będziesz go później potrzebować.

Uwaga: Kolejne kroki różnią się w zależności od tego, czy korzystasz z CLI czy GUI .


GUI :

  1. Otwórz GParted , albo z menu, albo wygodniej z otwartego terminala:

    gparted
    
  2. Jeśli nie masz go zainstalowanego, możesz to zrobić; następnie ponownie uruchom poprzednie polecenie:

    apt-get install gparted
    
  3. Wybierz dysk z menu w prawym górnym rogu.

  4. Gdy GParted reaktywuje partycję wymiany po uruchomieniu, będziesz musiał kliknąć prawym przyciskiem myszy konkretną partycję wymiany i kliknąć Swapoff -> To zostanie zastosowane natychmiast.

  5. Usuń partycję wymiany prawym przyciskiem myszy -> Usuń. Musisz zastosować zmianę teraz.

  6. Zmień rozmiar głównej / innej partycji prawym przyciskiem myszy -> Zmień rozmiar / Przenieś. Musisz zastosować zmianę teraz.

  7. Wróćmy do terminala, odtwórzmy obrazy rozruchowe :

    update-initramfs -u -k all
    
  8. Zaktualizuj GRUB :

    update-grub
    
  9. Możesz teraz zrestartować komputer, jeśli chcesz sprawdzić, czy komputer się uruchamia.


CLI :

Będę sprawdzić w VM s jeśli moje rozwiązanie działa, to będę go udostępnić. W międzyczasie zobacz tę odpowiedź .

LinuxSecurityFreak
źródło
1
najbardziej kompletny, dobrze wyjaśniony.
benzkji
Jeśli później wystąpi powolny rozruch z komunikatem gave up waiting for suspend/resume device: W pliku /etc/initramfs-tools/conf.d/resumenie wyłączaj tylko linii, zamień ją na RESUME=none. ( źródło )
tanius
17

Skomentuj / usuń odpowiedni wpis w, /etc/fstababy zapobiec ponownemu włączeniu przy następnym uruchomieniu, a następnie uruchom ponownie lub uruchom, swapoff -aaby wyłączyć użycie partycji wymiany dla aktualnie działającego systemu.

Teraz usuń partycję wymiany, rozszerz partycję systemową na to nieużywane miejsce i rozszerz rzeczywisty system plików. Nie wiem, czy Twój menedżer partycji graficznych może to wszystko zrobić, ale jeśli nie jest to możliwe, to jest to dystrybucja agnostyczna przy użyciu fdiski resize2fs:

# fdisk /dev/sdX

# Display current partition table, copy/paste this output somewhere to be able to go back in case you screw up

Command (m for help): p
Device       Boot  Start    End Sectors Size Id Type
/dev/sda1        2048  22527   20480  10M ef EFI (FAT-12/16/32)
/dev/sda2       22528 186367  163840  80M 83 Linux
/dev/sda3      186368 204799   18432   9M 82 Linux swap / Solaris

# Delete the swap partition

Command (m for help): d
Partition number (1-3, default 3): 3
Partition 3 has been deleted.

# Delete the system partition

Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 has been deleted.

# Create a new system partition starting the same as the old one but ending a bit farther, at the end of the (now deleted) swap partition

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (2-4, default 2): 
# Enter the same start sector as the old part.
First sector (22528-204799, default 22528): 22528
# Enter the end sector of the old swap partition
Last sector, +sectors or +size{K,M,G,T,P} (22528-204799, default 204799): 204799

Created a new partition 2 of type 'Linux' and of size 89 MiB.

# Save the changes
Command (m for help): w
The partition table has been altered.

Wreszcie rozszerzamy obecny system plików, aby wykorzystać nowe wolne miejsce (do tej pory rzeczywisty system plików nie wiedział, że dodaliśmy trochę więcej miejsca do jego podstawowej partycji). Domyślnie resize2fsużywa całej partycji, chyba że podano stały rozmiar, więc nie musimy określać niczego poza urządzeniem blokującym partycje. Rozwijanie systemu plików (w przeciwieństwie do zmniejszania) można wykonać online z zamontowaną partycją:

# resize2fs /dev/sda2

Teraz pomyślnie wyłączyłeś swap i odzyskałeś nieużywane miejsce bez ponownego uruchamiania.

Zauważ, że procedura dla Debiana jest nieco inna i wymaga edycji kilku dodatkowych plików. Sprawdź tę odpowiedź, aby uzyskać więcej informacji.

André Borie
źródło
To mi nie działa. Miałem 3 partycje. jeden dla / boot, jeden dla / i swap. Kiedy próbuję utworzyć nową partycję, mogę utworzyć tylko partycję
GB
Dodanie, przynajmniej dla dystrybucji opartych na Debianie 9: konieczne jest uruchomienie partprobeprzed resize2fspoleceniem, w przeciwnym razie jądro nie będzie wiedziało o nowej tablicy partycji i nic nie zostanie zmienione.
tanius
2

Kliknij prawym przyciskiem myszy partycję wymiany w GParted, a następnie kliknij Zamień. Następnie usuń partycję wymiany, usuń ją /etc/fstabi ponownie wygeneruj swoją ( initramfsi grubbyć może niepotrzebną).

Partycja wymiany nie powinny być dodawane do initramfsprzez initramfsskrypt aktualizacji, jeśli partycja nie istnieje.

Zgodnie z tym postem następujący sposób jest prawidłowym sposobem na regenerację initramfsi grub:

update-initramfs -c -k <kernel>

update-grub
BenjiWiebe
źródło
-2

Możesz kliknąć prawym przyciskiem myszy na partycji swap w Gparted i wybierz swapoff opcję. To szybki sposób na osiągnięcie tego samego, o co prosiłeś.

Charlie
źródło