Jak zwiększyć rozmiar pliku wymiany bez usuwania go z terminala?

59

Czy istnieje sposób na zwiększenie mojego istniejącego „pliku wymiany” bez konieczności jego niszczenia i ponownego tworzenia? Chciałbym zwiększyć swoją przestrzeń wymiany z 1 GB do 2 GB. Obecnie jest skonfigurowany jako taki:

$ sudo swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        1048572 736640  -1
$ ls -lh /swapfile
-rw------- 1 root root 1.0G Nov  9  2016 /swapfile

Używam Ubuntu 14.04.

Dave
źródło
Ile masz pamięci RAM? Czy 2G wystarczy? Myślę, że będziesz musiał swapoffutworzyć nowy plik wymiany mkswapiswapon -a
heynnema
1
Dodaj nowy plik wymiany, postępuj zgodnie z instrukcjami powyższego pytania. możesz mieć 2 pliki wymiany;)
Ravexina
1
@Ravexina, Być może pytanie dla początkujących, ale dlaczego miałbym chcieć dodać nowy plik wymiany zamiast zwiększać rozmiar istniejącego? Czy też nie jest możliwe zwiększenie istniejącego pliku wymiany?
Dave
@Dave To też jest możliwe, ponieważ możesz wiedzieć, że możemy swapoffwtedy ddi mkswapnareszcie swapon. Myślałem, że nie chcesz dotykać swojego pliku.
Ravexina
2
@Ravexina opublikował to jako odpowiedź
Sergiy Kolodyazhnyy

Odpowiedzi:

66

Najpierw wyłącz plik wymiany:

sudo swapoff /swapfile

Teraz zwiększmy rozmiar pliku wymiany:

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 oflag=append conv=notrunc

Powyższe polecenie doda 1 GiB zerowych bajtów na końcu pliku wymiany.

Skonfiguruj plik jako „plik wymiany”:

sudo mkswap /swapfile

włącz zamianę:

sudo swapon /swapfile
Ravexina
źródło
3
sudo fallocate -l 2G /swapfilejest prawdopodobnie bezpieczniejszy niż dd (chociaż nie zachowuje oryginalnego pliku wymiany), a także potrzebuje sudo chmod 600 /swapfile.
heynnema
7
@heynnema Nie fallocatetworzy rzadkich plików? Strona ta swaponmówi, że rzadkie pliki wymiany są problematyczne (konkretnie wspomniane fallocate).
muru
3
@ heynnema nie, strona mkswappodręcznika mówi również, że pliki nie powinny zawierać żadnych dziur.
muru
1
@muru zgaduję, że się mylę :-) Za każdym razem, gdy czytam, jak utworzyć / swapfile z początkiem 17.04, używali fallocate. Myślę, że będziemy musieli użyć „niszczyciela dysków”!
heynnema
1
@heynnema: Możesz użyć fallocatedo wstępnego przydzielenia miejsca na dysku, a następnie użyć dddo wypełnienia otworów zerami.
David Foerster
39

Powinieneś dodać nowy plik wymiany zamiast zmieniać rozmiar istniejącego, ponieważ nic Cię to nie kosztuje . Aby zmienić rozmiar pliku wymiany, musisz go najpierw wyłączyć, co spowoduje eksmisję zawartości wymiany do pamięci RAM, co zwiększy presję na pamięć RAM, a nawet może wezwać zabójcę OOM (nie wspominając o tym, że możesz psuć dyski przez kilka minut). Wiele plików wymiany nie stanowi problemu, konfiguracja kolejnego pliku wymiany jest banalnie łatwa. Dosłownie nie ma żadnej korzyści ze zmiany rozmiaru pliku wymiany w porównaniu z dodaniem innego.

dd if=/dev/zero of=/some/file count=1K bs=1M
mkswap /some/file
sudo chown root:root /some/file
sudo chmod 600 /some/file
sudo swapon /some/file
muru
źródło
Czy jest to sudo chmod 600 /some/filewymagane czy nie?
heynnema
1
I czy count=1Kdaje plik 1G? liczba jest w bloku, tak? A to może być 512/4096? Czy moja matematyka jest zła?
heynnema
3
+1 To podejście ułatwia także odłączenie jednego z plików wymiany, jeśli później zdecydujesz, że potrzebujesz miejsca na dysku.
joeytwiddle
2
To naprawdę musi być oznaczone jako poprawna odpowiedź. Wow, brawo!
Beshoy Girgis
1
@muru czy to ma być trwałe rozwiązanie? Wykonałem te polecenia 30 kwietnia, ale kiedyś w maju mój drugi plik wymiany zniknął. Nie usunąłem, ale zniknęło
Christopher Rucinski
13

