Aumente o Swap do seu Linux em Minutos: Guia Completo!

Adicione espaço de *swap* ao seu sistema Linux ou expanda o *swap* já existente, sem a necessidade de alterar partições. Este guia demonstra um método simples para configurar o seu espaço de *swap* de maneira personalizada.

Arquivos de *Swap* vs. Partições de *Swap*

Diversas situações podem levar à necessidade de aumentar o espaço de *swap* ou adicionar um novo ao seu computador Linux.

É possível que o seu *swap* esteja constantemente operando no limite ou próximo dele.
Uma seleção errada durante a instalação pode resultar na omissão inadvertida do *swap*.
Talvez tenha decidido inicialmente que a sua memória RAM era suficiente, mas mudou de ideia.
Às vezes, você pode assumir a administração de um sistema sem *swap*, por motivos desconhecidos.

A solução para estes casos é adicionar um arquivo de *swap*. Este é um arquivo reservado, alocado previamente para uso como *swap*. Ele trabalhará em conjunto com qualquer *swap* existente, seja arquivo ou partição.

Antigamente, arquivos de *swap* apresentavam menor desempenho em comparação a partições de *swap*. Essa diferença se tornou insignificante devido à evolução de discos rígidos mecânicos e otimizações no sistema operacional Linux. Algumas distribuições Linux agora optam por arquivos de *swap* como padrão em vez de partições.

O *swap* não é apenas um recurso de emergência quando a RAM está escassa. É um componente vital para um sistema bem-sucedido. Sem *swap*, a gestão de memória pelo *kernel* torna-se extremamente complexa. Vamos explorar como adicionar espaço de *swap* de maneira fácil.

Considerações Iniciais: Btrfs e SSDs

Antes de prosseguirmos, vamos abordar dois pontos importantes.

O Sistema de arquivos Btrfs possui algumas peculiaridades em relação a arquivos de *swap*. Anteriormente, havia conflito entre a natureza de cópia na escrita do Btrfs e a forma como arquivos de *swap* necessitavam operar. Funções essenciais para arquivos de *swap* não eram implementadas e suposições sobre a numeração de blocos não se verificavam no Btrfs, tornando arquivos de *swap* incompatíveis.

A partir do *kernel* 5.0, é possível ter arquivos de *swap* em sistemas Btrfs se configurados com as seguintes condições:

Sem o recurso *copy-on-write* (NOCOW).
Não compactados.
Localizados no mesmo disco rígido.

A maioria dos usuários usa o sistema de arquivos *ext4* padrão, então essa limitação não se aplicará.

Quando os *Solid-State Drives* (SSDs) foram lançados, havia receio em relação ao uso em cenários com gravações frequentes. Desaconselhava-se usar *swap* em SSDs e até mesmo instalar o sistema operacional neles.

Hoje em dia, essa preocupação é menos relevante. SSDs atuais têm vida útil que ultrapassa a maioria dos computadores. Um arquivo de *swap* em um SSD funcionará melhor que uma partição de *swap* em um disco rígido mecânico.

Verificando o *Swap* Existente

Vamos verificar qual *swap* está disponível em sua máquina. Usaremos dois métodos. O comando `free` exibe memória usada e livre. A opção `-h` (legível por humanos) facilita a leitura dos valores de memória.

free -h

A saída do `free` mostra que não há *swap* configurado nesta máquina.

A memória *swap* é sempre mencionada junto com a RAM, e é importante observar que a RAM livre é mostrada como 237 MB. Este valor não corresponde à RAM total disponível. A RAM disponível é de 881 MB.

O Linux usa RAM livre para funções como *cache* de arquivos e *buffers* do *kernel*. A quantidade de RAM dedicada a isso é “buff/cache”, que é 871 MB. Essa memória ainda é contabilizada como “disponível”. O conteúdo do “buff/cache” pode ser descartado para uso imediato por outros aplicativos.

Outra forma de verificar a presença de *swap* é usar o comando `swapon`. A opção `–show` não faz alterações no *swap* do computador; apenas exibe as estatísticas.

swapon --show

Se esse comando não apresentar saída, não há *swap* configurado.

Se os comandos revelarem a existência de *swap*, considere seu tamanho ao decidir o tamanho do novo arquivo de *swap*.

Qual a Quantidade de *Swap* Necessária?

A regra tradicional era “o dobro da quantidade de RAM”. Isso se aplicava a computadores com pouca RAM. Atualmente, com a RAM mais acessível e programas exigindo mais memória, PCs domésticos com 32 GB de RAM são comuns. Alocar 64 GB de *swap* para 32 GB de RAM é excessivo.

A quantidade ideal de *swap* é um tema controverso. O FAQ de *swap* do Ubuntu apresenta uma análise sensata, com uma tabela recomendando quantidades de *swap* baseadas na RAM e no uso de hibernação.

Felizmente, a quantidade exata não é crucial. Arquivos de *swap* podem ser facilmente removidos e substituídos por outros, maiores ou menores. Você pode até mesmo adicionar vários arquivos de *swap*.

Escolha um tamanho de arquivo de *swap* da tabela e monitore o uso do sistema. Ajustes são facilmente realizados, uma tarefa simples e rápida com arquivos de *swap*, diferente de ajustar partições em um sistema ativo.

Criando o Arquivo de *Swap*

