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.


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

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

É 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

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! ======"

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]

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.