Como aumento o tamanho do arquivo de troca sem removê-lo no terminal?

59

Existe uma maneira de aumentar meu "swapfile" existente sem precisar destruí-lo e recriá-lo? Gostaria de aumentar meu espaço de troca de 1 GB para 2 GB. Atualmente, está configurado da seguinte forma:

$ 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

Estou usando o Ubuntu 14.04.

Dave
fonte
Quanta RAM você tem? 2G é suficiente? Eu acho que você terá que swapoffcriar um novo / swapfile mkswap, eswapon -a
heynnema
11
Adicione um novo arquivo de troca, siga as instruções da pergunta acima. você pode ter 2 arquivos de troca;)
Ravexina
11
@Ravexina, talvez uma pergunta para iniciantes, mas por que eu gostaria de adicionar um novo arquivo de troca em vez de aumentar o tamanho do existente? Ou não é possível aumentar um arquivo de troca existente?
Dave
@ Dave Isso também é possível, como você já deve saber, swapoffentão dde mkswapfinalmente swapon. Eu pensei que você não quer tocar no seu arquivo.
Ravexina
2
@Ravexina postar isso como resposta #
Sergiy Kolodyazhnyy 21/17

Respostas:

67

Primeiro desative o arquivo de troca:

sudo swapoff /swapfile

Agora vamos aumentar o tamanho do arquivo de troca:

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

O comando acima acrescentará 1 GiB de zero bytes no final do seu arquivo de troca.

Configure o arquivo como um "arquivo de troca":

sudo mkswap /swapfile

ativar a troca:

sudo swapon /swapfile
Ravexina
fonte
3
sudo fallocate -l 2G /swapfileprovavelmente é mais seguro que o dd (embora não mantenha o arquivo de troca original) e também precisa de um sudo chmod 600 /swapfile.
heynnema
7
@heynnema Não cria fallocatearquivos esparsos? A página de swaponmanual diz que arquivos de troca esparsos são problemáticos (mencionando especificamente fallocate).
Muru
3
@ heynnema não, a página de mkswapmanual também diz que os arquivos não devem conter nenhum furo.
Muru
11
@ muru acho que estou errado :-) Toda vez que eu li como criar um arquivo / swap com o início de 17.04, eles usaram fallocate. Acho que teremos que usar o "destruidor de disco"!
heynnema
11
@heynnema: O que você pode fazer é fallocatepré-alocar espaço em disco e depois usar ddpara preencher os buracos com zeros.
David Foerster
39

Você deve adicionar um novo arquivo de troca em vez de redimensionar o arquivo existente, pois não custa nada fazer isso . Para redimensionar um arquivo de troca, você deve primeiro desativá-lo, o que despeja o conteúdo da troca na RAM, o que aumenta a pressão na RAM e pode até convocar o assassino do OOM (sem mencionar que você pode estar debulhando seus discos por vários minutos). Vários arquivos de troca não são um problema, é trivialmente fácil de configurar outro arquivo de troca. Não há literalmente nenhum benefício em redimensionar um arquivo de troca em vez de adicionar outro.

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
fonte
É sudo chmod 600 /some/fileobrigatório ou não?
heynnema
11
E count=1Kdá um arquivo 1G? contagem está no tamanho do bloco, sim? E isso pode ser 512/4096? Ou minha matemática está errada?
heynnema
3
+1 Essa abordagem também facilita a desconexão de um dos arquivos de troca se você decidir mais tarde precisar do espaço em disco de volta.
joeytwiddle
2
Isso realmente precisa ser marcado como a resposta correta. Uau, bravo!
Beshoy Girgis
11
@ muru isso é suposto ser uma solução permanente? Eu executei esse comando no dia 30 de abril, mas em algum momento do mês de maio, meu segundo arquivo de troca desapareceu. Eu não
apaguei
13

Você pode criar outro arquivo de troca como eu fiz:

  1. sudo fallocate -l 4G /swapfile
  2. sudo chmod 600 /swapfile
  3. sudo mkswap /swapfile
  4. sudo swapon /swapfile
  5. Verifique se ele está funcionando. sudo swapon --show
    Para torná-lo permanente, adicione um arquivo ao fstabarquivo digitando:
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Borekon
fonte
Observe que o fallocatebit deve ser usado para criar o arquivo, pois cria um arquivo esparso. verman mkswap
Charles Green
@CharlesGreen funcionou comigo como eu escrevi, por isso deve funcionar para quase todos.
borekon 10/03
Sugiro ler man mkswap, especialmente o último parágrafo antes de "Meio Ambiente"
Charles Green
11
trabalhou no NanoPi Neo com o Armbian v 5.65
BiTinerary
5

Tenho bons resultados no meu Ubuntu 17.04 seguindo os conselhos de Arian Acosta no blog . Pode-se substituir o 4G aqui sudo fallocate -l 4G /swapfilepor qualquer quantidade de gigabytes que você desejar. Por exemplo sudo fallocate -l 2G /swapfilepara TS.

De um modo geral, o tamanho recomendado para um arquivo de troca é 2X a quantidade de RAM, mas você pode aumentá-lo conforme necessário. Lembre-se de que isso não substitui a memória porque o desempenho é muito pior, pois as coisas são armazenadas no disco.

Eu criei um script bash simples que incrementa o arquivo de troca para 4 GB e o testei no Ubuntu 16.04.

Isso pode ser executado linha por linha ou um script bash, mas eu o uso para fazer instalações sem cabeça.

#!/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
fonte
3
Você deve ter adicionado um argumento ao script, que é a quantidade de SWAP a ser adicionada e, finalmente, adicionado ao fstab. Mas ainda assim, eu gosto deste
LnxSlck
0

Resposta geral para "como redimensionar o arquivo de troca":

De Bogdan Cornianu, aqui: https://bogdancornianu.com/change-swap-size-in-ubuntu/

[CITAÇÃO (QUASE VERBATIM, com apenas algumas das minhas adições de comentários) INICIAR]

No exemplo a seguir, estenderemos o espaço de troca disponível no / swapfile de 4 GiB para 8 GiB.

  1. Desativar todos os processos de troca

    sudo swapoff -a
    
  2. Redimensionar a troca

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

    if= arquivo de entrada = arquivo de
    ofsaída
    bs= tamanho do bloco; aqui, 1Gsignifica um gibibyte, ou chaveta, a qual, de acordo com o man ddé L = 1024 * 1024 * 1024 bytes
    count= multiplicador de blocos

  3. Tornar o arquivo utilizável como swap

    sudo mkswap /swapfile
    
  4. Ativar o arquivo de troca

    sudo swapon /swapfile
    
  5. Verifique a quantidade de swap disponível

    grep SwapTotal /proc/meminfo
    

[CITAÇÃO FINAL]

Gabriel Staples
fonte