Não use o comando `fallocate` para criar arquivos de *swap*. A página de manual do `swapon` explica:

    A implementação do arquivo de swap no kernel espera escrever diretamente no arquivo,
    sem o auxílio do sistema de arquivos.

    Isso é um problema com arquivos com "buracos" ou arquivos *copy-on-write* em sistemas de arquivos
    como o Btrfs. Comandos como cp(1) ou truncate(1) criam arquivos com "buracos".
    Esses arquivos serão rejeitados pelo swapon.

    Arquivos pré-alocados com fallocate(1) podem ser interpretados como arquivos
    com "buracos", dependendo do sistema de arquivos. Arquivos de swap pré-alocados
    são suportados no XFS desde o Linux 4.18.

    A solução mais portátil para criar um arquivo de swap é usar dd(1) e /dev/zero.
    

Portanto, apesar do `fallocate` ser mais rápido, usaremos o `dd` para criar o arquivo de *swap*. A máquina usada neste exemplo tem 2 GB de RAM. Criaremos um arquivo de *swap* de 1 GB.

As opções são:

`if`: O arquivo de entrada. Usaremos `/dev/zero`, que fornecerá um fluxo de bytes zeros.
`of`: O arquivo de saída. Criaremos um arquivo chamado `swapfile` no diretório raiz.
`bs`: O tamanho do bloco em bytes. Define quantos bytes ler e escrever por vez.
`count`: Quantos blocos ler e escrever. Multiplique este valor por `bs` para obter o tamanho do arquivo.

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

Estatísticas são apresentadas após a criação do arquivo.

É possível verificar o número de blocos gravados, o tamanho do arquivo, o tempo gasto na criação e a taxa de transferência.

Use o comando `ls` para visualizar o arquivo no diretório raiz:

ls /

Preparando o Arquivo de *Swap*

Antes de usar o arquivo de *swap*, precisamos prepará-lo com o comando `mkswap`. Basta fornecer o caminho e o nome do arquivo:

sudo mkswap /swapfile

O arquivo é preparado para uso como *swap*. Observe o aviso sobre as permissões do arquivo. É preciso alterá-las para que apenas o usuário *root* possa ler e gravar no arquivo de *swap*.

Ativando o Arquivo de *Swap*

As permissões padrão são permissivas. Precisamos restringi-las para que somente o *root* acesse o arquivo de *swap*. Use o comando `chmod` para alterar as permissões:

sudo chmod 600 /swapfile

Isso remove todas as permissões de grupo e outros, permitindo apenas que o *root* leia e grave no arquivo.

Use o comando `swapon` para informar ao Linux sobre o novo arquivo de *swap*. Basta fornecer o caminho e o nome do arquivo:

sudo swapon /swapfile

O arquivo de *swap* agora está ativo.

Adicionando o *Swap* ao fstab

Para que o arquivo de *swap* esteja disponível após a reinicialização, adicione-o ao arquivo `/etc/fstab`. Use o editor de texto de sua preferência, como o Gedit.

sudo gedit /etc/fstab

Adicione a seguinte linha ao final do arquivo:

/swapfile  none    swap    sw      0       0

Os campos são:

Sistema de arquivos: O caminho e o nome do arquivo de *swap*.
Ponto de montagem: O arquivo não é montado como um sistema de arquivos, então usamos “none”.
Tipo: Especificamos “swap”.
Opções: Durante a inicialização, `swapon -a` é executado, ativando todos os dispositivos marcados como *swap*. Esta opção instrui o Linux a tratar essa entrada como um recurso *swap*. Embora seja comum ver “defaults” aqui, a opção correta é “sw”.
Dump: Pode ser definido como zero, irrelevante neste caso.
Aprovado: Pode ser definido como zero, irrelevante neste caso.

Salve as alterações e feche o editor.

Verificando o Uso de *Swap*

Para verificar se o *swap* está em uso, use o comando `swapon` com a opção `–show`:

swapon --show

As colunas exibidas são:

Nome: O nome da partição ou arquivo de *swap*.
Tipo: O tipo de dispositivo de *swap*.
Tamanho: O tamanho do recurso *swap*.
Usado: A quantidade de espaço de *swap* em uso.
Prio: A prioridade do *swap*.

Prioridade do *Swap*

Cada *swap* recebe uma prioridade. Se não for fornecida, é alocada automaticamente, sempre negativa. Prioridades definidas manualmente variam de 0 a 32767. *Swaps* com maior prioridade são usados primeiro.

Se múltiplos *swaps* tiverem a mesma prioridade, eles são usados alternadamente. Se houver apenas um *swap*, a prioridade é irrelevante. Vamos alterar a prioridade do arquivo *swap* que criamos para ilustrar o processo.

Para definir uma prioridade, adicione `pri=(prioridade)` à entrada `/etc/fstab`. Edite a linha para:

/swapfile  none    swap    sw,pri=10     0    0

Adicione `pri=10` ao campo de opções, separado por vírgula do “sw”. Não insira espaços entre “sw”, a vírgula e `pri=10`. Reinicie o computador e execute `swapon –show`:

swapon -- show

A prioridade do *swap* foi alterada para 10, provando que o campo de opções em `/etc/fstab` não é ignorado.

*Swap* Simplificado

Resumindo, podemos criar um arquivo de *swap* de forma rápida e fácil da seguinte maneira:

sudo dd if=/dev/zero /of=/swapfile2 bs=1024 count=104857
sudo mkswap /swapfile2
sudo chmod 600 /swapfile2
sudo swapon /swapfile2

Verificando a funcionalidade:

swapon --show

Se você desejar tornar as alterações permanentes, adicione-as ao arquivo `/etc/fstab`.

Pronto! Tarefa Concluída.