Możesz utworzyć inny plik wymiany tak jak ja:

  1. sudo fallocate -l 4G /swapfile
  2. sudo chmod 600 /swapfile
  3. sudo mkswap /swapfile
  4. sudo swapon /swapfile
  5. Sprawdź, czy działa sudo swapon --show
    Aby na stałe dodać plik do fstabpliku, wpisując:
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
borekon
źródło
Należy pamiętać, że fallocatenależy użyć bit do utworzenia pliku, ponieważ tworzy on rzadki plik. patrzman mkswap
Charles Green
@CharlesGreen działało to tak, jak napisałem, więc powinno działać dla wszystkich.
borekon
Sugerowałbym lekturę man mkswap, szczególnie ostatni parafrazę przed „Środowiskiem”
Charles Green
1
pracował nad NanoPi Neo z Armbian v 5.65
BiTinerary
5

Mam dobre wyniki na moim Ubuntu 17.04 zgodnie z radą Ariana Acosty z blogu . Tutaj możesz zastąpić 4G sudo fallocate -l 4G /swapfiledowolną ilością gigabajtów, którą chcesz. Na przykład sudo fallocate -l 2G /swapfiledla TS.

Ogólnie rzecz biorąc, zalecany rozmiar pliku wymiany wynosi 2X więcej pamięci RAM, ale można go zwiększyć tak, jak potrzebujesz. Pamiętaj, że nie zastępuje to pamięci, ponieważ wydajność jest znacznie gorsza, ponieważ rzeczy są przechowywane na dysku.

Stworzyłem prosty skrypt bash, który zwiększa plik wymiany do 4 GB i przetestowałem na Ubuntu 16.04.

Można to uruchomić wiersz po wierszu lub skrypt bash, ale używam go do instalacji bezgłowych.

#!/bin/bash
echo "====== Current Swap ======"
sudo swapon -s
echo "====== Turning Off Swap ======"
sudo swapoff /swapfile
echo "====== Allocating 4GB Swap ======"
sudo fallocate -l 4G /swapfile
echo "====== Making Swap ======"
sudo mkswap /swapfile
echo "====== Setting Permissions to Root Only  ======"
sudo chmod 600 /swapfile
echo "====== Turning On Swap ======"
sudo swapon /swapfile
echo "====== Current Swap ======"
sudo swapon -s
echo "====== Done! ======"
Denis Trofimov
źródło
3
Powinieneś dodać argument do skryptu, który jest ilością SWAP do dodania i na końcu dodać go do fstab. Ale nadal mi się podoba
LnxSlck
0

Ogólna odpowiedź na „jak zmienić rozmiar pliku wymiany”:

Od Bogdan Cornianu, tutaj: https://bogdancornianu.com/change-swap-size-in-ubuntu/

[QUOTE (PRAWIE VERBATIM, z kilkoma dodatkami do moich komentarzy) START]

W poniższym przykładzie rozszerzymy przestrzeń wymiany dostępną w pliku / swap z 4 GiB do 8 GiB.

  1. Wyłącz wszystkie procesy wymiany

    sudo swapoff -a
    
  2. Zmień rozmiar zamiany

    sudo dd if=/dev/zero of=/swapfile bs=1G count=8
    

    if= plik wejściowy = plik
    ofwyjściowy
    bs= rozmiar bloku; Tutaj 1Goznacza 1 Gibibyte lub GiB, który zgodnie man ddjest G = 1024 * 1024 * 1024 bajtów
    count= mnożnik bloków

  3. Udostępnij plik jako swap

    sudo mkswap /swapfile
    
  4. Aktywuj plik wymiany

    sudo swapon /swapfile
    
  5. Sprawdź ilość dostępnych swapów

    grep SwapTotal /proc/meminfo
    

[KONIEC QUOTE]

Gabriel Staples
źródło